はじめに 2023/6/14 OpenAIから何の前触れもなくメールが届いてました。
ななめ読みした感じでは、なにやらgpt-3.5-turboモデルでけっこうなアップデートがあった様子です。
「function calling」といったワードもあるので、「もしかしてすごいアップデートなのか??」と期待しました。
公式のサイトの情報だと翻訳してもわかりにくかったので、以下コメント付きでまとめてみました。
本日は、いくつかのエキサイティングなアップデート をお知らせします。
https://openai.com/blog/function-calling-and-other-api-updates
解説 原文
We released gpt-3.5-turbo and gpt-4 earlier this year, and in only a short few months, have seen incredible applications built by developers on top of these models. Today, we’re following up with some exciting updates: new function calling capability in the Chat Completions API updated and more steerable versions of gpt-4 and gpt-3.5-turbo new 16k context version of gpt-3.5-turbo (vs the standard 4k version) 75% cost reduction on our state-of-the-art embeddings model 25% cost reduction on input tokens for gpt-3.5-turbo announcing the deprecation timeline for the gpt-3.5-turbo-0301 and gpt-4-0314 models All of these models come with the same data privacy and security guarantees we introduced on March 1 — customers own all outputs generated from their requests and their API data will not be used for training.
訳
私たちはgpt-3.5-turbo、gpt-4を今年初めにリリースしわずか数か月の間に、開発者によってこれらのモデルに基づいて素晴らしいアプリケーションが構築されるのを目にしました。Customer stories 本日は、いくつかのエキサイティングなアップデートをお知らせします。
Chat Completions API の新しい関数呼び出し機能
gpt-4とgpt-3.5-turboのより操作しやすい更新されたバージョン
gpt-3.5-turboの新しい 16K コンテキスト バージョン
(標準の 4K バージョンと比較)
最先端のembeddingsモデルでコストを 75% 削減
gpt-3.5-turboの入力トークンのコストを 25% 削減
gpt-3.5-turbo-0301とgpt-4-0314のモデルの非推奨タイムラインを発表
これらすべてのモデルには、3 月 1 日に導入したのと同じデータ プライバシーとセキュリティ保証が付いています。つまり、顧客はリクエストから生成されたすべての出力を所有しており、API データはトレーニングには使用されません。
コメント 「より操作しやすい更新されたバージョン」というのは何を意味しているのかわかりませんでした。 gpt-3.5-turboの最大トークン数が4Kから16Kと4倍になったのはメリットが大きいですね。 4Kだと途中で回答が切れていたものも4倍あればそこそこ余裕がでてきました。
gpt-4だとレスポンスが遅いので、gpt-4まで精度を求めてない場合でトークン数をもう少し増やしたいなーというケースで最適なモデルかもしれません。
embeddingsモデルとgpt-3.5-turboで価格が下がったのもうれしいアップデートです。
Function calling(関数呼び出し機能) 原文
Developers can now describe functions to gpt-4-0613 and gpt-3.5-turbo-0613, and have the model intelligently choose to output a JSON object containing arguments to call those functions. This is a new way to more reliably connect GPT's capabilities with external tools and APIs. These models have been fine-tuned to both detect when a function needs to be called (depending on the user’s input) and to respond with JSON that adheres to the function signature. Function calling allows developers to more reliably get structured data back from the model. For example, developers can: Create chatbots that answer questions by calling external tools (e.g., like ChatGPT Plugins) Convert queries such as “Email Anya to see if she wants to get coffee next Friday” to a function call like send_email(to: string, body: string), or “What’s the weather like in Boston?” to get_current_weather(location: string, unit: 'celsius' | 'fahrenheit'). Convert natural language into API calls or database queries Convert “Who are my top ten customers this month?” to an internal API call such as get_customers_by_revenue(start_date: string, end_date: string, limit: int), or “How many orders did Acme, Inc. place last month?” to a SQL query using sql_query(query: string). Extract structured data from text Define a function called extract_people_data(people: [{name: string, birthday: string, location: string}]), to extract all people mentioned in a Wikipedia article. These use cases are enabled by new API parameters in our /v1/chat/completions endpoint, functions and function_call, that allow developers to describe functions to the model via JSON Schema, and optionally ask it to call a specific function. Get started with our developer documentation and add evals if you find cases where function calling could be improved
訳
開発者は、gpt-4-0613およびgpt-3.5-turbo-0613に関数を記述し、それらの関数を呼び出すための引数を含む JSON オブジェクトの出力をモデルにインテリジェントに選択させることができるようになりました。これは、GPT の機能を外部ツールや API とより確実に接続するための新しい方法です。 これらのモデルは、関数を呼び出す必要があるとき (ユーザーの入力に応じて) を検出し、関数の署名に準拠した JSON で応答するように微調整されています。関数呼び出しにより、開発者はモデルから構造化データをより確実に取得できるようになります。たとえば、開発者は次のことができます。
「アーニャに来週金曜日にコーヒーを飲みたいかどうかをメールで問い合わせる」などのクエリをsend_email(to: string, body: string)に、もしくは「ボストンの天気はどうですか?」get_current_weather(location: string, unit: 'celsius' | 'fahrenheit')などの関数呼び出しに変換します。
「今月のトップ 10 の顧客は誰ですか?」をget_customers_by_revenue(start_date: string, end_date: string, limit: int)のような内部API呼び出しに変換します。または「Acme, Inc. は先月何件注文しましたか?」について、sql_query(query: string)を使用して SQL クエリに変換します。
extract_people_data(people: [{name: string, birthday: string, location: string}])という関数を定義して、Wikipedia の記事で言及されているすべての人物を抽出します。 これらのユースケースは、/v1/chat/completionsエンドポイントとfunctions、function_callの新しい API パラメーターによって有効になり開発者は JSON スキーマを介してモデルに関数を記述し、オプションで特定の関数を呼び出すように要求できます。開発者向けドキュメントを読み始めて、関数呼び出しを改善できるケースを見つけた場合はeval を追加してください。
開発者向けドキュメント
eval
コメント
一見、Function Calling(関数呼び出し機能)は、すごそうなアップデートでした。 LangChainといったフレームワークと比較して、まだメリットが理解できてないですが、標準機能でこういった機能が追加されるのはいいですね。
テキストデータからJSONのような構造化された状態でレスポンスを得ることもできるようです。
このあたりもguidanceのようなフレームワークでも実現できますが、標準機能で使えるようになれば、その都度いろんなフレームワークを試す手間も減ってくるのかもしれません。
関数呼び出しの例 ボストンは今どんな天気ですか?
Step1 関数とユーザーの入力を使用してモデルを呼び出す コード
curl <https:
"model" : "gpt-3.5-turbo-0613" ,
"messages" : [
{"role" : "user" , "content" : "What is the weather like in Boston?" }
],
"functions" : [
{
"name" : "get_current_weather" ,
"description" : "Get the current weather in a given location" ,
"parameters" : {
"type" : "object" ,
"properties" : {
"location" : {
"type" : "string" ,
"description" : "The city and state, e.g. San Francisco, CA"
},
"unit" : {
"type" : "string" ,
"enum" : ["celsius" , "fahrenheit" ]
}
},
"required" : ["location" ]
}
}
]
}'
実行結果
{
"id" : "chatcmpl-7UE350TM3WS6EOMUdLSmLO9l5Qnl4" ,
"object" : "chat.completion" ,
"created" : 1687438199 ,
"model" : "gpt-3.5-turbo-0613" ,
"choices" : [
{
"index" : 0 ,
"message" : {
"role" : "assistant" ,
"content" : null ,
"function_call" : {
"name" : "get_current_weather" ,
"arguments" : "{\\n \\" location\\": \\" Boston, MA\\"\\n}"
}
},
"finish_reason" : "function_call"
}
],
"usage" : {
"prompt_tokens" : 82 ,
"completion_tokens" : 18 ,
"total_tokens" : 100
}
}
Step2 応答をモデルに送り返して要約します コード
curl <https:
"model" : "gpt-3.5-turbo-0613" ,
"messages" : [
{"role" : "user" , "content" : "What is the weather like in Boston?" },
{"role" : "assistant" , "content" : null, "function_call" : {"name" : "get_current_weather" , "arguments" : "{ \\" location\\": \\" Boston, MA\\"}" }},
{"role" : "function" , "name" : "get_current_weather" , "content" : "{\\" temperature\\": " 22 ", \\" unit\\": \\" celsius\\", \\" description\\": \\" Sunny\\"}" }
],
"functions" : [
{
"name" : "get_current_weather" ,
"description" : "Get the current weather in a given location" ,
"parameters" : {
"type" : "object" ,
"properties" : {
"location" : {
"type" : "string" ,
"description" : "The city and state, e.g. San Francisco, CA"
},
"unit" : {
"type" : "string" ,
"enum" : ["celsius" , "fahrenheit" ]
}
},
"required" : ["location" ]
}
}
]
}'
実行結果
{
"id" : "chatcmpl-123" ,
...
"choices" : [{
"index" : 0 ,
"message" : {
"role" : "assistant" ,
"content" : "The weather in Boston is currently sunny with a temperature of 22 degrees Celsius." ,
},
"finish_reason" : "stop"
}]
}
ChatGPT プラグインのアルファ リリース以来、私たちはツールと言語モデルを安全に連携させる方法について多くのことを学びました。しかし、まだ未解決の研究課題が残っています。たとえば、概念実証エクスプロイトは、ツールの出力からの信頼できないデータがどのようにモデルに意図しないアクションを実行するよう指示するかを示しています。当社はこれらおよびその他のリスクを軽減するために取り組んでいます。開発者は、信頼できるツールからの情報のみを使用し、電子メールの送信、オンライン投稿、購入など、現実世界に影響を与えるアクションを実行する前にユーザー確認手順を組み込むことで、アプリケーションを保護できます。
コメント
関数呼び出し例がありましたが、LangChainでもAgent機能などで実現できているようなことなので、じっくり見てもいまいちメリットがよくわかりませんでした。
もう少し様子を見てから使ってみようと思います。
新モデル GPT-4 gpt-4-0613には、関数呼び出しを備えた更新および改良されたモデルが含まれています。 gpt-4-32k-0613には、 gpt-4-0613と同じ改善が加えられ、さらに大きなテキストをよりよく理解できるようにコンテキストの長さが延長されました。 これらのアップデートにより、このモデルで待機リストを完全に削除することを目的として、今後数週間にわたって待機リストからさらに多くの人々を GPT-4 の試用に招待する予定です。辛抱強く待ってくださった皆様に感謝します。皆さんが GPT-4 で何を構築するかを見るのを楽しみにしています。GPT-4 API waitlist
GPT-3.5Turbo gpt-3.5-turbo-0613はGPT-4 と同じ関数呼び出しと、システム メッセージを介したより信頼性の高いステアビリティが含まれており、開発者がモデルの応答をより効果的にガイドできるようにする 2 つの機能です。 gpt-3.5-turbo-16kは、gpt-3.5-turboの2 倍の価格で4 倍のコンテキスト長を提供します: 1K 入力トークンあたり 0.003 ドル、1K 出力トークンあたり 0.004 ドル。16k コンテキストは、モデルが 1 回のリクエストで最大 20 ページのテキストをサポートできることを意味します。
モデルの廃止 本日、 3 月に発表した gpt-3.5-turboとgpt-4の初期バージョンのアップグレードと非推奨のプロセスを開始します。安定したモデル名 ( gpt-3.5-turbo、gpt-4、およびgpt-4-32k) を使用するアプリケーションは、6 月 27 日に上記の新しいモデルに自動的にアップグレードされます。バージョン間のモデルのパフォーマンスを比較するために、Evals ライブラリはパブリック eval とプライベート eval をサポートし、モデルの変更がユースケースにどのような影響を与えるかを示します。
GitHub - openai/evals: Evals is a framework for evaluating LLMs and LLM systems, and an open-source registry of benchmarks.
コメント これまで「gpt-3.5-turbo」、「gpt-4」、「gpt-4-32k」という名前のモデル名を指定して利用していた人は、6/27に自動的にアップグレードされます。 アップグレードして問題ない人は特に気にする必要はないようです。
移行にさらに時間が必要な開発者は、API リクエストの 'model' パラメータにgpt-3.5-turbo-0301、gpt-4-0314、またはを指定することで、古いモデルを引き続き使用できます。gpt-4-32k-0314これらの古いモデルは 9 月 13 日までアクセスでき、それ以降はこれらのモデル名を指定したリクエストは失敗します。モデルの非推奨に関する最新情報は、モデルの非推奨ページから入手できます。これは、これらのモデルに対する最初のアップデートです。そのため、スムーズな移行を実現するために、開発者のフィードバックをお待ちしております。
Deprecations - OpenAI API
OpenAI Developer Forum
コメント 従来のモデルのバージョンを継続して使いたい人は、「gpt-3.5-turbo-0301」、「gpt-4-0314」、「gpt-4-32k-0314」という数字付きのモデル名を利用すれば、アップグレードの影響なく利用できます。
といっても、あえて従来のモデル使いたいというケースはほとんどないのではないかと思います。
低価格設定(Lower pricing) 私たちは引き続きシステムの効率化を進め、その節約分を開発者に還元し、今日から有効とさせていただきます。
Embeddings text-embedding-ada-002は最も人気のある埋め込みモデルです。現在、コストを 75% 削減し、1,000 トークンあたり 0.0001 ドルにしています。
GPT-3.5 Turbo gpt-3.5-turboは最も人気のあるチャット モデルであり、何百万ものユーザーの ChatGPT を強化します。本日、gpt-3.5-turboの入力トークンのコストを 25% 削減します。開発者は現在、1K 入力トークンあたりわずか 0.0015 ドル、1K 出力トークンあたり 0.002 ドルでこのモデルを使用できます。これは 1 ドルあたり約 700 ページに相当します。 gpt-3.5-turbo-16k価格は 1,000 個の入力トークンあたり 0.003 ドル、1,000 個の出力トークンあたり 0.004 ドルとなります。 開発者からのフィードバックはプラットフォームの進化の基礎であり、私たちは寄せられた提案に基づいて改善を続けていきます。私たちは、開発者がこれらの最新モデルと新機能をアプリケーションでどのように使用するかを見るのを楽しみにしています。
コメント EmbeddingsのAPIが75%OFFになりました! 大量のドキュメントをEmbeddingsしていると、あっというまに金額が跳ね上がっていたので、これはうれしいですね。
まとめ 今回のアップデートでは、「Function Calling」が一番インパクトありそうでしたが、あまりメリットまではわかりませんでした。
LangChainのアップデートが速すぎるので、LangChainのほうが「すごいなー」という印象です。
単純に「Fuction Calling」の使い方がわかってないだけかもしれませんが、今のところLangChainのほうをウォッチしていくほうがメリットありそうでしょうか。
個人的にはEmbeddingsの価格が安くなったのとgpt-3.5-turboで16kが使えるようになったのが一番の「エキサイティングなアップデート」でした。