Gorilla OpenFunctionsとは
Gorilla OpenFunctionsは、大規模言語モデル(Large Language Model, LLM)のチャット補完機能を拡張し、自然言語の指示とAPIの文脈から実行可能なAPI呼び出しを生成するように設計されたオープンソース・プロジェクトです。InstagramやDoorDashなどの様々なサービスから、Google CalendarやStripeなどのツールまで、LLMがパラメータを埋めることができるようになります。APIの呼び出し手順やプログラミングに詳しくないユーザーでも、このモデルを使って目的の機能へのAPI呼び出しを生成できるようになります。
Gorilla OpenFunctionsは、精選されたAPIドキュメンテーションと、そのAPIドキュメンテーションから生成された質問-回答のペアを使ってトレーニングされたLLMです。私たちはGorilla Paradigmを拡張し、有効な関数呼び出し生成の品質と精度の向上に努めてきました。このブログでは、OpenAIのGPT-4で見られるような関数呼び出し機能と同様の機能を持つオープンソース代替手段の開発について説明します。私たちのソリューションはGorillaのレシピに基づいており、わずか7Bパラメータのモデルでも、その精度は驚くべきことにGPT-4に匹敵します。
こちらの記事もおすすめ
Gorilla OpenFunctionsの使い方
Gorilla OpenFunctionsの使い方は簡単です:
関数の定義
カスタム関数の説明を含むJSONファイルを提供します。各関数には、name
(APIの名前)、api_call
(このAPIの呼び出し方)、description
(APIの機能を説明)、そして最後にparameters
(API呼び出しに関連するパラメータのリスト)のフィールドが含まれている必要があります。
以下は、OpenFunctionsに与えることができるAPIドキュメンテーションの例です:
function_documentaion = {
"name" : "Order Food on Uber",
"api_call": "uber.eat.order",
"description": "Order food on uber eat given a list of items and the quantity of items respectively",
"parameters":
[
{
"name": "restaurants",
"description": "The restaurants user wants to order from"
},
{
"name": "items",
"description": "A list of order user wants to order from restaurants"
},
{
"name": "quantities",
"description": "A list of quantities corresponding to the items ordered"
}
]
}
このJSONファイルでは、Uber Eatsで食事を注文するためのAPI関数を定義しています。関数の名前はOrder Food on Uber
で、実際のAPI呼び出しはuber.eat.order
です。関数の説明はOrder food on uber eat given a list of items and the quantity of items respectively
で、パラメータとしてrestaurants
(注文したいレストラン)、items
(レストランから注文したい商品のリスト)、quantities
(注文した商品に対応する数量のリスト)の3つが定義されています。
質問をする
他の人に話しかけるように、やりたいことを説明します。
例: "マクドナルドでハンバーガー5個とチキンウィング6個を注文したい。"
関数呼び出しを取得
モデルは要求に基づいてPythonの関数呼び出しを返します。
入力:
get_gorilla_response(prompt="I want to order five burgers and six chicken wings from McDonlad.",
functions=[function_documentaion])
出力:
uber.eat.order(restaurants="McDonald",item=["chicken wings", "burgers"], quantity=[6,5])
この例では、「マクドナルドでハンバーガー5個とチキンウィング6個を注文したい」という自然言語の指示を入力として与えています。そして、事前に定義したfunction_documentaion
を関数のリストとして渡しています。
モデルは、この入力に基づいて正しいパラメータを推論し、Uber Eatsの注文関数uber.eat.order
を呼び出すPythonコードを生成します。restaurants
引数にはMcDonald
、item引数にはリストとして["chicken wings", "burgers"]
、quantity
引数にはリストとして[6,5]
が渡されています。
これにより、開発者だけでなく非開発者も、広範なコードを書くことなく複雑な機能を活用できるようになります。
OpenFunctionsのパフォーマンス・ベンチマーク
私たちは、現在の最先端モデルであるGPT-4-0613、およびGPT-4とGPT-3.5-turboの関数呼び出し機能に対して、自分たちのモデルをベンチマークしています。テストデータセットは、GPT-3.5-turboにfew-shot examplesを与え、旅行、金融、会議のスケジューリングなど、さまざまなドメインからAPIを生成するよう求めて作成した116の異なるクエリとAPIドキュメンテーションのペアで構成されています。
驚くべきことに、GPT-4とGPT-3.5の関数呼び出しは、関数呼び出しに特化した最先端のGPT-4-TurboとGPT-4モデルよりも優れたパフォーマンスを示しています。私たちのOpenFunctionsモデルは、わずかな差でそれに続いています。
OpenFunctionsデータの構成
私たちがモデルをトレーニングしたデータセットは、14,189の指示-APIペアで構成されています。APIドキュメンテーションは3つのソースから収集しました:
Pythonパッケージ
パッケージの公式ドキュメンテーションからPython APIを収集しました。意図的にクリーンで文書化されているパッケージを選択しました。
RapidAPI
APIマーケットプレイスからRapidAPIドキュメントを収集しました。RapidAPIは通常APIエンドポイントにリクエストを送信するため、APIドキュメンテーションをfunction requests.getという形式にフォーマットし、url、headers、paramsのプロパティを持つようにしました。
クラウドプロバイダーのコマンドラインツール
最後に、AWS、Azure、その他のハイパースケーラーからCLIドキュメントを使用しました。これらのドキュメントを使用して、Python風の関数呼び出しを構築します。
各APIドキュメンテーションに対して、3つの異なる指示-APIペアをトレーニングデータとして生成しました。この指示と「モデル」の回答ペアは、APIドキュメンテーションを正しく利用して正確な関数呼び出しを行う方法のfew-shot examplesを使用して自己生成されます。
コード関数呼び出しAPIとREST API
データセットを収集する際、APIの呼び出しは大まかに2つのカテゴリに分けられることがわかりました:
コード関数呼び出しAPI
Numpy、Sklearnなどの外部Pythonパッケージでよく見られるAPIです。これらのAPIは明確に定義されており、簡単にフォーマットできます。
REST API
インターネット上のAPIの大部分を占め、ほとんどのサービスを支えています。これらのAPIは通常、金融サービスから天気予報まで、さまざまな機能を提供するサードパーティによってホストされています。
モデルと機能
私たちは2つのモデルをリリースできることを嬉しく思います: gorilla-openfunctions-v0とgorilla-openfunctions-v1です。gorilla-openfunctions-v0 LLMは、7B LLaMA-v2-chatの指示チューニングモデルの上にトレーニングされた7Bパラメータのモデルです。ユーザーのプロンプトと単一のAPI呼び出しを受け取り、正しい引数を持つ関数を返します。gorilla-openfunctions-v1は、7B LLaMA-v2事前学習モデルの上にトレーニングされた7Bパラメータのモデルです。gorilla-openfunctions-v1は、ユーザーのプロンプトと複数のAPI呼び出しを受け取り、正しい引数を持つ関数を返す高度なモデルです。並列関数もサポートしています。
コメント