多轮对话
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)第二轮模型能理解”它”指什么,因为完整历史都在 messages 里。
上下文管理
历史越长,输入 token 越多、费用越高,且可能超出模型上下文上限。常用策略:
| 策略 | 做法 | 适用 |
|---|---|---|
| 滑动窗口 | 只保留最近 N 轮 + system | 客服、闲聊 |
| 摘要压缩 | 久远历史用低价模型压成摘要 | 长会话助手 |
| 检索增强 | 历史入向量库,按需检索相关片段 | 知识型应用 |
注意事项
system消息建议始终保留在第一条,并利用缓存计费降低重复成本;- 截断历史时以”轮”为单位删(user+assistant 成对),不要拦腰截断;
- 跨模型切换(如 GPT 换 Claude)时历史格式不用改,直接换
model即可。