今週のざっくばらん
OpenAIの「神アップデート」
3週前に、「GPTからAPIを安定して呼ぶ方法」というタイトルで、GPT3/4からAPIを呼ぶために私が色々と苦労した話を書きましたが、この問題を綺麗に解決するアップデートが、OpenAIから行われました。
「Function Call」と呼ばれる機能で、APIの定義を明示的に渡すと、GPT3/4がそれを呼ぶべきと判断した時には、通常の会話とは別の出力「function_call」で呼びたい関数を指定してくれる機能です。
具体的な呼び方は、こんな感じです。response = openai.ChatCompletion.create(
model=context.model,
messages=context.messages,
functions=context.functions)
modelには、使いたいモデル("gpt-3.5-turbo-061"もしくは"gpt-4-0613")を、messagesには、プロンプトを、functionsに、APIの定義を指定します。
APIの定義は、JSONで、[
{
"name": "get_current_weather",
"description": "Get the current weather",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state"
},
"format": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "The temperature unit to use."
}
},
"required": ["location", "format"]
}
}
]
のように指定します(OpenAIが提供しているサンプルコードより)。
systemプロンプトして"Don't make assumptions about what values to plug into functions. Ask for clarification if a user request is ambiguous."とした上で、「東京の天気を教えて」と質問すると、通常の会話の "content" ではなく、"function_call" として以下のようなデータが返ってきます。{
"name": "get_current_weather",
"arguments": {
"location": "Tokyo",
"format": "celsius"
}
}
これは、GPTが、「『東京の天気を教えて』というリクエストに答えるには、関数 "get_current_weather" を呼ぶべき」と判断したことを示しており、後はアプリケーション側で、その指示に従って、APIを呼べば良いのです。
従来型の方法でも、「呼びたい関数をJSONで指定してください」とsystemプロンプトに指定すれば似たようなことが出来ましたが、JSONの返し方が一定ではないため、安定して動かすことがとても難しかったのですが、この仕組みにより、安定して関数を呼び出すことが出来るようになりました。
この記事は約
NaN 分で読めます(
NaN 文字 / 画像
NaN
枚)