ChinaWHAPI
← 返回知识中心
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 或等效库做准确计数。