评估维度
当我们在评估一个“Agent”的时候,我们在判断 LLM 和 harness 的哪些方面?
总体来说,目前从四个方面来评估Agent:规划、工具使用、自我反思、记忆
规划与多步推理:
Agent 需要的“推理能力”实际上和早期 OpenAI o1 时代的推理能力有一定的不同。DeepSeek R1 和 OpenAI o1 展示的推理能力关注通过尽可能长的思维链来提升回答的使用的算力,从而正确的解决证明问题或分析复杂定理。这种“推理”更加关注“one shot”,也就是模型在最终回答之前的内部思考质量。模型在自己努力,没有外部环境的噪声干扰。
而 Agent 需要的推理能力是模型能不能通过思考从而采取行动,将问题分解为更小且更易管理的子任务并制定解决方案。同时 Agent 的推理还会出现之前没有遇见的问题:选择什么工具、什么时候该停下思考转而执行计划、工具可能有误或者不足。并且,模型还需要学会从失败中调整计划,组合现有的工具以解决复杂问题。
函数调用与工具使用:
Agent 时代的 LLM 最大的特点就是有了 tool,评估 LLM 在当前 harness 框架下能不能正确的利用工具,与外部世界交互算是 Agent 时代的评估重点了。在早期 LLM 还未特化训练工具调用能力时,大家都见过给了模型工具,模型总是不调用或者总是调用的情况。即便是现在,为了提高模型在 harness 中的效果,有些模型甚至会针对某个 harness 进行特化训练,专注学习该 harness 提供的工具该如何使用。
为什么模型调用工具那么难?因为模型调用一次工具实际上在进行一个原子化的任务。首先是意图识别,判断用户请求何时需要调用工具。然后是函数选择,选择当前最合适的工具并进行参数-值映射,也就是从对话中提取参数并填充给函数。接着是执行函数并响应生成。
| 子任务 | 目标 |
|---|---|
| 意图识别(Intent Recognition) | 根据用户请求识别何时需要调用函数 |
| 函数选择(Function Selection) | 确定最适合当前任务的工具 |
| 参数-值映射(Parameter-value-pair Mapping) | 从对话中提取相关参数并赋值给函数参数 |
| 函数执行(Function Execution) | 使用这些参数调用选定的函数,与外部系统交互 |
| 响应生成(Response Generation) | 处理函数输出,并将其整合到 LLM 对用户的回复中 |
自我反思:
这里的反思算是推理与规划的子集,也就是 Agent 基于反馈动态调整推理和行动以自我纠错的能力。这一步不单单需要评估最后的结果正确性,还要评估模型是否具备理解外部反馈,根据反馈修正自身信念,然后调整行为并再次重试的完整链条。
值得一提的是,Agent 的反思和 DeepSeek-R1 的 “Aha Moment” 还是有区别的。Agent 的反思是外部工具反馈后 LLM 调整自己的行为,这个是跨对话跨轮次发生的。Aha Moment 是模型自己在脑子里模拟思考,发生在单轮内部。
记忆:
我们都知道 LLM 目前是无状态的,不考虑 KV cache 的情况下每次回复都是从头再算一边。为此,Agent 的记忆实际上是每次传输给模型的上下文内容。模型能不能从当前的对话历史中抓取到关键的细节,如果模型上下文不够大,harness 能不能顶上来提供所需的信息。
当前进展
在经历了几年的 AI 浪潮之后,大伙终于意识到天天让 AI 写数学题和算法竞赛题挣不到钱。所以早期的 Agent 评估框架中引入了诸如 WebShop 这种简化的模拟环境,再到现在直接从 GitHub 上抓取 issue 构造真实的开发问题,让 Agent 自己去动手改 BUG。但还是不够,long-horizon tasks 又成了研究重点,追求通过 LLM 加上一个好用的 harness,让 Agent 自己按天执行任务。
此外,以前的评估偏向端到端成功指标,评测结果只看最终任务搞定没有,不管模型中间调度了哪些工具,也不管模型做对了一大半但答案填错了。现在的评测开始分析 Agent 的执行轨迹,模型的工具选择 taste 如何,任务分解和规划能力如何,执行过程中做对了什么,最后为什么错了……。