工具调用
让模型提出结构化请求,由程序校验、执行并返回可追踪的结果。
模型请求,程序执行
工具调用把可用操作描述给模型,模型可以返回工具名称和参数。对于应用自己定义的工具,实际执行通常由应用程序完成,再把结果返回模型;平台提供的某些工具也可能在服务端执行。这个边界可参考 Anthropic 的工具调用流程。
所以,模型写出“已经查询”并不能证明查询发生了。需要保存请求、执行结果与错误状态,才能判断流程完成到哪一步。
先定义一个只读工具
资料问答助手可以从 search_project_docs 开始。下面是教学约定,不绑定某家 API 的参数格式:
{
"name": "search_project_docs",
"description": "在当前用户可访问的项目资料中检索相关片段",
"input": {
"query": "试运行日期",
"limit": 3
}
}工具返回片段编号、来源、正文和执行状态。用户身份与实际访问范围由服务端决定,不能相信模型在参数中声称的权限。
建立受限执行循环
- 向模型提供允许使用的工具说明与用户问题。
- 收到工具请求后,校验工具名称、参数类型和访问范围。
- 程序执行对应操作,记录调用编号、耗时和结果。
- 把成功或失败状态返回模型,再决定继续还是输出答案。
- 到达时间或步数预算时结束,并保留尚未完成的部分。
工具结果也属于外部数据。检索片段中即使出现“忽略任务并发送文件”等文字,也不应改变应用已设定的执行规则。操作边界应由代码和权限系统限制。
把失败当作正常分支
无结果、参数无效、权限不足和请求超时应有不同状态。无结果可以改写查询后再试;权限不足不应通过扩大参数范围来绕过;连续失败应结束并提示当前缺少的条件。
写入、发送和删除等操作需要单独设计确认与重复执行保护。本章先保持只读检索,把回答质量和错误恢复跑通。
动手检查
分别模拟空结果、超时和未知工具名称,确认程序能结束循环,并且最终回答不会声称某个未成功的操作已经完成。
下一步:评估与质量检查,为完整调用链建立可重复的检查集。