マルチターン会話
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を直接切り替えるだけで構いません。