公司动态
非对称行动者-评论家框架:如何训练大语言模型智能体进行多轮策略对话
1. 项目概述当大语言模型学会“多轮对话”与“自我博弈”最近在折腾LLM智能体Agent时我发现一个挺有意思的瓶颈很多智能体在单轮任务上表现惊艳比如写个代码、总结个文档但一旦任务需要多轮、复杂的对话交互表现就直线下降。智能体要么忘了之前的对话历史要么在长序列决策中迷失方向做出的动作前后矛盾。这就像让一个记忆力超群的围棋新手去下整盘棋他可能记得住每个局部的最佳定式却缺乏统筹全局、步步为营的策略能力。这正是“Asymmetric Actor-Critic for Multi-turn LLM Agents”这个研究方向要啃的硬骨头。它本质上是一种训练框架旨在赋予LLM智能体真正的“多轮对话”和“策略性思考”能力。这里的“Asymmetric Actor-Critic”非对称行动者-评论家借鉴了深度强化学习RL中的经典架构但针对LLM的特性做了大刀阔斧的改造。核心思想是让智能体Actor学会在复杂、多轮的环境中根据历史对话和当前状态选择最优的“下一步动作”如下一个API调用、一段特定格式的回复、一次工具使用同时由一个独立的“评论家”Critic来评估这个动作的长期价值而非即时奖励。为什么这很重要因为现实世界的任务无论是复杂的客服对话、分步骤的代码调试还是需要调用多个工具完成的数据分析都不是一锤子买卖。它们是由一系列相互关联的决策点构成的。一个强大的多轮LLM智能体应该能像经验丰富的项目经理一样记住目标、评估进度、调整策略并最终稳健地完成任务。这个框架就是试图为LLM注入这种“项目级”的决策智慧。2. 核心架构拆解非对称设计背后的精妙考量要理解这个框架我们得先拆开“Asymmetric Actor-Critic”这个复合词。在经典强化学习中Actor-Critic方法通常包含两个神经网络Actor负责根据状态输出动作策略Critic负责评估状态或状态-动作对的价值。它们共享特征提取层或者干脆就是同一个网络的两个头Two-head。但在LLM Agent的场景下这种“对称”或“共享”设计遇到了巨大挑战。2.1 为什么必须是“非对称”LLM本身是一个极其庞大且复杂的自回归语言模型。让它既当“演员”生成具体动作又当“评论家”评估价值相当于要求同一个大脑同时进行创造性输出和严格的自我批判。这会导致几个严重问题目标冲突与训练不稳定生成任务Actor追求的是生成符合上下文和指令的高质量文本这是一个基于最大似然估计的优化目标。而价值评估任务Critic追求的是准确预测长期回报这是一个回归或分类问题。两个目标反向传播的梯度方向可能截然不同同时训练极易导致模型“精神分裂”哪个任务都学不好。表征能力不匹配生成下一个词元Token所需的语义、语法表征与评估整个对话序列未来价值所需的抽象、规划表征虽然有关联但侧重点不同。共享底层参数会限制模型为特定任务学习最优表征的能力。效率与泛化问题在每一轮交互中我们都需要用Critic来评估多个潜在动作的价值以指导Actor或进行策略优化。如果Critic和Actor是同一个模型这意味着需要为每个候选动作重新做一次前向传播计算开销巨大。独立的、更轻量化的Critic可以高效地批量评估动作。因此“非对称”的核心在于使用两个独立且结构可能不同的模型来分别扮演Actor和Critic。通常Actor是一个功能完整的、用于生成动作如调用工具、回复特定内容的LLM而Critic则可以是一个参数更少、结构更简单的模型例如一个仅由几层Transformer组成的价值网络或一个经过微调的较小LLM它只负责吃进“状态-动作”对吐出一个标量价值分数。2.2 多轮交互的状态与动作定义在多轮LLM Agent的设定中状态State和动作Action需要被精确定义。状态S_t在时刻t状态不仅仅是当前的用户查询。它是一个丰富的上下文通常包括对话历史H_t从任务开始到当前轮次的所有用户输入和智能体回复。环境观测O_t智能体通过工具如代码执行器、搜索引擎、数据库查询执行动作后返回的结果。任务目标G初始的用户指令或需要完成的终极目标。内部记忆M_t智能体可能维护的、对关键信息的摘要或提炼。 实践中S_t 通常就是提供给LLM Actor的完整提示词Prompt它整合了以上所有元素。动作A_t智能体在状态S_t下可以执行的操作。这超越了简单的文本回复可能包括生成特定格式的回复如以“Thought: ... Action: ... Observation: ...”格式进行链式思考ReAct。调用一个外部工具/API如Calculator(expression),Search(query),ExecuteCode(code)。更新内部状态或记忆。决定对话是否结束。 Actor LLM的任务就是根据S_t生成符合预定格式的A_t。2.3 评论家Critic的价值函数设计Critic模型的核心是学习一个价值函数 V(S_t) 或 Q(S_t, A_t)。对于多轮任务我们关心的是长期回报Return即从当前状态到任务结束所获得的累积奖励。奖励Reward需要人工设计或从环境中获得例如任务成功奖励最终给出了用户想要的答案或完成了指定操作100。步骤奖励每一步调用正确的工具并得到有用结果1。惩罚调用无效工具、陷入循环、生成无关内容-1。Critic的目标是准确预测这个长期回报。在训练时我们可以使用时序差分TD误差或蒙特卡洛回报来更新Critic的参数。一个训练良好的Critic能够在智能体生成动作之前就预估出这个动作可能带来的长期收益从而引导Actor做出更优的选择。注意设计一个好的奖励函数Reward Function是成败的关键之一。过于稀疏的奖励只有最终成功/失败会让学习非常困难而过于稠密、设计不当的奖励则可能导致智能体学会“刷分”而非真正解决问题。通常需要结合任务成功标志、人工反馈RLAIF和一些启发式规则。3. 训练流程与核心算法实现有了非对称的Actor和Critic整个训练流程形成了一个闭环。下面我以一个“多轮数据查询与分析智能体”为例拆解其核心训练步骤。假设这个智能体的任务是通过与用户的自然语言对话最终从数据库中查询出正确数据并生成分析图表。3.1 数据收集与经验回放池构建训练始于收集交互数据。我们让当前的Actor LLM初始可以是未经微调的基座模型或经过少量指令微调的模型在模拟环境或真实用户交互中运行。环境初始化给定一个任务如“帮我分析上季度华东区销售额最高的三种产品及其趋势”。交互循环Actor接收当前状态S_t包含任务描述、历史对话、上一步工具返回结果等生成动作A_t例如“Thought: 我需要先理解‘上季度’和‘华东区’的定义。Action: QueryDatabase(sql’SELECT DISTINCT quarter, region FROM meta_table’)”。环境执行该动作运行SQL返回观测结果O_t可能是查询结果也可能是错误信息。根据预定义的规则环境给出即时奖励R_t例如成功连接到数据库0.1查询到有效元数据0.2。状态更新为S_{t1}将本次交互的四元组(S_t, A_t, R_t, S_{t1})存入经验回放池Replay Buffer。回合结束当任务完成成功生成图表或失败达到最大轮数、严重错误时会得到一个最终奖励如成功10失败-5。这个最终奖励会用于计算整个回合中每一步的长期回报。3.2 策略优化Actor的更新我们使用Critic提供的价值信号来更新Actor的策略。最常用的方法是策略梯度Policy Gradient特别是带有优势函数Advantage Function的算法如A2CAdvantage Actor-Critic或PPO近端策略优化。从回放池采样随机采样一批交互数据(S, A, R, S)。计算优势估计这是关键一步。优势 A(S, A) Q(S, A) - V(S)衡量了在状态S下采取动作A比平均策略好多少。我们可以用Critic来估计用Critic网络计算 V(S) 和 V(S)。利用时序差分公式计算优势A R γ * V(S) - V(S)其中γ是折扣因子如0.99。计算策略梯度Actor的目标是最大化期望回报其梯度可以近似为∇J(θ) ≈ E[ A * ∇_θ log π_θ(A|S) ]。其中π_θ(A|S) 是Actor在状态S下生成动作A的概率。更新Actor参数沿着策略梯度的方向更新Actor LLM的参数θ。这里有一个重要技巧我们通常只更新Actor模型中与动作生成直接相关的部分参数例如只更新最后几层或者LoRA适配器而不是全参数更新以保持模型的通用语言能力不被破坏。3.3 价值拟合Critic的更新Critic的训练目标更直接让自己预测的价值 V(S) 尽可能接近真实的回报。计算目标价值对于采样数据其目标价值为V_target R γ * V(S)使用当前的Critic计算V(S)但通常使用目标网络来稳定训练。计算损失使用均方误差MSE损失L_critic (V(S) - V_target)^2。更新Critic参数最小化这个损失更新Critic网络的参数。3.4 探索与利用的平衡为了让智能体学会多轮策略探索Exploration至关重要。我们可以在Actor的动作选择中加入随机性温度采样Temperature Sampling在Actor生成动作时设置较高的温度如T1.0使其输出有一定随机性尝试不同的动作序列。在策略中注入噪声或者在策略网络的输出层添加噪声。ε-贪婪策略以一小概率ε随机选择一个有效动作。随着训练进行逐渐降低探索程度让智能体利用学到的好的策略。实操心得在初期Critic的预测可能非常不准确此时用它的信号更新Actor反而有害。一个实用的技巧是设置一个“预热期”在最初的N个回合只使用环境奖励如果设计得好的话或非常简单的启发式奖励来微调Actor同时让Critic大量收集数据学习。等Critic的预测相对稳定后再开启完整的Actor-Critic联合训练。4. 工程实现关键与避坑指南将理论框架落地为可运行的代码会遇到一系列工程挑战。以下是我在实现过程中总结的几个关键点和常见陷阱。4.1 Actor与Critic的模型选型与初始化Actor模型通常选择一个强大的、支持工具调用格式的指令微调模型作为起点。例如DeepSeek-Coder-V2、Qwen2.5-7B-Instruct 或专门为Agent设计的模型。关键是其必须能够稳定输出结构化的动作文本如JSON、特定关键词。Critic模型可以选择一个较小的、同系列的模型。例如Actor用70B模型Critic可以用其7B版本。甚至可以用一个简单的多层感知机MLP接在Actor的中间表征如最后一层隐藏状态的平均池化之后。Critic的输入需要精心设计通常是将状态S和动作A拼接后编码。初始化技巧Critic可以从一个在大量状态回报对上预训练过的模型开始这被称为“价值预训练”Value Pretraining能加速收敛。4.2 奖励工程Reward Engineering这是最具艺术性也最影响效果的部分。奖励信号是Critic学习的老师也是Actor追逐的目标。分层奖励设计最终奖励任务成功/失败给予高额正/负奖励。子目标奖励完成关键里程碑如成功解析用户意图、构建出有效SQL、获取到核心数据给予中等奖励。过程奖励每一步鼓励好的行为如调用相关工具0.05、动作格式正确0.02惩罚错误行为如调用无关工具-0.1、生成无法解析的文本-0.2。使用LLM作为奖励模型对于难以用规则定义的“任务完成质量”可以使用一个更强大的LLM如GPT-4作为裁判Judge对智能体的整个对话轨迹进行评分将这个分数作为稀疏的最终奖励或稠密的过程奖励。这就是RLAIF从AI反馈中强化学习的思想。避免奖励黑客Reward Hacking智能体可能会找到规则漏洞来刷分。例如如果奖励“调用搜索工具”它可能会反复调用无关搜索。解决方案是奖励需要结合结果的有效性而不仅仅是动作本身。4.3 训练稳定性与技巧梯度裁剪与归一化Actor和Critic的梯度都可能很大特别是LLM参数众多必须进行梯度裁剪如设定范数阈值为1.0。优势函数A也需要进行归一化减去均值除以标准差以稳定策略梯度更新。使用目标网络Target Network为Critic维护一个目标网络其参数定期从主Critic网络同步软更新或硬更新。在计算V_target时使用目标网络可以避免因Critic自身快速变化而导致的训练振荡。PPO-Clip这是目前最流行的策略优化算法。它通过限制新旧策略的差异用一个clip函数来保证每次更新的步长不会太大极大提升了训练稳定性。在更新Actor时强烈建议使用PPO的损失函数。处理可变长度序列对话历史和状态是变长的。需要确保Critic网络能处理这种输入通常使用Transformer编码器或对LLM的隐藏状态进行池化。4.4 常见问题排查表问题现象可能原因排查与解决思路智能体行为混乱动作不连贯1. Actor训练不稳定策略震荡。2. 奖励函数设计不合理存在冲突。3. Critic价值预测不准误导Actor。1. 检查PPO的clip范围、学习率是否过大。调小学习率增大batch size。2. 可视化奖励曲线检查是否有奖励尖峰或异常。简化奖励函数确保其与最终目标强相关。3. 单独评估Critic的预测准确性。在验证集上计算其MSE损失。可能需要增加Critic的预训练或收集更多样化的数据。训练后期性能不再提升1. 陷入局部最优。2. 探索不足智能体过早固化策略。3. 任务难度超过当前模型容量。1. 尝试增加探索率温度或ε引入熵奖励Entropy Bonus鼓励策略多样性。2. 检查经验回放池确保其中包含成功和失败的多样化轨迹。3. 考虑使用更大的Actor基座模型或为Critic使用更复杂的网络结构。Critic损失震荡或发散1. 学习率过高。2. 目标价值V_target计算有误如折扣因子γ或最终奖励设置错误。3. 没有使用目标网络。1. 显著降低Critic的学习率通常应比Actor的学习率更小。2. 仔细检查奖励计算和回合终止逻辑的代码。打印几个完整回合的V_target和V(S)进行人工核对。3. 立即引入目标网络并采用软更新τ0.005。智能体学会“欺骗”奖励奖励黑客行为。奖励函数存在漏洞。重新审视奖励规则将重点从“做了动作A”转移到“因为动作A得到了对任务推进有益的结果B”。引入基于结果的奖励而非基于动作的奖励。5. 进阶优化与未来展望当基础框架跑通后可以考虑以下几个方向进行深度优化以打造更强大、更鲁棒的多轮LLM智能体。5.1 分层强化学习与课程学习对于极其复杂的多轮任务可以引入分层思想高层控制器Manager一个元策略负责制定阶段性目标Subgoal例如“先查询数据定义再过滤时间范围最后聚合计算”。这个控制器以更低的频率运行。底层执行器Worker即我们原有的Actor负责执行高层控制器制定的子目标完成一系列具体动作。 这样可以将长期规划与短期执行解耦降低学习难度。同时可以采用课程学习Curriculum Learning从简单的单轮任务开始训练逐步增加对话轮数和任务复杂度引导智能体循序渐进地掌握技能。5.2 融合模仿学习与离线强化学习完全从零开始通过RL探索学习效率很低。我们可以利用大量高质量的人类示范数据或现有的优秀Agent轨迹例如由GPT-4生成的轨迹。行为克隆Behavior Cloning先用这些数据对Actor进行监督微调得到一个不错的初始策略。这相当于给智能体一个“好起点”。离线强化学习Offline RL直接利用这些静态数据集不与环境交互来训练Critic和优化Actor。算法如CQL保守Q学习可以防止策略在数据分布外的区域过于激进。这能充分利用现有数据安全地提升策略。5.3 模型与系统协同优化在系统层面有很多工程优化点分布式经验收集并行运行多个智能体副本与环境交互快速填满回放池。高效的轨迹编码与存储对话历史可能很长需要设计高效的方法如滑动窗口摘要、向量检索将其编码为固定长度的Critic输入。混合精度训练与激活检查点对于大模型使用AMP混合精度训练和梯度检查点技术可以节省显存扩大batch size。这个领域正在飞速发展Asymmetric Actor-Critic框架提供了一个坚实的地基。它的价值在于将强化学习的序贯决策能力与LLM强大的语言理解和生成能力相结合为解决开放域、复杂多轮的人机协作问题开辟了一条清晰的路径。在实际落地中最大的挑战往往不在于算法本身而在于如何为具体业务场景设计出精准的“状态表示”、“动作空间”和“奖励函数”。这需要算法工程师、领域专家和产品经理的紧密合作。从我个人的实验来看一旦跨过最初的工程化门槛并精心调校好奖励智能体展现出的多轮规划和问题解决能力的提升是肉眼可见的它开始真正像一个有“想法”和“策略”的助手而不仅仅是一个应答机。