Agent 的工具是如何被大模型使用的
Agent 的工具是如何被大模型使用的一篇讲清“工具选择 - 工具调用 - 工具结果回传 - 再推理”的实战笔记一、前提先记住一个最重要的结论Agent 每次发给大模型的不只是用户问题还会带上历史消息和工具信息。也就是说模型看到的不是“单独一句话”而是当前用户在问什么前面聊过什么现在有哪些工具可以用每个工具怎么调用、参数是什么所以工具并不是模型自己“长出来”的能力而是 Agent 把工具说明和上下文一起喂给模型后模型再决定要不要用、怎么用。图 1Agent 与大模型的基本关系用户输入Agent大模型历史消息工具信息二、先把流程说透工具使用不是“一步到位”的它通常是一个循环用户发出任务。Agent 把历史消息和工具信息一起发给大模型。大模型判断要不要调用工具。如果要调用就输出一个工具调用请求。Agent 执行这个工具。工具结果再回传给大模型。大模型继续思考直到给出最终答案。这个过程看起来像模型在“亲自操作文件”实际上不是。真正执行readFile、writeFile的还是 Agent 侧的程序。图 2工具调用的完整闭环工具大模型Agent用户工具大模型Agent用户提出任务历史消息 工具信息 当前问题选择工具 / 生成工具调用执行工具返回结果把工具结果继续发回去最终回复三、工具信息到底长什么样工具信息可以理解成一份“说明书”。至少会包含这几类内容name工具名description工具用途parameters需要哪些参数required哪些参数必填例如{name:readFile,description:读取指定文件内容,parameters:{type:object,properties:{path:{type:string,description:文件路径}},required:[path]}}模型看到这份信息后才知道这个工具能干什么。它需要传什么参数。什么时候适合调用它。四、例子一只有readFile工具现在有一个场景Agent 只提供了readFile工具。用户要求读取a.txt。可能发生什么如果文件路径没问题流程就很简单用户说“帮我读a.txt”。Agent 把这个问题连同工具信息发给大模型。大模型发现可以用readFile。大模型发起工具调用readFile(patha.txt)。Agent 执行读取。Agent 把文件内容回传给大模型。大模型组织成自然语言回复给用户。如果读取报错比如a.txt不存在、路径写错、权限不足或者文件编码有问题就会出现报错。这时的关键点是报错不是模型自己“看见文件系统报错”而是 Agent 执行工具后把错误信息回传给模型模型再根据错误信息决定下一步这一步很重要因为它说明了大模型不是直接访问磁盘而是通过 Agent 提供的工具间接访问。图 3只提供readFile时的流程思考: 用 readFile读取 a.txt是否用户: 读取 a.txtAgent大模型readFile 工具成功?返回文件内容给 Agent返回报错信息给 Agent最终回复或继续追问五、例子二同时提供readFile和writeFile第二个场景更完整一点Agent 提供了readFile和writeFile。任务是读取a.txt的内容然后纯净地写入b.txt。这里的“纯净写入”可以理解为不额外加解释不夹带多余文本只把a.txt的内容写到b.txt这个场景里大模型怎么想大模型看到工具信息后会做一轮“任务分解”先读a.txt。拿到内容以后再写入b.txt。也就是说模型不是一次性把两个工具同时用完而是先完成前一步再决定下一步。这个流程为什么合理因为工具调用不是纯文本回答而是一个带状态的多轮执行过程。模型需要先知道读取结果是什么内容是否成功拿到要不要原样写入有没有格式转换需求六、标准版流程可以整理成下面这样Agent大模型思考: 读文件, 找工具 readFile调用 readFile 工具读取文件返回文件内容给 Agent继续思考: 读取后开读写流程调用 writeFile 工具把内容写入 b.txt写入成功七、为什么模型能“选对工具”原因不是模型真的认识你的代码仓库而是工具说明把能力边界讲清楚了。模型会根据这几个信号判断工具名字像不像我要的能力。工具描述是不是符合当前任务。参数结构能不能满足当前需求。上下文里有没有前置结果需要承接。比如readFile很明显适合“读取文件”writeFile很明显适合“写入文件”searchWeb很明显适合“查资料”所以工具描述写得越清楚模型越容易选对。八、为什么工具调用不是直接回答模型有两种常见输出方式直接回答用户。先发起工具调用再等工具结果回来后继续回答。当任务涉及外部世界时模型通常会优先走第二条路。例如读文件查数据库查天气调用支付接口发消息这些都不是纯语言推理能完成的事情必须靠工具。九、工具消息和普通消息的区别普通消息是对话内容工具消息是执行结果。可以简单理解为用户消息提出需求助手消息决定下一步工具消息告诉模型“刚才执行结果是什么”这样模型就能在“思考 - 执行 - 再思考”之间循环。十、实战总结把这件事说透其实就是一句话大模型不会自己操作文件系统Agent 会把工具信息发给模型模型决定调用哪个工具Agent 再负责真正执行。如果再展开一点就是历史消息让模型知道上下文工具信息让模型知道可用能力工具执行结果让模型知道下一步怎么走这就是 Agent 工具能够被大模型使用的完整逻辑。