· BigDog · AI 工程实验 · 8 min read
大模型为什么会使用工具
解释大模型工具调用的基本机制、上下文约束和能力边界。
目录
这篇笔记不讨论“模型是不是聪明”,只讨论一个工程事实:大模型本身只负责生成文本,工具调用把它接到真实系统上,让它能查资料、跑代码、读文件、调用 API,并根据结果继续推理。
这篇笔记怎么读
- 先看工具调用的基本闭环:模型提出调用请求,应用层执行工具,再把结果交回模型。
- 再看 Agent Loop:工具调用一旦进入多轮循环,就从“回答问题”变成“执行任务”。
- 最后看边界:工具能提高可靠性,但权限、上下文、解析错误和外部系统状态仍然需要工程约束。
工具调用解决什么问题
纯语言模型有几个稳定短板:
- 知识滞后:模型参数里的知识有截止时间,无法天然知道实时状态。
- 无法行动:模型不能自己发请求、读数据库、改文件或启动服务。
- 计算不可靠:复杂计算、格式转换和精确检索不适合只靠自然语言生成。
- 容易编造:没有外部证据时,模型可能生成看似合理但无法验证的答案。
工具调用的价值不是“让模型变成程序”,而是让模型成为一个调度者:识别任务、选择工具、组织参数、读取结果,再生成下一步判断。
一次工具调用的最小闭环
最小流程可以拆成五步:
- 用户提出任务,例如“查一下北京今天的天气”。
- 模型判断自己需要外部信息,生成结构化调用请求。
- 应用层解析请求,真正调用天气 API。
- 应用层把 API 返回结果放回上下文。
- 模型基于真实结果组织回答。
关键点在第 2 步和第 4 步:模型并不直接访问 API,它只输出一个可被程序解析的调用意图;工具结果也不是“自动进入模型脑子里”,而是被应用层追加到下一轮上下文。
工具说明书:模型怎么知道能用什么
调用工具前,应用层会把工具列表交给模型。每个工具通常包括:
- 工具名:例如
get_weather。 - 功能描述:说明什么时候该用它。
- 参数结构:例如
location: string。 - 返回格式:让模型知道结果大概长什么样。
模型看到的不是一个真实函数,而是一份接口说明。它要做的是把自然语言任务翻译成符合接口约束的结构化请求。
Function Calling 与普通 Prompt 的区别
普通 Prompt 让模型直接生成文本;Function Calling 要求模型在合适的时候输出结构化调用。
区别主要在三点:
- 输出目标不同:普通回答面向人,函数调用面向程序解析。
- 失败形态不同:普通回答错在内容,函数调用还可能错在参数、工具选择和调用顺序。
- 工程责任不同:模型只负责提出调用请求,权限控制、执行、重试、日志和错误处理都在应用层。
因此,工具调用系统的可靠性取决于模型能力,也取决于外层工程设计。
Agent Loop:从一次调用到多步任务
当任务需要多轮执行时,系统通常会进入 Agent Loop:
- Observe:读取当前上下文、文件、网页或错误日志。
- Plan:判断下一步要查什么、改什么、跑什么。
- Act:生成工具调用请求。
- Execute:应用层执行工具。
- Revise:根据结果修正计划,继续下一轮。
这也是 Codex、自动化浏览器、RAG Agent 等系统的共同结构。模型每一轮都只做一次局部决策,长任务靠外部循环串起来。
Tool、MCP、Skill 的边界
这几个概念容易混在一起:
- Tool:具体可调用能力,例如读文件、查网页、跑命令。
- MCP:一种把外部工具、资源和协议暴露给模型应用的标准接口。
- Skill:写给 Agent 的操作手册,告诉它在某类任务中如何组织步骤。
Tool 偏执行,MCP 偏连接协议,Skill 偏行为指导。真正的 Agent 系统往往三者都会用。
为什么工具调用仍然会失败
常见失败点有:
- 工具描述太模糊,模型不知道何时调用。
- 参数结构复杂,模型填错字段。
- 工具返回太长,关键结果被上下文淹没。
- 外部系统状态变化,例如网页改版、接口限流、文件不存在。
- 权限边界不清,模型提出了不该执行的动作。
这些问题不能只靠“换更强模型”解决,需要靠接口设计、结果压缩、日志、重试、沙箱和人工确认来兜底。
设计工具调用时的实践原则
- 工具粒度要清楚:一个工具只解决一个边界明确的问题。
- 参数尽量结构化:不要让模型在长字符串里塞复杂协议。
- 返回结果要短:只返回下一步决策需要的信息。
- 高风险动作要确认:删除、付款、发信、改生产配置都应该有人工确认。
- 失败要可见:错误码、stderr、日志摘要要进入上下文。
小结
工具调用让模型从“生成答案”进入“参与流程”。它的核心不是神秘能力,而是一个工程闭环:模型负责判断和组织,应用层负责执行和约束,外部反馈再进入下一轮推理。
真正值得关注的是闭环质量:工具说明是否清楚、执行是否可靠、结果是否可压缩、权限是否收紧、失败是否能被发现。做好这些,模型才更像一个可用的工程助手。