Agent开发工具01实战指南
如果你希望大模型不仅能回答你的问题,还能读取本地的文件,就需要为它绑定上对应的工具。在 `langchain` 中,绑定的方式很简单——直接调用 `model.bindTools` 即可。
接下来,我们来探讨如何定义工具。
## 定义工具
在定义工具时,首先要弄清楚它的“使用说明书”是什么样的。工具本质上是一个函数,既然是函数,就必须接收参数,也就是有入参。因此,你需要明确三件事:名称、描述、入参。
```ja vascript
const obj = {
// 工具的名称
name: 'read_file',
// 对这个工具的人类语言描述
description: '对这个工具的人类语言描述',
// 工具入参
schema: z.object({
filePath: z.string().describe('要读取的文件路径'),
}),
}
```
编写完说明书后,接下来就是工具本身——也就是那个函数。逻辑非常简单:传入文件路径,读取内容并返回。
```ja vascript
// 很简单,就是一个函数,函数中的逻辑如下,实现了读取文件内容并返回
const fun = async ({ filePath }) => {
const content = await fs.readFile(filePath, 'utf-8');
console.log(` [工具调用] read_file("${filePath}") - 成功读取${content.length}字节`);
return `文件内容:\n${content}`;
}
```
最后一步,用 langchain 的 `tool` 函数把上面这两个参数传进去,工具就算定义好了。
```ja vascript
tool(fun, obj)
```
## 调用工具
在前面绑定好工具之后,我们调用了模型的 `invoke` 函数。但请注意,模型并不会直接去执行工具,而是返回当前用户问题可以使用的工具列表。
- 用户问:“你好”。模型返回一个工具空数组——它自己判断,这次请求不需要调用任何工具。
- 用户问:“读取某个文件”。大模型会检索自身,看是否有合适的工具。如果有,就在返回数据中把可用的工具带出来。
数组中的每一个工具都包含:工具的实际入参(模型通过第一次用户的提问识别到的)、工具的唯一 id(每次调用都会随机生成一个新的)、工具的名称。
当模型返回了工具调用数组,我们需要遍历这个数组,依次调用每一个工具函数。注意,调用工具不是使用 `模型的 invoke`,而是 `工具的 invoke`。
```ja vascript
// invoke的参数就是工具的入参,这个入参可以从模型返回的数组中获取
const result = await tool.invoke(toolCall.args);
```
拿到工具的结果之后,用 langchain 的 `new ToolMessage` 来新建一条消息:
```ja vascript
new ToolMessage({
content: toolResults[index],
tool_call_id: toolCall.id,
})
```
最后,将所有消息再次发送给模型,模型输出最终回答。
### Q&A
**Q1:为什么需要 `new ToolMessage`,而不是将工具返回结果直接拼接到前面用户的提问后面?**
**A1:**
(1)像 GPT-4、Claude 这类支持 function calling 的模型,在训练过程中大量接触的对话格式就是这种结构化模式:
```
User → Assistant(tool_calls) → ToolMessage → Assistant(回复)
```
也就是说,模型在训练时学会了:收到带有 tool_call_id 的 ToolMessage = 这是我刚才调用的工具返回的结果,需要借助这些内容来作答。如果改用字符串拼接,将工具结果塞进 HumanMessage 或普通文本中,这种模式在训练数据里非常罕见,模型就没有明确的“如何使用”的经验。
(2)角色与用途清晰
在结构化消息体系里,每一条消息的语义都非常明确:
| 消息类型 | 模型的理解 |
| --- | --- |
| HumanMessage | 用户说了什么、想实现什么 |
| AIMessage + tool_calls | 我决定调用这些工具 |
| ToolMessage | 这些工具返回的结果,是对我上一轮决策的反馈 |
| AIMessage | 基于工具结果给出最终回答 |
模型会将 ToolMessage 视为“我主动调用的工具的结果”,而不是“用户新说的话”。如果采用字符串拼接,工具结果很容易被当作普通上下文或用户输入,导致模型不清楚这是自己刚才调用的工具的结果,从而处理方式产生偏差。
(3)注意力与因果关系
在多轮对话中,模型对不同消息类型的处理权重各不相同。ToolMessage 在训练阶段被视作“对上一次 tool_calls 的回应”,因此模型会更自然地把注意力集中在:用这些结果来回答用户最初的问题。这样能够维持清晰的因果链条,避免干扰。
```
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
AI助力职场新人:劳动合同书撰写实用指南与范文
适合需求: 劳动合同书撰写全攻略 说白了,劳动合同书就是职场人的“入场券”——它不只是一纸法律保障,更是开启新工作的通行证。但不少刚入职场的朋友,一提到起草劳动合同书就头大,感觉像在解读高深莫测的法律条文,从哪儿下手、条款怎么拟定,心里完全没底。其实,掌握劳动合同书撰写要点,就能轻松避坑。 范文 D
Retouch4me专业级AI修图插件,简化照片后期提升工作效率
Retouch4me 专业级 AI 修图插件产品介绍许多摄影师对后期修图又爱又恨——不是不愿精修,而是耗时巨大。Retouch4me 的出现,有效缩短了从按下快门到交付成片的周期。这套基于人工智能的修图工具集,专为专业摄影师及图像后期工作者设计,既可作为 Photoshop 插件使用,也能独立运行,
AIVO与传统GEO核心区别:战术适配到全域认知治理
摘要 去年大家还在聊GEO,今年风向已经变了。在大语言模型主导搜索与交互的时代,AIVO正在接棒GEO,成为品牌在AI世界里的新标准。简单说,GEO是解决“内容被AI搜到”的问题,属于战术层面的适配;而AIVO升级到了“让品牌在AI认知中站稳脚跟”的战略治理。这篇文章会从技术原理、架构逻辑、核心能力
职场合同模板需求多 AI生成专业合同省时省力
适用需求场景: 合同,是职场中人人都会遇到的必备工具。无论是刚步入职场的新人,还是经验丰富的资深从业者,签署合同时面临的挑战其实大同小异——如何起草一份既符合法律规定又能充分保障自身权益的文书?撰写合同不仅需要具备基础的法律知识,还要小心规避各类条款陷阱,稍有不慎便可能埋下后续纠纷的隐患。尤其对于中
HeyLibby 电子书阅读与数字图书馆的快速上手指南
heyLibby是什么?AI销售助手核心解析 在销售行业中,大量宝贵时间往往耗费在“筛选潜在客户”与“反复沟通”上,尤其对于小团队和个体创业者而言,这类重复劳动尤为沉重。heyLibby正是为解决这一痛点而生——一款专注于销售自动化的AI助手,由深耕AI技术的团队打造,主要服务小型企业和个体经营者。
- 日榜
- 周榜
- 月榜
1
2
3
4
5
6
7
8
9
10
相关攻略
2015-03-10 11:25
2015-03-10 11:05
2021-08-04 13:30
2015-03-10 11:22
2015-03-10 12:39
2022-05-16 18:57
2025-05-23 13:43
2025-05-23 14:01
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程
热门话题

