多轮对话的独特性:上下文依赖性、长期一致性、用户意图追踪
聊完RLHF的基础框架,咱们得把目光聚焦到一个更棘手的问题上——多轮对话。
说实话,单轮对话的RLHF已经够折腾了。但多轮对话,那完全是另一个量级的挑战。我当年刚接触这个方向时,天真地以为把单轮方案直接套上去就行。结果呢?模型聊到第三轮就开始「失忆」,第五轮直接前言不搭后语。嗯,那场面,相当尴尬。
多轮对话到底特殊在哪?我总结了三座大山:上下文依赖性、长期一致性、用户意图追踪。咱们一个一个拆。
上下文依赖性:模型不能「每句话都重新活一次」
什么叫上下文依赖性?说白了,就是当前这句话的意思,完全取决于前面说过什么。
你想想看,用户说「帮我订一张去北京的票」,模型回答「好的,请问哪天出发?」。用户接着说「下周三」。如果模型这时候忘了「去北京」这个信息,直接问「您要去哪里?」——那用户不骂人才怪。
我在项目中遇到过这样一个案例:用户和模型聊了20分钟,讨论一个复杂的技术方案。中途用户问了一句「那这个方案的缺点是什么?」。模型居然把前面讨论的方案A和方案B搞混了,回答时张冠李戴。为什么?因为模型对长上下文的注意力衰减了,越早的信息权重越低。
所以,做多轮RLHF时,奖励模型必须能感知上下文长度。你不能只评估当前这一轮的回答质量,你得看它是否与前面N轮的信息保持一致。我个人习惯在奖励模型中引入一个「上下文一致性」的子评分项,专门惩罚那些前后矛盾的回答。
长期一致性:别让模型「人格分裂」
长期一致性,比上下文依赖性更「阴险」。它要求模型在整个对话生命周期内保持立场、风格、知识体系的自洽。
举个例子。用户第一轮问:「你觉得AI会取代人类吗?」模型回答:「AI是工具,不会取代人类,但会改变工作方式。」
聊了20轮后,用户又问:「那你觉得AI最终会控制人类吗?」如果模型这时候回答:「很有可能,AI的智能会超越人类。」——这就出大问题了。
你想想看,用户会怎么想?「这模型是不是精神分裂?前面还说不会取代,现在又说会控制。」
我曾经踩过一个坑:训练了一个客服对话模型,前面几轮表现得彬彬有礼,但聊到第10轮左右,模型开始出现不耐烦的语气,甚至反问用户「你怎么还不明白?」。后来分析发现,是训练数据中包含了客服人员疲劳状态下的对话样本。从那以后,我要求训练数据必须经过严格的「一致性过滤」。
怎么做?我建议在RLHF的奖励模型中,加入一个「立场漂移检测」模块。具体来说,就是对比模型在不同轮次中对同一主题的回答,计算语义相似度。如果相似度低于某个阈值,就给予负奖励。
用户意图追踪:模型得「读懂人心」
这个最考验功力。用户意图不是一成不变的,它会在对话过程中演化、细化、甚至反转。
比如用户说:「我想买一台笔记本电脑。」
模型问:「预算多少?」
用户说:「5000左右。」
模型推荐了几款。用户又说:「其实我主要是用来做视频剪辑的。」
你看,用户的意图从「买电脑」细化到了「买适合视频剪辑的电脑」。如果模型还按之前的推荐逻辑走,推荐一些办公本,那就完全跑偏了。
更复杂的情况是意图反转。用户一开始说「我想了解Python」,聊着聊着说「算了,我觉得Java更适合我」。模型必须能捕捉到这个转向,并调整后续的回答策略。
我个人的做法是,在训练数据中标注「意图转折点」。比如在对话的某个位置,用户明确改变了话题或需求。然后让模型学习在这些转折点处「重置」或「更新」自己的对话状态。奖励模型也会对这些转折点附近的回答给予更高的关注度。
你可能会问:这些特性怎么体现在RLHF的流程里?嗯,这里要注意,传统的单轮RLHF,奖励模型只给一个标量分数。但多轮场景下,我建议奖励模型输出一个向量,分别对应上下文依赖性、长期一致性、意图追踪这三个维度的评分。然后通过加权求和得到最终奖励。
下面这张图,是我自己总结的多轮对话RLHF核心逻辑,你看一眼就明白了:
最后,我想强调一点:多轮对话的RLHF,本质上是在教模型「记住该记住的,忘记该忘记的」。上下文依赖性和长期一致性要求模型记住关键信息,而意图追踪则要求模型能识别哪些信息已经过时、需要更新。
这个平衡很难把握。我见过不少团队,为了追求长期一致性,让模型死守最初的观点,结果用户意图都变了,模型还在那「不忘初心」——这反而成了缺点。
所以,我的建议是:在奖励模型中,给「意图追踪」这个维度设置一个动态权重。当检测到用户意图发生明显变化时,提高这个维度的权重,让模型更灵活地调整策略。当对话处于平稳状态时,提高「长期一致性」的权重,让模型保持稳定。
嗯,多轮对话的水很深。但把这三大独特性吃透了,你的RLHF方案就成功了一半。