Tool Agents:赋予大模型使用工具与探索环境的能力
仅仅依靠预训练阶段学到的参数知识,大型语言模型(LLMs)很难解决实时查询、复杂数学计算或与外部系统交互的问题。这时候,我们就需要让大模型变成 Tool Agents(工具智能体)——赋予它们调用搜索引擎、执行代码、查询 API 甚至是操作图形界面的能力。
本文将梳理当前 Tool Agents 的核心范式,从工具执行方式、如何让模型学会使用工具,一直探讨到智能体该如何理解和探索复杂环境。
1. 工具的使用范式与执行方式
如何让 LLM 执行一个工具?目前学术界和工业界探索了多种极具创意的路径:
1.1 Tool Tokens (ToolkenGPT)
常规的工具调用(例如 OpenAI 的 Function Calling)需要模型生成一段 JSON 格式的字符串。但 ToolkenGPT 提出了一种更为底层的思路:把每一个工具当作一个特殊的词表 Token(称为 Toolken)。
- 嵌入表示(Embedding Representation):将每个工具的嵌入向量(Embedding)直接插入到 LLM 的词表头部,就像普通的 Token 一样。
- 推理模式(Reasoning Mode):模型正常生成文本,同时在候选概率中考虑这些 Toolken。
- 工具模式(Tool Mode):一旦预测出某个 Toolken,模型就会切换到特殊的“工具模式”来生成该工具所需的参数。
- 结果注入(Result Injection):工具执行后,结果被注回上下文中,模型继续推理直至得出最终答案。
- 优势:不需要对整个 LLM 进行微调,只需轻量级学习 Toolken 的嵌入即可,且支持动态添加海量新工具(只需扩充词表)。
1.2 Code Tags (CodeAct)
JSON 等纯文本格式在表达力上存在硬伤:它们原生不支持循环(Loops)、条件判断(Conditionals)、异常处理(Exception Handling)和状态持久化。 因此,CodeAct 提出:Python 代码本身就是最通用、图灵完备的“万能工具”。 模型不再调用一个个离散的 API,而是直接编写 Python 代码,并在安全的沙箱中执行(允许调用本地库、文件和 API)。获取报错或运行结果(Observation)后,模型可以自我反思、调试并再次修改代码,形成一个坚实的“生成 -> 运行 -> 观察 -> 修正”闭环。
2. 怎样让模型学会用工具?
2.1 提示工程:DocPrompting
面对每天都在不断增长和更新的开源代码库和 API,模型不可能在训练时就见过所有的函数。如何让它对未见过的(Unseen)库泛化? DocPrompting 提供了一个自然语言到代码(NL→Code)的通用框架:
- 检索(Retriever):根据用户的自然语言意图,从文档库中检索出相关的 API 文档和说明片段。
- 生成(Generator):把这些文档连同用户的意图作为 Prompt 喂给模型,指导它生成正确的工具调用代码。 这本质上是一种专门针对工具 API 的 RAG(检索增强生成)机制。
2.2 自我学习:Toolformer
如果不想每次都写很长的 Prompt,能不能让模型“自己教会自己”用工具?Toolformer 提出了一种精妙的自监督学习三步法:
- 采样(Sampling):给模型几个工具使用的 Few-shot 示例,让它遍历海量文本语料,在所有“可能需要调用工具”的位置生成候选的 API 调用(如
<API>Calculator(2+2)</API>)。 - 执行(Execution):实际执行这些 API,将结果拼接到文本中(如
<API>Calculator(2+2) -> 4</API>)。 - 过滤(Filtering,核心):对比两次预测下一个词的 Loss:
- 不带工具结果时的预测 Loss ($L^-$)
- 带着工具结果时的预测 Loss ($L^+$)
- 只有当 $L^- - L^+ \ge \text{阈值}$ 时,说明这个工具的返回结果真正且显著地帮助了模型预测下一个词,才保留这条调用记录。 最后,用这些经过严格过滤的高质量数据对模型进行微调,让模型自主掌握工具的触发时机。
2.3 工具归纳(Tool Induction):TroVE
如果在当前环境中压根没有现成的工具集怎么办?TroVE 框架让 LLM 能够从处理一连串任务的过程中,自动归纳(Induce)出可复用的高级函数。它能够构建出一个紧凑、高效且可自动验证的专属工具箱,整个过程不需要额外的训练或人工监督。
3. 环境的表达与理解
智能体要使用工具,首先得能看懂它所处的“环境”。
3.1 环境的表达形式(Representation)
- 文本(Text):如 ALFWorld,将具身(Embodied)环境转化为纯文本描述。
- 图像(Images):如 Touchdown,在视觉街景中进行自然语言导航和空间推理。
- 网页文本表示(Textual Web):如 WebArena,将复杂的网页 DOM 树抽象成文本序列,供语言模型阅读。
- Set of Marks (SoM,视觉打标):多模态模型(如 GPT-4V)虽然能看懂图像,但在精确定位网页元素时常有偏差。SoM 提出在图像(网页或屏幕)的可交互元素上打上带有数字的标签(Marks),模型只需要输出数字即可精准点击目标,极大地释放了多模态大模型的视觉定位(Visual Grounding)能力。
3.2 环境的探索与记忆(Exploration)
模型并不是全知全能的,即使包含了海量世界知识,很多具体的环境规则依然需要“边走边学”。
- 环境特定的 Prompt(SteP):人工编写堆叠式的 Prompt,为模型在特定的 Web 动作中提供显式的导航指南。
- 无监督工作流记忆(Agent Workflow Memory):模型在执行任务时,自动记住那些成功的交互轨迹,并在后续的新任务中将其提取出来作为 Prompt 提示自己。
- 好奇心驱动的探索(Curiosity-driven):引入强化学习中的好奇心机制,当模型进入状态空间中“不可预测”的区域时,给予更高的奖励,鼓励其探索未知。
- 探索与重打标(BAGEL):这是一种基于探索的轨迹记忆(Trajectory Memorization)方法。模型通过采样初始指令并在环境中广泛探索,随后利用更准确的指令对这些成功的探索轨迹进行重新标注(Re-label),从而实现智能体能力的自举(Bootstrapping)。
4. 总结
Tool Agents 正在经历从“基于 JSON API 填空”向“编写图灵完备代码与系统互动”的范式转移。无论是通过 Toolformer 的自监督预测对比生成数据,还是借助 Set-of-Mark 等视觉手段理解图形界面,智能体“手握工具”的边界正在不断被拓宽。有了记忆(Memory)、推理(Reasoning)再配上不断迭代的工具(Tools)和环境探索机制,Language Agent 才能真正走出聊天框,成为改变数字世界的执行者。