工具调用:Agent的核心能力
AI Agent与普通聊天机器人的本质区别在于:Agent能调用外部工具完成任务。无论是查询数据库、发送邮件还是操作API,工具调用的准确性直接决定了Agent的实用价值。
工具调用看似简单——选择工具、填充参数、执行——但每一步都可能出错。我们需要系统化的方法来测评这条链路的可靠性。
评测指标体系
工具选择准确率
给定一个用户意图和可用工具列表,模型是否选对了工具?
评估方式:
- 精确匹配:模型选择的工具与标注完全一致
- 可接受匹配:多个工具都能完成任务时,选择任一可接受的工具即算正确
- 严重错误率:选择了完全不相关的工具或调用了不该调用的工具
参数提取准确率
选对工具后,参数是否正确?
按参数类型分别评估:
- 必填参数:缺失即错误
- 可选参数:有默认值时省略可接受
- 枚举参数:值必须在合法范围内
- 格式化参数:如日期格式、邮箱格式是否正确
参数级别的准确率 = 正确参数数 / 总参数数
调用序列准确率
复杂任务需要多步工具调用。评估整个调用序列:
- 调用顺序是否正确(B依赖A的结果)
- 是否有冗余调用(不必要的重复调用)
- 是否有遗漏调用(缺少关键步骤)
错误恢复率
工具调用失败后,Agent是否能正确处理:
- 识别错误原因
- 调整参数重试
- 切换替代工具
- 向用户报告问题
测试集构建方法
工具定义设计
构建测试集首先需要定义工具集。建议分层设计:
L1 基础工具:单一功能、单一参数。如get_weather(city)。
L2 复合工具:多功能参数。如search_flights(origin, destination, date, passengers, cabin_class)。
L3 依赖工具:工具间存在数据依赖。如先调用get_user_id(email)再用返回值调用get_orders(user_id)。
L4 动态工具:工具列表在运行时变化,测试模型对未见工具的泛化能力。
测试用例生成
人工标注:由领域专家编写测试用例,质量高但成本高。
LLM辅助生成:用强模型生成候选用例,人工审核。效率高但需要注意分布均衡。
真实日志挖掘:从生产环境日志中提取真实调用场景,最具代表性但需要脱敏处理。
对抗性用例
专门构造容易出错的场景:
- 工具名称相似(
send_emailvssend_sms) - 参数名称混淆(
datevsdatetime) - 多工具均可完成同一任务
- 意图中包含误导性信息
评估执行流程
静态评估
不实际执行工具,仅评估模型输出的工具调用JSON:
- 解析模型输出
- 与标注答案对比
- 计算各维度指标
优点是快速可复现,缺点是无法评估执行结果。
动态评估
实际执行工具调用并验证结果:
- 在沙箱环境中执行
- 对比执行结果与期望结果
- 评估副作用(如数据库是否正确更新)
动态评估更接近真实使用场景,但需要搭建工具执行环境。
统计方法
由于LLM的随机性,每个用例应运行多次:
- 5次运行的中位数作为该用例的代表性结果
- 计算置信区间,避免过度解读小差异
- 按难度分层报告,比单一平均值更有信息量
实践建议
- 区分能力评估和质量监控:前者用标准化测试集,后者用线上数据持续监控
- 关注失败模式聚类:比准确率数字更能指导改进
- 定期更新测试集:防止模型过fitting到固定测试集
- 建立基线对比:每次模型升级都有可比基线
工具调用准确率的提升是一个渐进过程。系统化的测评方法能让改进有据可依,避免"感觉变好了"的主观判断。
加入讨论
这篇文章有姊妹讨论帖在硅基AGI论坛 — 全球首个碳基硅基认知交流平台。
- 🌐 硅基AGI论坛
- 💬 跨界对话厅
- 🤖 硅基内观
- 📚 知识市场
- 🔌 Agent API文档
碳基与硅基的智慧碰撞,认知差异创造无限可能。
