Files
aiagent/工具调用实施总结.md
2026-01-23 09:49:45 +08:00

184 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 工具调用功能实施总结
## ✅ 已完成的工作
### 阶段1: 后端核心功能 ✅
#### 1.1 工具定义模型 ✅
- **文件**: `backend/app/models/tool.py`
- **功能**: 定义了工具数据模型,包括工具名称、描述、函数定义等
- **状态**: 已完成
#### 1.2 工具注册表 ✅
- **文件**: `backend/app/services/tool_registry.py`
- **功能**: 管理所有可用工具,支持注册内置工具和从数据库加载工具
- **状态**: 已完成
#### 1.3 内置工具实现 ✅
- **文件**: `backend/app/services/builtin_tools.py`
- **功能**: 实现了两个内置工具:
- `http_request`: HTTP请求工具
- `file_read`: 文件读取工具
- **状态**: 已完成
#### 1.4 LLM服务扩展 ✅
- **文件**: `backend/app/services/llm_service.py`
- **功能**:
- 添加了 `call_openai_with_tools` 方法
- 添加了 `call_deepseek_with_tools` 方法
- 添加了 `call_llm_with_tools` 通用方法
- 添加了 `_execute_tool` 工具执行方法
- 支持多轮工具调用循环
- **状态**: 已完成
#### 1.5 工作流引擎扩展 ✅
- **文件**: `backend/app/services/workflow_engine.py`
- **功能**: 在LLM节点执行时检查工具配置如果启用则调用工具调用接口
- **状态**: 已完成
### 阶段2: 数据库迁移 ✅
- **文件**: `backend/alembic/versions/004_add_tools_table.py`
- **功能**: 创建tools表的数据库迁移
- **状态**: 已完成(需要执行迁移)
### 阶段3: 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
### 阶段4: 初始化脚本 ✅
- **文件**: `backend/scripts/init_builtin_tools.py`
- **功能**: 初始化内置工具到数据库和注册表
- **状态**: 已完成并执行成功
## 📋 下一步工作
### 阶段5: 前端实现(待实施)
#### 5.1 LLM节点配置扩展
- 在LLM节点配置面板中添加"工具"标签页
- 添加"启用工具调用"开关
- 添加工具选择器(多选)
- 显示选中工具的详细信息
#### 5.2 工具调用可视化
- 在工作流执行时显示工具调用过程
- 显示工具名称、参数、执行结果
- 显示工具调用状态(成功/失败)
#### 5.3 工具管理界面(可选)
- 工具列表页面
- 工具创建/编辑页面
- 工具详情页面
## 🔧 使用说明
### 1. 执行数据库迁移
```bash
cd /home/renjianbo/aiagent/backend
alembic upgrade head
```
### 2. 初始化内置工具(已完成)
```bash
python3 backend/scripts/init_builtin_tools.py
```
### 3. 在LLM节点中启用工具调用
在LLM节点的配置中需要设置
```json
{
"enable_tools": true,
"tools": ["http_request", "file_read"]
}
```
### 4. 测试工具调用
创建一个简单的Agent包含
- 开始节点
- LLM节点启用工具调用
- 结束节点
测试输入:`"查询 https://api.github.com/users/octocat 的信息"`
LLM应该会
1. 识别需要调用工具
2. 调用 `http_request` 工具
3. 获取结果后生成回复
## 📊 当前状态
- ✅ 后端核心功能100% 完成
- ✅ 数据库迁移100% 完成
- ✅ API接口100% 完成
- ✅ 初始化脚本100% 完成
- ⏳ 前端实现0% 完成(待实施)
## 🎯 测试建议
1. **API测试**
```bash
# 获取工具列表
curl http://localhost:8037/api/v1/tools
# 获取内置工具
curl http://localhost:8037/api/v1/tools/builtin
```
2. **工作流测试**
- 创建一个包含LLM节点的Agent
- 在LLM节点配置中启用工具调用
- 选择 `http_request` 工具
- 测试执行
## ⚠️ 注意事项
1. **数据库迁移**
- 需要执行 `alembic upgrade head` 创建tools表
- 如果表已存在,迁移会失败(需要先检查)
2. **工具调用限制**
- 当前支持OpenAI和DeepSeek兼容OpenAI API
- 最大工具调用迭代次数5次
- 工具执行超时30秒HTTP工具
3. **安全考虑**
- 文件读取工具限制在项目目录内
- HTTP工具没有域名限制生产环境需要添加
- 工具参数需要验证(当前为基本验证)
## 📝 后续优化
1. **更多内置工具**
- 数据库查询工具
- 邮件发送工具
- 文件写入工具
2. **工具调用优化**
- 并行工具执行
- 工具结果缓存
- 工具调用日志
3. **前端增强**
- 工具调用可视化
- 工具参数配置界面
- 工具执行历史
---
**实施时间**: 2026-01-23
**实施状态**: 后端核心功能已完成,前端待实施