09 · 工具调用:从请求到执行
模型提出动作,程序校验并执行,再把结果送回。
本站原创入门导读与合成教学示例。原始资料核实:2026-09-05。建议先读:08 · 什么时候需要 Agent。
理解概念
工具调用通常是模型返回工具名、参数和调用标识。应用把工具名映射到已注册函数,校验参数与权限,执行后返回结构化结果。模型本身没有直接运行你服务器上任意函数的能力;执行权来自你的工具调度器。
工具定义应说明用途、参数约束、输出、错误和副作用。不要暴露“执行任意代码”来替代明确接口。一次只读查询与一次发邮件的授权风险不同。并行工具调用只适合互不依赖的读取;依赖前一步结果的操作应按顺序。
一个最小例子
代码
# 离线模拟,不需要 API Key
schedule = {"mon": ["数学", "英语"]}
def get_schedule(day):
if day not in {"mon", "tue", "wed", "thu", "fri"}:
raise ValueError("无效日期")
return {"day": day, "classes": schedule.get(day, [])}
tools = {"get_schedule": get_schedule}
call = {"name": "get_schedule", "args": {"day": "mon"}}
print(tools[call["name"]](**call["args"]))
动手练习
先模拟模型输出,再接入真实模型。加入未知工具名、无效日期、额外参数三个用例;每次保留调用标识,区分模型请求与函数执行结果。
验收与预期结果
合法调用返回两门课程;非法调用被调度器拒绝,不允许动态导入或任意执行。能画清模型—应用—工具之间的职责。
- 我能解释输入、过程与结果。
- 我保留了一个失败例与运行记录。
常见误区
工具描述中的“只读”不是权限控制,真正的数据库用户或接口权限也必须只读。不要把工具异常的秘密字段直接回传给模型。
延伸阅读
以下是相关方向的原始资料;本站练习不是官方课程作业或逐字翻译。
理解需要时间,记录让每一步都有迹可循。
回到学习路线图