Files
aiagent/工具调用可视化实现总结.md
2026-03-06 22:31:41 +08:00

302 lines
7.9 KiB
Markdown
Raw Permalink 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.
# 工具调用可视化实现总结
## ✅ 完成状态
**任务**: 工具调用可视化
**状态**: ✅ 已完成
**完成时间**: 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
**状态**: 已完成 ✅