Llama 3.3 70B 関数呼び出し: シームレスな統合によるパフォーマンス向上

Llama 3.3 70B 関数呼び出し: シームレスな統合によるパフォーマンス向上

主なハイライト

できること: リアルタイムのデータ取得、システム操作、自動ワークフローを実行します。

対応モデル: Llama 3 シリーズ、GPT シリーズ、Gemma 2、Mistral Nemo。

実装方法: Novita AI の「モデルライブラリ」から API をインストールし、Langchain フレームワークで実装します。

関数呼び出しは、大規模言語モデル(LLM)の能力を大幅に向上させる手法であり、外部世界とのインタラクションを可能にします。テキスト生成だけでなく、関数呼び出しを利用することで、特定のタスクの実行、リアルタイム情報へのアクセス、複雑な操作を実現できます。この記事では、関数呼び出しの概念、実用的な応用、そして Llama 3.3 70B のようなモデルがそれをより利用しやすくしている方法について解説します。

関数呼び出しで解決できる問題

  1. リアルタイム情報へのアクセス
  • 最新の株価を確認
  • 現在の天気データを取得
  • 速報ニュースにアクセス
  1. システム操作
  • メール送信
  • ソーシャルメディアへの投稿
  • データベースのクエリと書き込み
  1. ワークフローの自動化
  • データスクレイピングと処理
  • マルチステップタスクの実行
  • 複雑な分析の自動化
  1. データの正確性
  • 情報の鮮度を確保
  • 正確なクエリ結果を提供
  • 古いデータによるエラーを削減

関数呼び出しとは

関数呼び出しの核心は、LLM が特定のタスクに外部の関数やツールが必要であることを認識し、その関数を実行するための構造化データ(通常は JSON 形式)を出力できる点にあります。この構造化データには関数名と必要な引数が含まれます。つまり、関数呼び出しは AI の広大な知識と具体的なアクションとの間の架け橋として機能します。AI エージェントやチャットボットが特定のタスクを実行したり、外部データやサービスにアクセスしたりできるようにします。

関数呼び出し対応モデル

多くの LLM やプラットフォームが関数呼び出しをサポートしています。Novita AI の「モデルライブラリ」ページから API をインストールし、Langchain を通じて関数呼び出しを実装できます。

モデルライブラリ

  • Llama 3.3: 700億パラメータ版は、関数呼び出しテストで高いパフォーマンスを示し、ユーザーのリクエストに基づいていつどの関数を呼び出すかを正確に識別します。
  • Mistral: Mistral-Large-2 のようなモデルは、watsonx.ai 環境内での関数呼び出しで成功を示しています。
  • Gemini: Google の Gemini モデルも関数呼び出しをサポートしており、さまざまな使用例が提供されています。

関数呼び出しの仕組み

  1. 関数宣言: 最初に、再利用可能なコードブロック(関数)と、その機能、入力、出力の説明を定義します。
  2. プロンプトの送信: ユーザーは LLM にプロンプトとともに関数宣言のセットを送信します。これにより、モデルは利用可能なツールを認識します。
  3. モデル分析: LLM はプロンプトを解析し、リクエストを満たすために提供された関数のいずれかを呼び出す必要があるかどうかを判断します。
  4. 構造化出力: 関数呼び出しが必要な場合、LLM は関数名とそのパラメータの値を含む JSON 形式の構造化出力を生成します。
  5. 関数呼び出し: アプリケーションまたはシステムはこの構造化出力を使用して、指定された関数を呼び出し、パラメータを渡します。
  6. 関数実行: 外部サービスまたは API が提供されたパラメータを使用して関数を実行します。
  7. 出力応答: 外部サービスは確認または結果を AI に送り返します。
  8. モデル応答: LLM はこの出力を使用して、ユーザー向けの自然言語応答を生成するか、さらなる処理を行います。
  • モデルは直接関数を呼び出すのではなく、その構造化出力を外部プログラムが使用して関数を呼び出します。

https://www.youtube.com/watch?v=Qor2VZoBib0

関数呼び出しと JSON モードの比較

関数呼び出しと JSON モード

関数呼び出しの利点

  • 効率性の向上: 関数を直接呼び出すことで処理時間が短縮され、レイテンシが低減します。これは即時アクションが必要なアプリケーションにとって重要です。
  • 柔軟性の向上: 開発者はアプリケーション全体を大幅に変更することなく、関数を簡単に更新または修正でき、新しい要件に迅速に対応できます。
  • スケーラビリティ: 既存のインフラを大きく変更することなく新しい関数を追加できるため、スケーラビリティが向上します。
  • パーソナライズされたインタラクション: ユーザーのカレンダーにアクセスして既存の予定と重ならない会議時間を提案するなど、パーソナライズされたユーザー体験が可能です。
  • AI と現実世界のアクションの橋渡し: ユーザーに代わってメールやテキストメッセージを送信するなどの実用的なタスクを AI が実行できるようにします。
  • 複雑な会話型エージェント: 外部 API や知識ベースを使用して関連性の高い応答を提供し、複雑な質問に答える高度なチャットボットを作成できます。

関数呼び出しの実用的な応用

  • 会話型エージェント: 最新情報を得るために外部 API を利用する高度なチャットボットで使用されます。
  • 自然言語理解: テキストから構造化データを抽出し、エンティティ認識や感情分析などのタスクを実行します。
  • API 統合: LLM が外部 API と統合し、ユーザーの入力に基づいてデータを取得したりアクションを実行したりできるようにします。
  • 金融アシスタンス: リアルタイムの金融データにアクセスし、パーソナライズされたアドバイスを提供する AI 金融アドバイザーを構築します。
  • サポートチケットの自動化: コンテキストを考慮したルールでチケットを処理し、サポートチケットの割り当てを自動化します。
  • 知識検索: 学術記事を要約して質問に回答し、引用を提供する関数を作成することで、知識ベースから情報を取得します。
  • マルチモーダルアプリケーション: 画像、動画、音声、PDF に基づいて関数をトリガーします。

Novita AI 経由で Llama 3.3 70B の関数呼び出しを使用する方法

ステップ1: API キーを取得してインストール!

「キー管理」ページに移動し、画像のように API キー をコピーします。

API キー

Novita AI の「モデルライブラリ」ページをご覧ください。使用するプログラミング言語のパッケージマネージャーを使用して Novita AI API をインストールします。

llama 3.3 70b コード

登録すると、Novita AI が $0.5 のクレジットを提供して始められます!

無料クレジットを使い切った場合は、支払いを行って引き続き使用できます。

ステップ2: LangChain を使用して関数呼び出しを実装する

今回は、加算と乗算を実行できるシンプルな数式アプリケーションを作成します。

💡 このガイドでは便宜上 LangChain を使用していますが、関数呼び出しの実装には特定のフレームワークは必要ありません。重要なのは、モデルが関数を理解し正しく呼び出すための適切なプロンプトを設計することです。ここでは LangChain を実装の簡略化のために使用しています。

前提条件

まず、必要なパッケージをインストールします。

pip install langchain-openai python-dotenv

環境のセットアップ

プロジェクトルートに .env ファイルを作成し、Novita AI API キーを追加します。

NOVITA_API_KEY=your_api_key_here

実装手順

1. ツールの定義

まず、LangChain の @tool デコレータを使用して 2 つの簡単な数式ツールを作成します。

from langchain_core.tools import tool

@tool
def multiply(x: float, y: float) -> float:
    """Multiply two numbers together."""
    return x * y

@tool
def add(x: int, y: int) -> int:
    """Add two numbers."""
    return x + y

tools = [multiply, add]

2. ツール実行関数の作成

次に、ツールを実行する関数を実装します。

from typing import Any, Dict, Optional, TypedDict
from langchain_core.runnables import RunnableConfig

class ToolCallRequest(TypedDict):
    name: str
    arguments: Dict[str, Any]

def invoke_tool(
    tool_call_request: ToolCallRequest, 
    config: Optional[RunnableConfig] = None
):
    """Execute the specified tool with given arguments."""
    tool_name_to_tool = {tool.name: tool for tool in tools}
    name = tool_call_request["name"]
    requested_tool = tool_name_to_tool[name]
    return requested_tool.invoke(tool_call_request["arguments"], config=config)

3. LangChain パイプラインのセットアップ

Novita AI の LLM を使用してツールコールを選択・準備するチェーンを作成します。

from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import JsonOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.tools import render_text_description

def create_chain():
    """Create a chain that uses the specified LLM model to select and prepare tool calls."""
    model = ChatOpenAI(
        model="meta-llama/llama-3.3-70b-instruct",
        api_key=os.getenv("NOVITA_API_KEY"),
        base_url="https://api.novita.ai/v3/openai",
    )
    
    rendered_tools = render_text_description(tools)
    system_prompt = f"""\
    You are an assistant that has access to the following set of tools. 
    Here are the names and descriptions for each tool:

    {rendered_tools}

    Given the user input, return the name and input of the tool to use. 
    Return your response as a JSON blob with 'name' and 'arguments' keys.

    The `arguments` should be a dictionary, with keys corresponding 
    to the argument names and the values corresponding to the requested values.
    """

    prompt = ChatPromptTemplate.from_messages(
        [("system", system_prompt), ("user", "{input}")]
    )

    return prompt | model | JsonOutputParser()

4. メイン処理関数の作成

数式クエリを処理するメイン関数を実装します。

def process_math_query(query: str):
    """Process a mathematical query by using an LLM to select the appropriate tool and execute it."""
    chain = create_chain()
    message = chain.invoke({"input": query})
    result = invoke_tool(message, config=None)
    return message, result

5. 使用例

以下は実装の使用方法です。

if __name__ == "__main__":
    message, result = process_math_query(
        "meta-llama/llama-3.3-70b-instruct", 
        "what's 3 plus 1132"
    )
    print(result)  # Output: 1135

結論として、関数呼び出しは AI システムが環境と対話する方法を急速に変革し、より実用的で効率的、かつユーザーフレンドリーなアプリケーションを可能にしています。Llama 3.3 70B のようなモデルは、この強力なテクノロジーへのアクセスを容易にし、AI 開発に数多くの可能性を開いています。

よくある質問

LLM における関数呼び出しとは何ですか?

関数呼び出しは、大規模言語モデルが特定のタスクに外部の関数やツールが必要であることを認識し、その関数を実行するための構造化データを生成する手法です。

関数呼び出しを使用する主な利点は何ですか?

主な利点には、タスク処理の効率向上、開発者が関数を簡単に更新できる柔軟性、大規模な変更なしに新機能を追加できるスケーラビリティ、そしてパーソナライズされたユーザーインタラクションが含まれます。

Llama 3.3 はどの言語をサポートしていますか?

英語、フランス語、ドイツ語、ヒンディー語、イタリア語、ポルトガル語、スペイン語、タイ語

Novita AI は、シンプルな API で AI モデルを簡単にデプロイできる機能を開発者に提供し、同時に手頃で信頼性の高い GPU クラウドを構築とスケーリングに提供する AI クラウドプラットフォームです。

おすすめの読み物