第4章 Agent工具 技术笔记
核心问题:工具是大模型大脑连接真实数字世界的手脚感官;本章解决工具选择 、异步与事件两大核心挑战
4.1 工具的分类
两个观察维度:调用方向 、作用对象
| 工具类型 | 调用方向 | 作用对象 | 典型工具示例 |
|---|---|---|---|
| 感知工具 | Agent主动调用 | 获取信息 | 网页搜索、知识库检索、读文件、grep、读取网页 |
| 执行工具 | Agent主动调用 | 改变外部世界 | shell执行、代码解释器、写/编辑文件、发邮件 |
| 协作工具 | Agent主动调用 | 驱动其他Agent/人类 | 创建子Agent、给子Agent发消息、取消子Agent |
| 事件触发工具 | Agent注册,外部触发 | 驱动Agent执行 | 定时器、监控后台任务、连接外部事件源 |
| 用户沟通工具 | Agent主动调用 | 向用户传递信息 | 回复用户、卡片消息、用户通知提醒 |
各类工具要点
- 感知工具:拿信息;重点:粒度、输出信息量控制
- 执行工具 :修改外部环境;重点:错误代价高,安全约束为核心
- 协作工具:多Agent/人协作;用途:任务并行、不同任务使用不同模型/提示词/工具
- 事件触发工具
- 两步:Agent注册关心的事件 → 外部事件到来异步回调唤醒Agent
- 没有它,Agent只能被动响应对话,无法定时执行、响应邮件/告警等外部事件
- 用户沟通工具:把"和用户说话"变成显式工具调用,适配多渠道异步消息
前三类:Agent主动调用;后两类依赖事件驱动异步Agent架构
4.2 工具设计通用原则
4.2.1 能力表达:专用工具 vs Skill + 通用执行器
- 专用代码工具:结构化函数调用,确定性强、可测试;缺点:占用大量token,工具膨胀破坏KV Cache
- Skill + 通用执行器:自然语言写Skill流程文档,依靠bash/代码解释器执行;少量通用工具覆盖大量场景
选型三维度:
- 参数复杂度:嵌套、复杂校验 → 选专用工具;简单参数可用通用执行器
- 变更频率:频繁改动 → Skill;稳定底层操作 → 专用工具
- 模型能力:强模型适合Skill;弱模型依赖结构化Schema引导调用
4.2.2 工具粒度权衡:整合与分离
- 粒度过细:工具爆炸,LLM选择负担重;粒度过粗:工具逻辑过于复杂
- ✅ 整合判断标准:功能相似、使用场景高度重叠
- ❗不要强行合并:参数差异大、延迟特性差距大的功能,强行合并会语义模糊
例:各类文档提取合并为
read_document(file_type);但OCR与视频关键帧提取保持独立
4.2.3 通用性优先
优先通用工具,仅安全、权限、性能场景使用专用工具
例子:用沙盒code_interpreter替代一堆专用计算工具,利用模型代码生成元能力,覆盖未预见场景。
- 通用性边界:高权限、风险操作,需要封装专用工具做权限控制与审计。
4.2.4 工具描述的艺术
工具调用出错,优先排查描述,而非换更强模型。
- 重点写什么时候用,不止写"能干什么"
- 明确边界:写清楚不能做什么,大量失败来自模型分不清边界
- 参数:给具体示例,不要只写抽象规范
- 写明返回值结构;耗时工具标注执行代价
- 附加1‑5个真实调用示例,显著提升调用准确率
4.2.5 参数传递保真性
禁止静默修改输入输出,两类反模式:
- 静默输入转换:底层悄悄改写参数(引号自动转换),模型看到的世界和工具操作的世界不一致,模型无法排错
- 静默参数注入:工具后台追加参数,引发莫名其妙报错
如需规范化输入,必须在工具文档说明,返回结果同步告知Agent,不能偷偷修改。
4.2.6 工具设计三代演进
- 第一代 API封装:API直接映射工具,粒度细,多工具组合完成简单任务
- 第二代 ACI(Agent‑Computer Interface) ACI对标HCI;工具面向Agent目标,而非面向底层API;本章粒度、通用性、描述规范都属于这一代
- 第三代 编排与发现
- 准确调用:示例驱动调用
- 工具发现:动态工具发现,不一次性灌入全部工具到上下文
- 工具串联:代码编排工具调用,LLM生成脚本,中间变量留在执行环境,仅返回最终结果,大幅降低Token消耗(第五章详解)