Multi-turnConversationContextMemory
多轮对话实现:如何维护对话历史和管理上下文
AI API 的每次调用都是独立的,需要由客户端维护对话历史。本文介绍多轮对话的实现方式和上下文窗口管理。
多轮对话原理
AI API(如 /v1/chat/completions)本身不保存状态。每次调用时,客户端需要将整个对话历史(所有 user/assistant 消息)作为 messages 数组传入。
实现方式
messages = []
def chat(user_input):
messages.append({"role": "user", "content": user_input})
response = client.chat.completions.create(
model="qwen3.6-plus",
messages=messages
)
assistant_msg = response.choices[0].message.content
messages.append({"role": "assistant", "content": assistant_msg})
return assistant_msg上下文窗口管理
每个模型有上下文窗口上限(如 128K、256K),超过会报错或被截断。长对话需要压缩历史:保留最近 N 轮,或用摘要模型压缩历史消息。
压缩策略
保留最近 10-20 轮对话的核心内容;用模型对历史做摘要后替换原始消息;或直接截断超长部分(适合不太依赖历史的场景)。
Token 计数
在提交给 API 前估算总 token 数,超过上下文限制就触发压缩。建议使用 tiktoken 或等效库做准确计数。