推理 · 评测 · 冲刺模块十 · 智能体工具使用代码约 14 分钟
工具使用:检索、调用与 JSON schema 校验
让模型正确地调用外部工具
学完这节你能:
- 理解工具调用的流程
- 掌握 JSON 参数与 schema 校验
- 知道调用失败怎么处理
工具让智能体突破模型本身能力:搜索、计算器、代码执行、数据库、API。核心是让模型输出「结构化的调用指令」,程序解析后真正执行。
- 工具检索:从工具库里选出最匹配当前任务的工具(工具多时需检索)。
- 生成调用:模型按 schema 输出工具名 + JSON 参数。
- 解析与校验:json.loads 解析,按参数 schema 校验类型/必填/取值,防止模型编错参数。
- 执行与回填:调用工具,把结果喂回模型继续推理。
解析并校验工具调用参数
import json
call = json.loads(model_output) # {'tool':'weather','args':{'city':'北京'}}
assert call['tool'] in TOOL_REGISTRY # 工具存在
args = call['args']
assert isinstance(args.get('city'), str) # 参数类型/必填校验(schema)
result = TOOL_REGISTRY[call['tool']](**args) # 执行⚠️ 校验是安全与稳定的关键:模型可能输出非法 JSON、缺参数、类型错、调用不存在的工具。必须做 schema 校验 + 出错反馈让模型重试,不能盲目执行。
自测智能体工具调用中,对模型输出的 JSON 参数做 schema 校验,主要为了:
// 带走一句话
工具调用=检索工具→模型输出 JSON 调用→json.loads 解析+schema 校验→执行回填;校验是安全稳定的关键。
独立练习
做到这些,才算完成本节
- 为一个真实工具定义 schema,并测试缺参、额外字段、错误类型和越权参数。
- 设置调用超时与最大循环次数,证明失败时能够退出而不是无限重试。
- 在本地运行代码,打印每个关键张量的 shape。
- 关闭示例后从空文件重写核心部分,并补一个异常或边界测试。
学习记录
记录本节阅读进度
建议先独立回答自测。读完记录不等于已经掌握。