Gorilla OpenFunctions: 大規模言語モデルとAPIを繋ぐ画期的なオープンソース・プロジェクト

LLM

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に匹敵します。


こちらの記事もおすすめ

OpenCodeInterpreterのデモを触ってみた
OpenCodeInterpreterは、開発者やプログラミング愛好家の間で注目を集めています。その公式デモを体験し、その機能と制約について深堀りしてみました。この記事では、m-a-p/OpenCodeInterpreter-DS-6.7B...
【日本語訳】OpenCodeInterpreter: コード生成、実行、および改善の統合
OpenCodeInterpreter: コード生成、実行、および改善の統合 | こちらの記事もおすすめ🌟 近日中の新機能💡 OpenCodeInterpreter-SC2シリーズモデル(StarCoder2ベース)のオープンソ...

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呼び出しを受け取り、正しい引数を持つ関数を返す高度なモデルです。並列関数もサポートしています。

参考サイト

Introduction to Gorilla LLM
gorilla-llm/gorilla-openfunctions-v1 · Hugging Face
We’re on a journey to advance and democratize artificial intelligence through open source and open science.

コメント

タイトルとURLをコピーしました