跳转到内容
主站 新闻 控制台

多轮对话

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 即可。