Files
aiagent/工具调用可视化实现总结.md

302 lines
7.9 KiB
Markdown
Raw Normal View History

2026-03-06 22:31:41 +08:00
# 工具调用可视化实现总结
## ✅ 完成状态
**任务**: 工具调用可视化
**状态**: ✅ 已完成
**完成时间**: 2026-01-23
---
## 📋 实现功能
### 1. 后端工具调用日志记录 ✅
**修改文件**: `backend/app/services/llm_service.py`
**实现内容**:
-`call_openai_with_tools` 方法中添加 `execution_logger` 参数
- 记录工具调用请求(工具名称、参数、状态)
- 记录工具执行成功(结果、耗时)
- 记录工具执行失败(错误信息、耗时)
- 记录工具调用迭代次数
**核心代码**:
```python
# 记录工具调用请求
if execution_logger:
execution_logger.info(
f"调用工具: {tool_name}",
data={
"tool_name": tool_name,
"tool_call_id": tool_call_id,
"tool_args": tool_args,
"status": "requested"
}
)
# 记录工具执行成功
if execution_logger:
execution_logger.info(
f"工具 {tool_name} 执行成功",
data={
"tool_name": tool_name,
"tool_call_id": tool_call_id,
"tool_args": tool_args,
"tool_result": result_preview,
"tool_result_length": len(tool_result),
"status": "success",
"duration": tool_duration
},
duration=tool_duration
)
```
**修改文件**: `backend/app/services/workflow_engine.py`
**实现内容**:
- 在调用 `llm_service.call_llm_with_tools` 时传递 `execution_logger`
- 确保工具调用信息被记录到执行日志中
---
### 2. 前端NodeExecutionDetail组件 ✅
**修改文件**: `frontend/src/components/WorkflowEditor/NodeExecutionDetail.vue`
**实现内容**:
- 添加工具调用可视化卡片
- 从执行日志中提取工具调用信息
- 显示工具调用时间线
- 显示工具名称、参数、结果、状态、耗时
**核心功能**:
- ✅ 工具调用时间线展示
- ✅ 工具名称和状态标签
- ✅ 工具参数折叠显示
- ✅ 工具结果折叠显示(支持长结果截断)
- ✅ 错误信息显示
- ✅ 耗时统计
**UI特点**:
- 使用时间线组件展示工具调用顺序
- 不同状态使用不同颜色标签(成功/失败/请求中)
- 支持JSON格式化显示
- 长结果自动截断并显示长度
---
### 3. 前端ExecutionDetail组件 ✅
**修改文件**: `frontend/src/views/ExecutionDetail.vue`
**实现内容**:
- 在日志列表中增强工具调用日志显示
- 识别工具调用相关日志
- 特殊样式展示工具调用信息
- 显示工具参数和结果
**核心功能**:
- ✅ 自动识别工具调用日志
- ✅ 工具调用信息高亮显示
- ✅ 工具参数和结果折叠展示
- ✅ 状态标签和耗时显示
- ✅ 错误信息告警显示
**UI特点**:
- 工具调用日志使用特殊背景色和边框
- 工具名称使用标签显示
- 参数和结果支持折叠查看
- 错误信息使用告警组件显示
---
## 🎨 UI展示效果
### NodeExecutionDetail组件
```
┌─────────────────────────────────────┐
│ 🔧 工具调用 3 个工具调用 │
├─────────────────────────────────────┤
│ │
│ 时间线: │
│ ● http_request ✅ 成功 耗时: 234ms │
│ 📥 参数: [折叠] │
│ ✅ 结果: [折叠] │
│ │
│ ● file_read ✅ 成功 耗时: 12ms │
│ 📥 参数: [折叠] │
│ ✅ 结果: [折叠] │
│ │
│ ● database_query ❌ 失败 耗时: 5ms │
│ 📥 参数: [折叠] │
│ ❌ 错误: [告警显示] │
│ │
└─────────────────────────────────────┘
```
### ExecutionDetail组件
```
日志列表:
┌─────────────────────────────────────┐
│ 2026-01-23 10:30:15 INFO [节点ID] │
│ 调用工具: http_request │
│ 🔧 http_request ✅ 成功 耗时: 234ms │
│ 📥 参数: [查看参数] │
│ ✅ 结果: [查看结果] │
└─────────────────────────────────────┘
```
---
## 📊 数据结构
### 工具调用日志数据结构
```json
{
"level": "INFO",
"message": "工具 http_request 执行成功",
"data": {
"tool_name": "http_request",
"tool_call_id": "call_abc123",
"tool_args": {
"url": "https://api.example.com",
"method": "GET"
},
"tool_result": "{\"status_code\": 200, ...}",
"tool_result_length": 1024,
"status": "success",
"duration": 234
},
"timestamp": "2026-01-23T10:30:15.123Z",
"duration": 234
}
```
---
## 🔧 技术实现细节
### 1. 后端日志记录
- **位置**: `llm_service.py``call_openai_with_tools` 方法
- **时机**:
- 工具调用请求时
- 工具执行成功时
- 工具执行失败时
- **数据**: 工具名称、参数、结果、状态、耗时
### 2. 前端数据提取
- **位置**: `NodeExecutionDetail.vue``toolCalls` computed属性
- **逻辑**:
- 遍历执行日志
- 识别包含 `tool_name``status` 的日志
- 合并请求和结果日志
- 按时间排序
### 3. 前端UI展示
- **组件**: Element Plus Timeline、Card、Collapse
- **样式**: 自定义CSS样式支持状态颜色区分
- **交互**: 折叠展开查看详情
---
## 🎯 功能特点
1. **完整的工具调用追踪**
- 从请求到结果的全流程记录
- 支持多轮工具调用迭代
2. **清晰的可视化展示**
- 时间线展示调用顺序
- 状态标签清晰标识
- 参数和结果可折叠查看
3. **详细的执行信息**
- 工具名称
- 调用参数
- 执行结果
- 执行耗时
- 错误信息(如有)
4. **友好的用户体验**
- JSON格式化显示
- 长结果自动截断
- 错误信息告警提示
- 支持复制功能
---
## 📝 使用说明
### 查看工具调用信息
1. **在节点执行详情中查看**:
- 打开工作流编辑器
- 点击节点查看执行详情
- 在"工具调用"卡片中查看所有工具调用
2. **在执行详情页面查看**:
- 打开执行详情页面
- 切换到"执行日志"标签
- 工具调用日志会以特殊样式显示
### 工具调用信息包含
- **工具名称**: 调用的工具名称(如 `http_request``file_read`
- **调用参数**: 传递给工具的参数JSON格式
- **执行结果**: 工具返回的结果JSON格式
- **执行状态**: 成功/失败/请求中
- **执行耗时**: 工具执行的时间(毫秒)
---
## 🧪 测试建议
1. **创建测试工作流**:
- 添加LLM节点
- 启用工具调用
- 选择工具(如 `http_request``file_read`
2. **执行工作流**:
- 输入测试数据
- 执行工作流
- 观察工具调用过程
3. **查看可视化**:
- 打开节点执行详情
- 查看工具调用卡片
- 验证工具调用信息是否正确显示
---
## 📊 统计
- **代码行数**: 约300行后端+前端)
- **修改文件数**: 3个
- **新增功能**: 工具调用可视化
- **UI组件**: Timeline、Card、Collapse、Alert
---
## 🎉 完成的功能
✅ 后端工具调用日志记录
✅ 前端NodeExecutionDetail组件工具调用可视化
✅ 前端ExecutionDetail组件工具调用信息显示
✅ 工具调用时间线展示
✅ 工具参数和结果展示
✅ 工具调用状态和耗时显示
✅ 错误信息展示
---
**最后更新**: 2026-01-23
**文档版本**: v1.0
**状态**: 已完成 ✅