大規模言語モデルのFunction Callingとは?

大規模言語モデルのFunction Callingとは?

大規模言語モデル(LLM)のハルシネーションを抑えるための技術の一つとして、Retrieval-Augmented Generation(RAG)があります。RAGは、プロンプトに文脈を追加するために外部データを検索するリトリーバーを使用し、その後ジェネレーター(LLM)に送ります。

RAGは静的なデータに対して有効である一方、リアルタイムデータ(株価、注文追跡、フライト状況、在庫管理など)から文脈を必要とするアプリケーションでは、LLMのFunction Callingの有用性が注目されています。RAGとFunction Calling共通する目的は、プロンプトに既存のデータソースやリアルタイムAPIからの文脈を補足することで、LLMが正確な情報にアクセスできるようにすることです。

Function Callingの機能を持つLLMは、特定のタスクを自律的に実行するAIエージェントの開発の基礎となります。例えば、これらの機能はLLMと他のAPIやシステムの統合を可能にし、データの取得、処理、分析を含む複雑なワークフローの自動化を実現します。

Function Calling(ファンクションコーリング)とは、ユーザーのプロンプトから利用可能な関数(ツール)の中から適切な関数を実行し、正しいパラメーターをその関数に渡す能力を指します。通常のテキスト応答を生成する代わりに、Function Calling用に微調整されたLLMは、通常JSONオブジェクト形式の構造化データを返します。この返された構造化データは、データを取得したり、リアルタイムデータを取得したり、第三者APIを呼び出したりするために使用されます。ベクターデータベースを必要とせずにLLMにデータを直接受け渡すための有用な技術です。

Function Callingは、自然言語理解と実際のタスクを橋渡しすることで、LLMの能力を大幅に拡張します。これにより、これらのモデルは外部システムとシームレスに統合し、複雑な操作を実行し、より正確で文脈に即した応答を提供することができます。

Function Calling実用例

アプリケーションは通常、Function Calling機能を持つLLMを2回呼び出します。一度目はプロンプトをターゲット関数名とその入力引数にマッピングし、二度目は呼び出された関数の出力を最終応答生成のために送信します。

以下のワークフローは、アプリケーション、関数、およびLLMがメッセージを交換して全サイクルを完了する方法を示しています。

  1. ユーザーが関数へのアクセスを要求するプロンプトを送信します(例:「東京の現在の天気は?」)。
  2. アプリケーションはプロンプトと利用可能なすべての関数を送信します。例では、プロンプトと関数get_current_weather(city)の入力スキーマが送信されます。LLMはプロンプトがFunction Callingを必要とするかどうかを判断し、必要であれば提供された関数のリストとそのスキーマを参照し、関数とその入力引数を含むJSONオブジェクトで応答します。
  3. アプリケーションはLLMの応答を解析します。関数が含まれている場合、アプリケーションはそれを順次または並行して呼び出します。
  4. 各関数の出力は最終プロンプトに含まれ、LLMに送信されます。モデルがデータにアクセスできるようになるため、関数が提供した事実データに基づいて回答が生成されます。

なぜFunction Callingが必要なのか?

Function CallingをLLMベースのAIシステムに組み込むことで、対話性と有用性が大幅に向上し、ユーザーの代わりにタスクを実行することができます。さらに、Function Callingはタスクの実行を効率化し、ユーザーが複数のアプリケーションやインターフェースを切り替える必要をなくします。また、Function Callingは特定のユースケースに合わせたカスタム関数を定義する柔軟性を提供し、パーソナライズされた体験を提供することができます。

応用技術:RAGとFunction Callingを同時に使う

RAGとFunction Callingの統合による利点

RAGとFunction Callingの技術を統合することで、LLMの応用範囲は大幅に拡大します。このアプローチは、外部のデータソースからの正確な情報取得と、特定のタスクを実行するための効率的な関数呼び出しを可能にし、さまざまなアプリケーションのニーズに対応します。カスタマーサポート、在庫管理、金融サービスなど、多岐にわたる分野での応用が期待されます。

構造化された取得プロセスの実現

RAGフレームワーク内でFunction Callingを使用することで、より構造化されたデータ取得プロセスが可能になります。例えば、ユーザーの問い合わせに基づいて特定の情報を抽出する関数を事前に定義し、RAGシステムが包括的な知識ベースからその情報を取得します。この方法により、応答は関連性が高く、アプリケーションのニーズに正確に合わせられます。

具体例:在庫管理システム

シナリオ: 大規模なオンライン小売業者が在庫管理システムを強化するためにRAGとFunction Callingを活用する場合を考えてみましょう。

  1. ユーザーの問い合わせ:
    • 店舗管理者が「現在の在庫状況を教えてください」というプロンプトをシステムに送信します。
  2. RAGによるデータ取得:
    • RAGエージェントは、データベースから最新の在庫情報を取得します。これは、事前にインデックス化され、ベクターデータベースに保存されているデータを使用します。
  3. Function Callingによるタスク実行:
    • 取得した在庫データを基に、在庫不足の商品について再注文を行う関数を呼び出します。例えば、在庫が一定量以下の商品については、サプライヤーに自動で発注をかけるためのFunction Callが実行されます。
  4. 統合された応答:
    • システムは在庫状況をユーザーに報告し、同時に再注文が実行されたことを確認する応答を生成します。

具体例:金融サービス

シナリオ: 金融機関が投資助言サービスを提供するためにRAGとFunction Callingを使用する場合を考えてみましょう。

  1. ユーザーの問い合わせ:
    • 顧客が「現在の市場状況に基づいて投資のアドバイスをください」というプロンプトをシステムに送信します。
  2. RAGによるデータ取得:
    • RAGエージェントは、最新の市場データや経済ニュースを取得します。これには、ニュース記事、経済レポート、株価情報などが含まれます。
  3. Function Callingによる分析:
    • 取得したデータを基に、リスク評価や投資シミュレーションを行う関数を呼び出します。これにより、個別の投資戦略を生成するための分析が実行されます。
  4. 統合された応答:
    • システムは顧客に対して詳細な投資アドバイスを提供し、推奨する投資ポートフォリオの構築方法を説明する応答を生成します。

Function Callingを有するLLMとは?

すべてのLLMがFunction Callingを有している訳ではありません。Function Callingをサポートする適切なLLMを選択することは、エージェントワークフローやRAGエージェントの構築において重要です。以下は、Function Callingに理想的な商用およびオープンLLMのリストです。

  • OpenAI GPT-4およびGPT-3.5 Turbo:Function Callingをサポートする最も有名な商用LLMです。開発者はカスタム関数を定義でき、LLMが推論中に呼び出します。
  • Google Gemini:GoogleのGemini LLMもFunction Callingをサポートし、Vertex AIおよびGoogle AI Studioを通じて利用できます。
  • Anthropic Claude:AnthropicのClaude 3ファミリーのLLMは、OpenAIのモデルと同様のFunction Calling機能を持つAPIを提供します。
  • Cohere Command:CohereのCommand RおよびCommand R+ LLMもFunction CallingのためのAPIを提供し、外部ツールやデータソースとの統合を可能にします。
  • Mistral:オープンソースのMistral 7B LLMはFunction Calling機能を示しており、推論中にカスタム関数を定義して呼び出すことができます。
  • NexusRaven:NexusRavenは13BのオープンソースLLMで、高度なFunction Callingのために特別に設計されており、サイバーセキュリティツールやAPIを呼び出す際にGPT-4を超える性能を示しています。
  • Gorilla OpenFunctions:Gorilla OpenFunctionsモデルはAPIドキュメントにファインチューニングされた7B LLMで、自然言語プロンプトから正確なFunction CallやAPIリクエストを生成できます。
  • Fireworks FireFunction:FireFunction V1は、Mixtral 8x7Bモデルに基づくオープンソースのFunction Callingモデルで、実世界のユースケースにおける構造化情報生成およびルーティング意思決定でGPT-4レベルの品質に近い性能を示します。
  • Nous Hermes 2 Pro:Hermes 2 Proは、Function Calling、JSON構造化出力、一般タスクに優れた7Bパラメータモデルです。Function Calling評価で90%、構造化JSON出力評価で81%の精度を達成しており、Fireworks.aiで構築されています。Hermes 2 Proは、Mistral 7BおよびLlama 3 8Bモデルの両方にファインチューニングされており、開発者に選択肢を提供します。

上部へスクロール