在 Agent 系统 中,Tool(工具) 是用于扩展 Agent 能力的关键组件,使其能够执行特定任务,如调用 API、访问数据库、进行计算、检索信息等。
本文以cline源代码分析, Tool 的设计与实现的详细解析:
1. Tool 的设计理念
在 Agent 系统中,Tool 主要用于:
- 增强能力:执行 LLM 本身无法直接完成的任务,如访问数据库、执行代码、爬取网页等。
- 提高效率:减少 LLM 直接推理的成本,通过 Tool 快速获得准确答案。
- 与外部系统交互:通过 API、数据库或计算引擎,与现实世界的系统对接。
Cline 实现了一个基于 XML 风格标签的工具调用系统,允许 AI 助手通过结构化的方式与用户的开发环境进行交互。这个系统设计得灵活且强大,同时通过参数验证和用户确认机制确保了操作的安全性。
2 工具名称定义
- 在
src/core/assistant-message/index.ts中定义了toolUseNames数组,包含所有可用工具名称
这些工具名称包括:execute_command, read_file, write_to_file, replace_in_file, search_files, list_files等, 使用TypeScript的类型系统将数组转换为联合类型ToolUseName
3 工具参数定义
同样在index.ts中定义了toolParamNames数组,包含所有可能的参数名称
参数包括:command, path, content, diff, regex等
同样转换为联合类型ToolParamName
4 工具使用接口
- ToolUse接口定义了工具使用的结构
- 包含字段:type, name, params和partial
- params是一个部分记录,允许使用部分或全部可能的参数
5 工具调用格式
工具调用使用 XML 风格的标签格式:
```xml
<tool_name>
<parameter1_name>value1</parameter1_name>
<parameter2_name>value2</parameter2_name>
</tool_name>
```
tool 调用流程
6 工具调用流程
1. **初始化阶段**
- 用户通过界面输入任务
- Webview 将任务消息发送给 ClineProvider
- ClineProvider 创建/获取 Cline 实例
2. **AI 请求阶段**
- Cline 向 AI 服务发送任务请求
- AI 服务返回包含工具调用的响应
3. **工具解析阶段**
- Cline 使用 ToolParser 解析 AI 响应
- 解析过程包括:
- parseAIResponse:解析整体响应
- parseToolCalls:解析工具调用
- validateToolInput:验证工具输入参数
4. **工具执行循环**
- 对每个工具调用:
1. 检查是否需要用户确认
2. 根据工具类型执行相应操作
3. 处理执行结果