一个"失忆"的AI客服
用户:“我想退掉上周买的鞋。” AI:“好的,请提供您的订单号。” 用户:“ORD-2026-12345。” AI:“已查到您的订单。您想退掉的是哪件商品?” 用户:"…我刚才说了,是鞋。" AI:“抱歉,请问您想退的是什么商品?”
这是典型的多轮对话"失忆"——AI在第三轮就忘了第一轮的信息。 这不是模型能力问题,而是Prompt设计没有考虑对话信息如何在多轮之间传递。
多轮对话的四个核心挑战
挑战一:信息衰减。 在长对话中,早期的信息会随着对话的推进而"衰减"——模型在生成第20轮回复时,对第1轮的信息"关注度"大幅降低。这是Transformer架构的注意力机制决定的。
挑战二:话题漂移。 用户在对话中可能自然地切换话题。AI需要在"跟随用户的新话题"和"记住原始任务"之间找到平衡。如果AI太"坚持"原任务,就显得死板;如果AI太"灵活",就可能完全忘记原任务。
挑战三:上下文污染。 多轮对话中,错误的中间结果会"污染"后续的对话。如果AI在第三轮犯了一个错误,这个错误可能被后续的对话不断放大,最终导致整个对话崩溃。
挑战四:对话长度指数增长。 每增加一轮对话,上下文长度就增加一轮。当对话超过20轮时,上下文长度可能超过模型的"有效上下文窗口",导致模型开始"遗忘"或"编造"。
多轮对话Prompt设计的五个原则
原则一:在每一轮中注入"对话摘要"。 不要只发送原始对话历史。在每一轮对话前,AI应该在内部生成一个"对话摘要"——当前任务是什么?已经完成了什么?还剩什么?用户的关键信息是什么?这个摘要作为"记忆锚点",帮助AI在长对话中保持方向感。
原则二:区分"长期记忆"和"短期记忆"。 长期记忆(用户姓名、订单号、偏好等)应该被结构化存储并在每轮对话开始时注入。短期记忆(当前讨论的细节、最近的对话转折)可以通过对话历史自然传递。不要把所有的信息都靠"模型自己记住"。
原则三:设置"检查点"。 在关键节点(如"确认订单信息"“确认退款金额”)设置检查点,AI应该主动总结当前状态并要求用户确认。这既能防止信息遗漏,也能在出错时提供"回滚点"。
原则四:设计"话题切换"协议。 当用户切换话题时,AI应该:1)确认理解新话题;2)保存旧话题的进度;3)告知用户随时可以回到旧话题。例如:“好的,我们先处理退款问题。关于您之前提到的尺码问题,我稍后也会帮您处理。”
原则五:主动清理上下文。 当对话过长时(超过15轮),AI应该主动总结并"压缩"对话历史。例如:“让我总结一下目前的情况:[摘要]。我们继续处理退款,好吗?“这既减少了上下文长度,也帮助用户保持对对话的掌控感。
技术实现:对话状态管理
在代码层面,多轮对话Prompt需要配合一个"对话状态管理器”:
conversation_state = {
"task": "退款处理",
"user_info": {"name": "张三", "order_id": "ORD-2026-12345"},
"progress": "已确认订单,待确认退款原因",
"completed_steps": ["身份验证", "订单查询"],
"pending_steps": ["确认退款原因", "确认退款金额", "发起退款"],
"checkpoint": "准备确认退款原因"
}
每一轮对话开始时,将对话状态编码后注入到Prompt中,确保AI始终知道"我在做什么"“做完了什么"“接下来要做什么”。
多轮对话Prompt设计的核心原则:不要依赖模型"记住”——帮模型"记录”。 模型不是数据库,它是推理引擎。把"记忆"的责任从模型转移到系统架构上,你会发现多轮对话的质量提升一个数量级。