178 lines
4.9 KiB
Markdown
178 lines
4.9 KiB
Markdown
# 工具调用功能实施完成总结
|
||
|
||
## ✅ 已完成的工作
|
||
|
||
### 后端实现(100%完成)
|
||
|
||
1. **工具定义模型** (`backend/app/models/tool.py`)
|
||
- ✅ 完整的工具数据模型
|
||
- ✅ 支持工具分类、函数定义、实现类型等
|
||
|
||
2. **工具注册表** (`backend/app/services/tool_registry.py`)
|
||
- ✅ 管理所有可用工具
|
||
- ✅ 支持注册内置工具和从数据库加载
|
||
|
||
3. **内置工具实现** (`backend/app/services/builtin_tools.py`)
|
||
- ✅ `http_request`: HTTP请求工具
|
||
- ✅ `file_read`: 文件读取工具
|
||
- ✅ 完整的工具定义(OpenAI Function格式)
|
||
|
||
4. **LLM服务扩展** (`backend/app/services/llm_service.py`)
|
||
- ✅ `call_openai_with_tools`: 支持工具调用的OpenAI调用
|
||
- ✅ `call_deepseek_with_tools`: 支持工具调用的DeepSeek调用
|
||
- ✅ `call_llm_with_tools`: 通用工具调用接口
|
||
- ✅ `_execute_tool`: 工具执行方法
|
||
- ✅ 支持多轮工具调用循环(最多5次迭代)
|
||
|
||
5. **工作流引擎集成** (`backend/app/services/workflow_engine.py`)
|
||
- ✅ LLM节点执行时检查工具配置
|
||
- ✅ 自动加载工具定义并传递给LLM服务
|
||
|
||
6. **工具管理API** (`backend/app/api/tools.py`)
|
||
- ✅ `GET /api/v1/tools` - 获取工具列表
|
||
- ✅ `GET /api/v1/tools/builtin` - 获取内置工具列表
|
||
- ✅ `GET /api/v1/tools/{tool_id}` - 获取工具详情
|
||
- ✅ `POST /api/v1/tools` - 创建工具
|
||
- ✅ `PUT /api/v1/tools/{tool_id}` - 更新工具
|
||
- ✅ `DELETE /api/v1/tools/{tool_id}` - 删除工具
|
||
- ✅ 已注册到main.py
|
||
|
||
7. **初始化脚本** (`backend/scripts/init_builtin_tools.py`)
|
||
- ✅ 已执行成功,创建了2个内置工具
|
||
|
||
8. **数据库迁移** (`backend/alembic/versions/004_add_tools_table.py`)
|
||
- ✅ 创建tools表的迁移文件
|
||
|
||
### 前端实现(100%完成)
|
||
|
||
1. **工具配置界面** (`frontend/src/components/WorkflowEditor/WorkflowEditor.vue`)
|
||
- ✅ 在LLM节点配置面板中添加"工具"标签页
|
||
- ✅ "启用工具调用"开关
|
||
- ✅ 工具选择器(多选,支持筛选)
|
||
- ✅ 工具分组显示(内置工具/自定义工具)
|
||
- ✅ 显示选中工具的详细信息(描述、参数定义)
|
||
- ✅ 工具移除功能
|
||
- ✅ 自动加载工具列表
|
||
|
||
2. **默认配置**
|
||
- ✅ LLM节点创建时自动初始化工具配置
|
||
- ✅ `enable_tools: false`, `tools: []`
|
||
|
||
## 📊 功能特性
|
||
|
||
### 1. 工具调用流程
|
||
|
||
```
|
||
用户输入 → LLM节点(启用工具) → LLM API(带tools参数)
|
||
↓
|
||
LLM返回tool_call → 工具执行器 → 执行工具
|
||
↓
|
||
工具结果 → 返回LLM → 生成最终回复
|
||
```
|
||
|
||
### 2. 支持的工具
|
||
|
||
**内置工具**:
|
||
- `http_request`: 发送HTTP请求(GET/POST/PUT/DELETE)
|
||
- `file_read`: 读取文件内容(限制在项目目录内)
|
||
|
||
**自定义工具**:
|
||
- 支持通过API创建自定义工具
|
||
- 支持多种实现类型(builtin/http/workflow/code)
|
||
|
||
### 3. 安全特性
|
||
|
||
- 文件读取限制在项目目录内
|
||
- 工具参数验证
|
||
- 工具执行超时(30秒)
|
||
- 最大工具调用迭代次数(5次)
|
||
|
||
## 🎯 使用方法
|
||
|
||
### 1. 在LLM节点中启用工具调用
|
||
|
||
1. 选择LLM节点
|
||
2. 打开"工具"标签页
|
||
3. 启用"启用工具调用"开关
|
||
4. 选择需要的工具(如:`http_request`, `file_read`)
|
||
5. 保存配置
|
||
|
||
### 2. 测试工具调用
|
||
|
||
创建一个简单的Agent:
|
||
- 开始节点
|
||
- LLM节点(启用工具调用,选择`http_request`工具)
|
||
- 结束节点
|
||
|
||
测试输入:`"查询 https://api.github.com/users/octocat 的信息"`
|
||
|
||
LLM应该会:
|
||
1. 识别需要调用工具
|
||
2. 调用 `http_request` 工具获取GitHub API数据
|
||
3. 基于获取的数据生成回复
|
||
|
||
## 📝 配置示例
|
||
|
||
### LLM节点配置(JSON格式)
|
||
|
||
```json
|
||
{
|
||
"id": "llm-1",
|
||
"type": "llm",
|
||
"data": {
|
||
"label": "智能助手",
|
||
"provider": "openai",
|
||
"model": "gpt-4",
|
||
"prompt": "请帮助用户解决问题,可以使用工具获取信息。",
|
||
"enable_tools": true,
|
||
"tools": ["http_request", "file_read"]
|
||
}
|
||
}
|
||
```
|
||
|
||
## 🔧 API使用示例
|
||
|
||
### 获取工具列表
|
||
|
||
```bash
|
||
curl http://localhost:8037/api/v1/tools
|
||
```
|
||
|
||
### 获取内置工具
|
||
|
||
```bash
|
||
curl http://localhost:8037/api/v1/tools/builtin
|
||
```
|
||
|
||
## ⚠️ 注意事项
|
||
|
||
1. **模型支持**
|
||
- 当前支持OpenAI和DeepSeek(兼容OpenAI API格式)
|
||
- 需要模型支持function calling功能
|
||
- 推荐使用:`gpt-4`, `gpt-3.5-turbo`, `deepseek-chat`
|
||
|
||
2. **工具调用限制**
|
||
- 最大迭代次数:5次
|
||
- 工具执行超时:30秒
|
||
- 如果达到最大迭代次数,会返回最后一次的结果
|
||
|
||
3. **安全考虑**
|
||
- 文件读取限制在项目目录内
|
||
- HTTP工具没有域名限制(生产环境建议添加)
|
||
- 工具参数需要验证(当前为基本验证)
|
||
|
||
## 🎉 完成状态
|
||
|
||
- ✅ 后端核心功能:100%
|
||
- ✅ API接口:100%
|
||
- ✅ 前端界面:100%
|
||
- ✅ 内置工具:100%
|
||
- ✅ 文档:100%
|
||
|
||
**工具调用功能已完全实施完成!** 🎊
|
||
|
||
---
|
||
|
||
**完成时间**: 2026-01-23
|
||
**实施状态**: ✅ 全部完成
|