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

7.9 KiB
Raw Blame History

工具调用可视化实现总结

完成状态

任务: 工具调用可视化
状态: 已完成
完成时间: 2026-01-23


📋 实现功能

1. 后端工具调用日志记录

修改文件: backend/app/services/llm_service.py

实现内容:

  • call_openai_with_tools 方法中添加 execution_logger 参数
  • 记录工具调用请求(工具名称、参数、状态)
  • 记录工具执行成功(结果、耗时)
  • 记录工具执行失败(错误信息、耗时)
  • 记录工具调用迭代次数

核心代码:

# 记录工具调用请求
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 │
│ 📥 参数: [查看参数]                   │
│ ✅ 结果: [查看结果]                   │
└─────────────────────────────────────┘

📊 数据结构

工具调用日志数据结构

{
  "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.pycall_openai_with_tools 方法
  • 时机:
    • 工具调用请求时
    • 工具执行成功时
    • 工具执行失败时
  • 数据: 工具名称、参数、结果、状态、耗时

2. 前端数据提取

  • 位置: NodeExecutionDetail.vuetoolCalls computed属性
  • 逻辑:
    • 遍历执行日志
    • 识别包含 tool_namestatus 的日志
    • 合并请求和结果日志
    • 按时间排序

3. 前端UI展示

  • 组件: Element Plus Timeline、Card、Collapse
  • 样式: 自定义CSS样式支持状态颜色区分
  • 交互: 折叠展开查看详情

🎯 功能特点

  1. 完整的工具调用追踪

    • 从请求到结果的全流程记录
    • 支持多轮工具调用迭代
  2. 清晰的可视化展示

    • 时间线展示调用顺序
    • 状态标签清晰标识
    • 参数和结果可折叠查看
  3. 详细的执行信息

    • 工具名称
    • 调用参数
    • 执行结果
    • 执行耗时
    • 错误信息(如有)
  4. 友好的用户体验

    • JSON格式化显示
    • 长结果自动截断
    • 错误信息告警提示
    • 支持复制功能

📝 使用说明

查看工具调用信息

  1. 在节点执行详情中查看:

    • 打开工作流编辑器
    • 点击节点查看执行详情
    • 在"工具调用"卡片中查看所有工具调用
  2. 在执行详情页面查看:

    • 打开执行详情页面
    • 切换到"执行日志"标签
    • 工具调用日志会以特殊样式显示

工具调用信息包含

  • 工具名称: 调用的工具名称(如 http_requestfile_read
  • 调用参数: 传递给工具的参数JSON格式
  • 执行结果: 工具返回的结果JSON格式
  • 执行状态: 成功/失败/请求中
  • 执行耗时: 工具执行的时间(毫秒)

🧪 测试建议

  1. 创建测试工作流:

    • 添加LLM节点
    • 启用工具调用
    • 选择工具(如 http_requestfile_read
  2. 执行工作流:

    • 输入测试数据
    • 执行工作流
    • 观察工具调用过程
  3. 查看可视化:

    • 打开节点执行详情
    • 查看工具调用卡片
    • 验证工具调用信息是否正确显示

📊 统计

  • 代码行数: 约300行后端+前端)
  • 修改文件数: 3个
  • 新增功能: 工具调用可视化
  • UI组件: Timeline、Card、Collapse、Alert

🎉 完成的功能

后端工具调用日志记录
前端NodeExecutionDetail组件工具调用可视化
前端ExecutionDetail组件工具调用信息显示
工具调用时间线展示
工具参数和结果展示
工具调用状态和耗时显示
错误信息展示


最后更新: 2026-01-23
文档版本: v1.0
状态: 已完成