OpenAI: Chat Completions と Completions どっちを使えば良いの?

              ·

OpenAI API を使ったアプリケーションを開発するにあたって、Chat Completions API と Completions API をどうやって使い分けるかを調査した際のメモです。

結論としては、OpenAI社としては Completions API をレガシーな機能という扱いをしているため、特別な理由がない限りは Chat Completions API を使いましょう。

Chat Completions と Completions の違い

Completions API は 単一 のプロンプト文字列を指定してリクエストを構成する一方で、 Chat Completions API は、ユーザとアシスタントの間のチャットをシミュレートするために、 複数のメッセージを含むリクエストを構成することが違いとしてあります。

Completions API の実行例(python):

import openai

response = openai.Completion.create(
  model="text-davinci-003",
  prompt="Write a tagline for an ice cream shop."
)

Chat Completions API の実行例(python):

import openai

openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Who won the world series in 2020?"},
        {"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
        {"role": "user", "content": "Where was it played?"}
    ]
)

このように、メッセージフォーマットの違うそれぞれのエンドポイントですが、Chat Completions のフォーマットは、 1つのユーザーメッセージを使ってリクエストを構成することで、Completions フォーマットと同様にすることができます。

例えば、Completions で英語からフランス語に翻訳する以下のようなプロンプトを考えます:

import openai

response = openai.Completion.create(
  model="text-davinci-003",
  prompt='Translate the following English text to French: "{text}"'
)

これと同様のことを Chat Completions で行うには、以下のように 単一のユーザーメッセージを含むリクエストを構成します:

import openai

openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
        {"role": "user", "content": 'Translate the following English text to French: "{text}"'},
    ]
)

逆に、Completions API は、以下のようなメッセージを構成することで、 チャットをシミュレートすることができます:

  You are a helpful assistant.
  User: Who won the world series in 2020?
  Assistant: The Los Angeles Dodgers won the World Series in 2020.
  User: Where was it played?'
  Assistant:{text}

利用可能な GPT モデルの違い

このように、お互いを代替可能な Chat Completions APICompletions API ですが、 それぞれで利用可能な GPT モデル には違いがあります。参考として、2023-08-09 時点で Playground 上で利用可能な モデルはそれぞれ以下の通りでした:

Chat Completions API:

Completions API #legacy:

Chat Completions API を選択すると、OpenAI社の提供する最も能力の高いモデル(gpt-4)と、 最もコスパの高いモデル(gpt-3.5-turbo)を指定することができる一方で、Completions API では、 text-davinci-003 までしか選択することができません。

なお、gpt-3.5-turbotext-davinci-003 と同様の機能レベルである一方で、 トークン単価は 10% と安価になっており、コスト面でも有利に設定されています。 (公式ドキュメント Which model should I use? でも、gpt-4gpt-3.5-turbo の いずれかを選択することが推奨されています。)

Completions API は Legacy 扱い

そもそも、Completions API は現在、公式ドキュメントにおいて 今後のアップデート の対象外として宣言されています。 このことからも、今後は Chat Completions API を使うようにしてゆくのがよさそうです。

Completions API ドキュメントの一部抜粋

Completions API [Legacy]

The completions API endpoint received its final update in July 2023 …
completions API エンドポントは、2023年7月に最後のアップデートが適用されました

参考

おわり

comments powered by Disqus