※この記事は、個人技術ブログ CodeArchPedia.com の技術メモ(要約)です。
OpenAI APIを触っていると、「This is a chat model and not supported in the v1/completions endpoint.」というエラーに遭遇することがある。特にプロジェクトの引き継ぎや、古いサンプルコードを流用したときによくハマるポイントだ。
何が起きたか(課題)
このエラーは、現在主流のチャットモデル(gpt-3.5-turboやgpt-4)を、古い形式のCompletions APIエンドポイント(/v1/completions)経由で呼び出そうとしたときに発生する。
-
原因: Chat Modelを使用しているのに、レガシーなエンドポイント(
/v1/completions)を指定している、または入力形式がprompt文字列になっている。 - 症状: APIリクエストが失敗し、上記のエラーメッセージが返ってくる。
- リスク: 最新モデルの恩恵を受けられず、古い実装に依存したままになり、将来的なメンテナンスコストが増大する。
どう解決したか(概要)
解決の鍵は、OpenAI Python SDKのv1.0.0以降で推奨されている最新のChat Completions APIを使用することだ。
Chat Modelsを利用する場合、エンドポイントは/v1/chat/completionsが正しく、リクエストボディの入力形式も単なるprompt文字列ではなく、会話の履歴を示すmessagesリスト形式にする必要がある。
推奨される実装では、from openai import OpenAIでクライアントを初期化し、client.chat.completions.createメソッドを呼び出す。
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model="gpt-3.5-turbo", # Chat Modelを指定
messages=[{
"role": "user",
"content": "..."
}]
)
Chat Completions APIとレガシーなCompletions APIのデータ構造の違いを理解することが重要だ。Chat Completions APIは、システム、ユーザー、アシスタントといった役割(role)を持つメッセージの履歴を渡す必要がある。
効果(Before/After)
このエラーが解消されたことで、プロジェクトは最新のOpenAIの仕様に準拠した。以前はレガシーなエンドポイント互換性のためにコードが複雑になっていたが、最新のクライアントベースの実装に移行したことで、コードの意図が明確になり、バグの温床を一つ減らせた。
| 項目 | 以前(エラー発生時) | 変更後(解決策適用後) |
|---|---|---|
| エンドポイント |
/v1/completions(誤) |
/v1/chat/completions(正) |
| 入力形式 |
prompt 文字列 |
messages リスト |
| 安定性 | 低(誤設定のリスク) | 高(最新仕様準拠) |
🚀 詳細な設定とコードはこちら
具体的な非推奨パターン(旧SDKでの呼び出し方)や、デバッグのための詳細なチェックリスト、各APIの比較表など、完全なコードスニペットや詳細な確認事項は元のブログで公開しています。