コンテンツにスキップ
メインサイト ニュース コンソール

マルチターン会話

Chat Completions はステートレスなインターフェースです: モデルは前回のリクエストを記憶しません。マルチターン会話の原理は—— 毎回のリクエストで履歴メッセージをすべて含めることです。

基本的な使い方

messages = [
{"role": "system", "content": "你是一个简洁的中文助手。"},
{"role": "user", "content": "什么是向量数据库?"},
]
r1 = client.chat.completions.create(model="gpt-5.5", messages=messages)
messages.append({"role": "assistant", "content": r1.choices[0].message.content})
messages.append({"role": "user", "content": "它和 Elasticsearch 有什么区别?"})
r2 = client.chat.completions.create(model="gpt-5.5", messages=messages)

2回目のモデルは「それ」が何を指すのか理解できます。なぜなら完全な履歴が messages の中にあるからです。

コンテキスト管理

履歴が長いほど、入力 token が増え、費用も高くなり、モデルのコンテキスト上限を超える可能性があります。一般的な戦略は次のとおりです:

戦略方法適用
スライディングウィンドウ直近 N ラウンド + system のみを保持カスタマーサポート、雑談
要約圧縮古い履歴を低コストのモデルで要約に圧縮長時間会話アシスタント
検索拡張履歴をベクトルデータベースに入れ、必要に応じて関連断片を検索ナレッジ系アプリケーション

注意事項

  • system メッセージは常に先頭に置くことを推奨します。また、キャッシュ課金を利用して重複コストを下げましょう;
  • 履歴を切り詰めるときは「ラウンド」単位で削除し(user+assistant のペア)、途中で切らないでください;
  • モデルをまたいで切り替える(例: GPT から Claude へ)場合、履歴フォーマットを変更する必要はなく、model を直接切り替えるだけで構いません。