新智元报道
编辑:LRST
【新智元导读】基于内置思维链的思考方法为解决多轮会话中存在的问题提供了研究方向。按照思考方法收集训练数据集,通过有监督学习微调大语言模型;训练一个一致性奖励模型,并将该模型用作奖励函数,以使用强化学习来微调大语言模型。结果大语言模型的推理能力和计划能力,以及执行计划的能力得到了增强。
用户已经习惯于将大模型如ChatGPT、Llama-3-chat等当作聊天对象,然而在用户和聊天助手的会话中,有的用户提示(例如一些命令或请求)不能在一轮会话中结束,需要大语言模型和用户进行多轮会话。
这种跨越多轮的会话目前仍然存在一些问题:大语言模型的回答容易出错,不能帮助用户达到目标,且随着会话轮数增加出错概率会增大。
对同一个命令或问题,大语言模型比较难以根据实际需求产生不同流程的响应,在需要大语言模型与环境交互时,目前比较流行的做法是使用函数调用或工具调用,但不够优雅和高效,而且由于上下文窗口的限制,能支持的工具调用数量有限。
这些问题的主要原因是因为大语言模型没有像人类一样的思考能力,缺乏推理能力和计划能力,缺乏执行计划的能力。
为了解决这些问题,国内学者提出了一个基于内置思维链的思考方法:在多轮会话中,对于每一个用户提示,大语言模型基于会话历史,思考上下文,行动调用,记忆和知识等要素进行思考,进行详细的推理和计划,并根据计划进行行动。大语言模型按照这种思考方法产生的思维链是内置于响应里,由特殊词元包装起来,通称内置思维链。
论文链接:https://arxiv.org/pdf/2502.13475
项目链接:https://github.com/HaunLeung/thinkandaction
论文还探讨了大语言模型通过这个思考方法来增强思考能力的方式:按照思考方法收集训练数据集,通过有监督学习微调大语言模型;训练一个一致性奖励模型,并将该模型用作奖励函数,以使用强化学习来微调大语言模型,强化大语言模型按照这种思考方法输出。
总的来说,这篇论文的贡献包括:
(1)基于内置思维链的思考方法
为了解决模型在完成行动任务时存在的诸多问题,研究人员提出了基于内置思维链的思考方法,定义了模型思考时基于的五个要素,以及思考流程;为收集训练数据集指定了方针,最终增强了模型的思考能力。
(2)一致性奖励模型
多轮会话中,模型根据用户提示和行动调用结果输出响应,如何判断模型输出响应序列的质量,成了强化训练效果的关键。通常是用人类偏好奖励模型来判断,但这准确性不高。
由于行动任务是非准确性推理问题,所以不能用Deepseek-R1的基于规则的奖励。
为了解决这个问题,文中创新性地引入一致性奖励模型,一致性奖励模型给模型输出响应序列进行一致性判断,最后发现一致性奖励模型大大增强了强化训练的效果。
(3)局部思考上下文
系统上下文通常用来存放背景资料和信息,以及工具调用。它的缺点有:系统上下文会占用上下文窗口长度,使得输出响应长度有限制;有限的上下文窗口长度使得函数或工具调用数量有限制;过长的系统上下文会使得推理速度变慢;有时候模型回答提示根本不需要任何一个已经加载在系统上下文里的函数或工具。
为了解决这些问题,文中创新使用局部思考上下文,它能够按照需求来加载背景信息和工具,不会造成上述问题,而且支持无限多工具。
(4)行动调用
关于工具使用,研究人员使用的是行动调用。和函数调用或工具调用相比,它不但语法优雅而且行动高效。
基于内置思维链的思考方法
为什么要引入思考方法
在处理行动任务时,大语言模型需要仔细地思考,进行详细的推理和计划,并根据计划进行行动。但计划是否正确?是否能完成所有的计划步骤?如何和环境交互?工具调用时发生异常如何处理?在行动任务执行过程中,用户发起新的任务时怎么办?在行动任务执行过程中,用户输入提示噪音,干扰正确的流程时怎么办?
如果处理不好这些复杂的问题,那么大语言模型的回答就会出错,需要一个明确的处理方针。
于是研究人员提出了基于内置思维链的思考方法,主要有五个思考要素,两个处理逻辑,一个计划步骤执行,一个思考流程将这五个要素,两个处理逻辑和计划步骤执行连接起来。思考方法的流程图如图所示。
思考方法流程
基于要素进行思考:在多轮会话中,对于用户的每一个输入提示,模型首先基于会话历史,全局思考上下文,内置行动调用,记忆和知识四个要素进行思考。
最后一个计划步骤匹配:如果输入提示是对应于最后一个未完成计划的最后一个计划步骤,那么模型会收集输入提示里的有用信息,并接着进行计划的当前或下一个步骤,必要时会使用行动调用和环境交互,并根据行动调用结果推理出答案;反之,模型会基于已有的四个要素思考如何回答。
思考如何回答:如果模型觉得已有的四个要素并不能回答提示,它会进一步获得和提示相关的局部思考上下文。如果和提示相关的局部思考上下文不存在,那么最终答案是"无法提供帮助"之类;如果存在,那么会进入下一步判断是否需要计划流程。如果模型觉得已有的四个要素能回答提示,那么会进入下一步判断是否需要计划流程。
是否需要计划:判断是否需要计划流程,如果回答不需要制定计划,那么进行推理;反之,进行推理和计划。
推理处理逻辑:在推理阶段,模型会基于五个要素进行严密的推理,必要时会使用行动调用和环境交互,并根据行动调用结果推理出答案。
推理和计划处理逻辑:在推理和计划阶段,模型会基于五个要素进行严密的推理和计划,制定一个包含多个步骤的计划,并开始执行计划的第一个步骤,必要时会使用行动调用和环境交互,并根据行动调用结果推理出答案。
内置思维链
除了答案外,思考方法产生的思考过程被封装在特殊词元< >和< >内,这通常称作内置思维链。这和 OpenAI GPT-o1-preview 和 Deepseek-R1 做法相似。
思考要素及优先级
思考要素包括五个要素:会话历史,全局思考上下文,内置行动调用,局部思考上下文,记忆和知识。这些思考要素的优先级如下:
模型思考时优先考虑优先级高的要素,然后才是低优先级要素。例如,全局思考上下文或局部思考上下文里的背景信息和指导规则,会优先于模型具有的记忆和知识。要注意全局思考上下文和局部思考上下文这两个要素有时候不一定存在,例如有时候全局思考上下文不存在系统上下文中,例如获取局部思考上下文时可能返回空。
行动调用
行动调用在模型和环境发生交互时使用,作用和函数调用或工具调用类似。
但行动调用比函数调用或工具调用语法上优雅且高效。
行动调用定义使用 json 结构,属性有name, description, parameters, exception.
name: 行动调用的名字,模型思考时使用这个名字进行调用。
description: 行动调用的详细描述,关于用途和使用场景。
parameters: 使用行动调用时传入的参数描述,包括不局限于单位,枚举值,是否可选等。
exception: 使用行动调用时可能发生的异常描述,以及异常处理建议。
例如,实时天气查询的行动调用定义如下:
模型在思考时,会使用行动调用。行动调用的使用格式:
模型在使用行动调用时,在生成<>符号时采样算法会停止采样,并把< >和< >符号之间的字符串交给代理Agent。Agent解析行动调用名字,解析参数和参数值,再执行和行动调用名对应的函数,并返回函数产生的结果。采样算法把返回结果连接在< >符号后面,并以< >符号结束。然后模型继续进行思考。
全局/局部思考上下文
研究人员内置了几个行动调用,目的是方便模型思考时使用,包括获取上下文、搜索互联网、打开文件、邮件发送、数学计算。
全局思考上下文由两个部分组成:思考背景和指南、行动调用定义。
思考背景:模型思考时依据的资料和信息;
思考指南:模型思考时依据的指导规则,通常用于指导如何创建计划。
行动调用定义:定义了一个行动调用列表,模型思考时可以使用这些行动调用和环境发生交互。
全局思考上下文写在系统上下文(system context)里。全局思考上下文的作用和传统意义上的系统上下文类似,指导模型如何做,以及用什么来做。众所周知,ChatGPT等聊天模型通常把函数调用和工具调用放在系统上下文里。系统上下文的缺点有:会导致占用上下文窗口,限制了输出长度;同时过长的系统上下文会导致推理速度减慢;有时有的输入提示根本不需要使用任何工具调用。
为了解决这些痛点,研究人员开发出了局部思考上下文。
局部思考上下文由两个部分组成:思考背景和指南、行动调用定义,其解释和全局思考上下文一样。
对于每一个用户输入提示,模型首先基于会话历史,全局思考上下文,内置行动调,记忆和知识用四个要素进行思考。如果模型觉得已有的四个要素并不能帮助回答提示,会进一步获得和提示相关的局部思考上下文。模型获得局部思考上下文是通过一个内置的行动调用。
在实际应用中,研究人员建议首选使用局部思考上下文,不建议使用全局思考上下文;支持全局思考上下文只是为了和传统的系统上下文的作用兼容。
全局思考上下文和局部思考上下文的例子如图所示。
训练方法
首先,基于这个思考方法收集一个行动任务数据集;
其次,使用这个行动任务数据集有监督微调基础语言模型,获得一个初始策略;
然后,从这个初始策略开始,进行强化训练过程,该过程由 3 个步骤组成,可以迭代重复。
第 1 步:从现有策略中收集样本。对于每个行动任务数据集样本,从两个来源采样响应,包括当前策略、初始策略;将行动任务数据集样本和采样样本组成一对,并由人工评估员来评定一致性,获得一致性标签构造一致性数据集。
第 2 步:训练一致性奖励模型。使用一致性数据集来训练奖励模型,来预测一致性的对数几率。
第 3 步:根据一致性奖励模型优化策略。将一致性奖励模型的输出视为使用强化学习优化的奖励。
行动任务数据集准备
基于思考方法,研究人员收集了一个包含千份样本的行动任务数据集,采用人工标注的收集方式,基于高性能语言模型的提示工程。
样本格式:x1, y1', x2, y2', ...., xn, yn'. 如上图所示。xi是用户提示或行动调用的结果,yi'是标签回答。每个样本还包含参考回答,即除了yi',还要有一个yi'_ref,这两个响应在内容和逻辑上是一致性的(见句子对的一致性)。
样本分布:构建样本时要充分考虑各种分布,这些分布不限于以下情况。
行动调用异常: 行动调用时,可能会产生并返回各种异常,模型需要处理好这些异常,尽量保证计划继续进行。
用户主动中断任务: 在模型执行计划步骤中,用户可能会主动中断计划。
用户提示噪音: 在模型执行计划步骤中,用户输入干扰流程的提示,模型需要思考并应对。
任务嵌套: 在模型执行计划步骤中,用户输入提示进行新的任务,例如行动任务和其他任务。
应用情景:外卖,购物,麦当劳点餐,设备控制,客服...
使用这个行动任务数据集有监督微调基础语言模型,获得一个初始策略。
强化微调
从现有策略中收集样本。
收集样本:对于每个行动任务数据集样本,从两个来源采样响应,包括当前策略、初始策略。对于行动任务数据集里的一个样本:(x1, y1', x2, y2', ...., xn, yn')~D, xi是用户提示或行动调用的结果,yi'是标签回答。使用 (x1, x2, ..., xn) 进行策略采样,得到策略输出:(y1, y2, ...., yn).
一致性评定:将行动任务数据集样本里的标签回答和策略的采样输出组成一对:[(y1',y1), (y2',y2), ...., (yn',yn)]。并由人工评估员来评定一致性,即所有句子对是否都一致,获得一致性标签 t 等于0或1。最后获得了一个一致性数据集D':[(y1',y1,t1), (y2',y2,t2), ...., (yn',yn,tn)] ~ D'。
句子对的一致性:如果两个句子描述的内容和逻辑基本一样,就可以认为是一致的。但要需注意对推理和计划产生的计划步骤,计划的步骤不能打乱,如果顺序不一样,就说两个句子是不一致的。
例如下面例子(一致consistent):
例如下面例子(不一致inconsistent):
训练一个一致性奖励模型
从已经获得的一致性数据集D',训练一个奖励模型来预测一致性的对数几率;出于性能考虑,基于高性能小型语言模型(例如Llama-3-8B)训练一个一致性奖励模型。
具体做法:去掉transformer解码器的反嵌入层,增加一个输出维度为2的预测头,一致性的对数概率由预测头输出给出。
对于一致性数据集D'的一个样本:[(y1',y1,t1), (y2',y2,t2), ...., (yn',yn,tn)] ~ D',把样本里的 (yi',yi) 对封装到一个提示 xi 里,然后训练奖励模型判断一致性。奖励模型损失写成:
其中rθ(x)是具有参数θ的奖励模型的输出。cross_entropy_error是交叉熵损失函数。x是由句子对构造而成的提示,t是一致性标签。
一致性提示模板:假设一致性数据集样本有一个句子对,提示x构造如下:
其中粗体为提示模板填入的句子对。
根据一致性奖励模型优化策略
使用上面训练的一致性奖励模型来训练一个策略,强化策略按照上述思考方法输出,将策略初始化为在行动任务数据集上微调过的模型。
对于行动任务数据集里的每个训练样本:(x1, y1', x2, y2', ..., xn, yn') ~ D,xi是用户提示或行动调用的结果,yi'是标签回答;使用 (x1, x2, ..., xn) 进行策略 采样,得到一组输出 (y1, y2, ...., yn):
将下述奖励函数的输出视为策略输出的奖励,来优化策略。
奖励函数
奖励函数主要由两种类型的奖励组成:格式奖励和一致性奖励。
格式奖励:判断策略输出 (y1, y2, ...., yn) 里的'< >'和'< >'标签,以及'< >'和'< >'标签是否符合规则。
一致性奖励:由一致性奖励模型给出。将 [(y1,y1'), (y2,y2'), ..., (yn,yn')] 封装成提示[x1, x2, …, xn],再批量输入一致性奖励模型来判断一致性,获得结果 [r1, r2, …, rn]。最终的一致性奖励是。
工程实践:实际中,为了便于在软件工程上实现一致性奖励核心思想,通过逐步强化训练来达目的。
即在行动任务数据集所有训练样本上先进行第一轮y1的一致性强化训练,即使用x1来进行策略采样得到y1,然后根据 (y1,y1’) 的一致性来强化策略,反复训练直到策略输出y1和y1’一致后,才接着进行第二轮y2的一致性强化训练,即以(x1,y1,x2)来采样y2。
以此类推,yn也进行了一致性强化训练,最后策略输出(y1, y2, ...., yn)全部和训练样本一致了。
结果对比
模型的思考能力得到了增强
通过和基线模型对比,研究人员发现模型的推理能力和计划能力,以及执行计划的能力得到了增强。
使用行动任务测试数据集,给与基线模型相同的全局思考上下文(系统上下文)、相同的用户提示、相同的行动调用结果(注意基线模型的工具调用的格式和行动调用不一样),然后通过人工判断和一致性奖励模型来判断模型对任务的完成率,结果发现基线模型对任务的完成率没有文中提出的模型高。
行动调用比工具调用语法优雅且高效
行动调用在语法上比工具调用优雅。工具调用需要增加两个新的消息类型,而行动调用不需要增加新的消息类型。行动调用只是内置于思维链里的一个消息。而且行动调用的名字使用的是人类生活中出现的语句,广泛分布在训练数据中。
行动调用在效率上也比工具调用高:使用行动任务测试数据集,在基线模型上使用工具调用,在该模型上使用行动调用,进行有监督训练微调;工具调用和行动调用的功能相同,可以观察到在相同的训练数据量下,行动调用的效果更好。
局限和展望
局限性
该工作的一个限制是收集思考上下文比较困难,难以覆盖多种情景,会导致模型的泛化能力不高。从策略采集输出,通过人工标签员评定一致性也费时费力,导致一致性数据集规模较小,从而导致一致性奖励模型泛化能力不足。要思考如何提高强化算法,进行更有效的策略采样和强化训练。
未来方向
未来的工作,研究人员将探索在各种任务上用思考方法进行大规模强化学习。把行动任务,推理任务,和其他任务融入思考方法流程,并进行大规模强化学习。同时思考如何能收集更多有意义的思考上下文,并覆盖更大的应用范围。
参考资料:
https://arxiv.org/pdf/2502.13475