工具调用可视化

📎 引用文件

本文引用的文件 - agent/cli/ui/rail.py - agent/cli/components/tool_event.py - frontend/src/pages/agentToolTimeline.ts - frontend/src/components/chat/ToolProgressIndicator.tsx - frontend/src/types/agent.ts - agent/src/openbb_bridge/event_mapper.py - agent/tests/test_tool_timeout.py - agent/tests/test_mcp_client_adapter.py

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考量
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本文件面向 Vibe-Trading 研究页面的“工具调用可视化”能力,系统性说明: - 工具调用时间线的渲染逻辑、进度显示与状态更新机制 - 思维过程(思考/活动)的可视化展示、活动线条的动态效果 - Swarm 团队状态的实时反馈接入点 - 工具调用的生命周期管理、错误处理与超时控制 - 性能优化措施(批量更新、防抖、内存管理) - 自定义工具调用的集成指南

项目结构

该功能横跨后端事件流与前端渲染层: - 后端 CLI/Web 事件流:通过 rail 组件将 tool_call、tool_progress、tool_heartbeat、tool_result、compact 等事件转换为步骤行并刷新显示。 - 前端时间线:将持久化的工具调用记录聚合为“活动对象”,并以可展开的行展示进度、ETA、耗时与摘要。 - 类型契约:前端 ToolCallEntry 定义工具调用条目结构,包含 id、tool、arguments、status、preview、elapsed_ms/s、progress、timestamp。 - 事件映射:OpenBB 桥接器将后端事件映射为推理步骤消息,便于在聊天中呈现工具结果与上下文压缩提示。 - 超时与错误:测试覆盖工具超时、心跳终止、写工具超时告警但不提前失败等行为。

graph TB subgraph "后端事件流" RAIL["rail.py<br/>事件分发与步骤行"] EVTMAP["event_mapper.py<br/>事件→推理消息"] end subgraph "前端渲染" TL["agentToolTimeline.ts<br/>构建活动对象"] TPI["ToolProgressIndicator.tsx<br/>行渲染/进度/ETA"] TYPES["types/agent.ts<br/>ToolCallEntry 类型"] end RAIL --> |SSE/回调| TPI TPI --> TYPES TL --> TPI EVTMAP --> |推理消息| TPI

图表来源 - agent/cli/ui/rail.py:345-416 - agent/src/openbb_bridge/event_mapper.py:83-114 - frontend/src/pages/agentToolTimeline.ts:28-71 - frontend/src/components/chat/ToolProgressIndicator.tsx:219-301 - frontend/src/types/agent.ts:60-81

章节来源 - agent/cli/ui/rail.py:345-416 - frontend/src/pages/agentToolTimeline.ts:28-71 - frontend/src/components/chat/ToolProgressIndicator.tsx:219-301 - frontend/src/types/agent.ts:60-81 - agent/src/openbb_bridge/event_mapper.py:83-114

核心组件

章节来源 - agent/cli/ui/rail.py:345-416 - frontend/src/pages/agentToolTimeline.ts:28-71 - frontend/src/components/chat/ToolProgressIndicator.tsx:219-301 - agent/src/openbb_bridge/event_mapper.py:83-114 - frontend/src/types/agent.ts:60-81

架构总览

工具调用可视化由“后端事件流 + 前端渲染”构成闭环: - 后端产生事件:tool_call(开始)、tool_progress(阶段/进度/消息)、tool_heartbeat(保活)、tool_result(完成/错误)、compact(上下文压缩)。 - 前端消费事件:根据 ToolCallEntry 累积步骤,合并同类项,计算 ETA,渲染行级进度与耗时。 - 活动对象:每次尝试生成一个 activity,包含 steps、startedAt、endedAt、verb 等,支持历史回放与重连恢复。 - 推理消息:将关键事件映射为 reasoning_step,便于在聊天中统一呈现。

sequenceDiagram participant Agent as "AgentLoop/工具执行" participant Rail as "rail.py" participant FE as "ToolProgressIndicator.tsx" participant Map as "event_mapper.py" participant Store as "agentToolTimeline.ts" Agent-->>Rail : tool_call(tool,args) Rail-->>FE : 新增步骤行(标题/参数/初始详情) Agent-->>Rail : tool_progress(stage,current,total,message) Rail-->>FE : 追加进度片段, 节流刷新 Agent-->>Rail : tool_heartbeat() Rail-->>FE : 激活当前步骤, 刷新 Agent-->>Rail : tool_result(status,elapsed_ms,preview) Rail-->>FE : 设置状态/时长/结果摘要 Agent-->>Map : tool_result/compact/stream_reset Map-->>FE : 推理步骤消息(用于聊天) Store-->>FE : 构建活动对象(activity), 供历史回放

图表来源 - agent/cli/ui/rail.py:345-416 - agent/src/openbb_bridge/event_mapper.py:83-114 - frontend/src/pages/agentToolTimeline.ts:28-71 - frontend/src/components/chat/ToolProgressIndicator.tsx:219-301

详细组件分析

事件驱动的步骤行(CLI/Rail)

flowchart TD Start(["收到事件"]) --> Type{"事件类型?"} Type --> |tool_call| NewStep["创建步骤行<br/>设置标题/参数/初始详情"] Type --> |tool_progress| UpdateProg["解析stage/current/total/message<br/>追加片段并节流刷新"] Type --> |tool_heartbeat| Active["定位活跃步骤并刷新"] Type --> |tool_result| Finish["设置状态/时长/结果摘要"] Type --> |compact| Compact["插入上下文压缩步骤"] NewStep --> End(["结束"]) UpdateProg --> End Active --> End Finish --> End Compact --> End

图表来源 - agent/cli/ui/rail.py:345-416

章节来源 - agent/cli/ui/rail.py:345-416

前端活动对象与时间线(agentToolTimeline.ts)

classDiagram class ToolTimelineEntry { +string id +string call_id +string tool +Record arguments +string status +string preview +number elapsed_ms +number timestamp } class AgentActivity { +string attemptId +string state +string verb +steps[] +number startedAt +number endedAt } class StoredAgentMessage { +string id +string type +string content +meta +number timestamp } ToolTimelineEntry --> AgentActivity : "聚合为 steps" AgentActivity --> StoredAgentMessage : "封装为 activity 行"

图表来源 - frontend/src/pages/agentToolTimeline.ts:8-71 - frontend/src/types/agent.ts:60-81

章节来源 - frontend/src/pages/agentToolTimeline.ts:28-71 - frontend/src/types/agent.ts:60-81

进度指示器(ToolProgressIndicator.tsx)

flowchart TD A["收到 toolCalls"] --> B{"是否有运行中项?"} B --> |是| C["计算每个运行项的 ETA<br/>基于 elapsed_s 与 progress"] B --> |否| D["仅渲染已完成项"] C --> E["合并连续成功同工具调用为 ×N 行"] D --> E E --> F["渲染图标/进度环/进度条/耗时/参数摘要"] F --> G["输出可访问性标签"]

图表来源 - frontend/src/components/chat/ToolProgressIndicator.tsx:15-78 - frontend/src/components/chat/ToolProgressIndicator.tsx:122-211 - frontend/src/components/chat/ToolProgressIndicator.tsx:219-301

章节来源 - frontend/src/components/chat/ToolProgressIndicator.tsx:15-78 - frontend/src/components/chat/ToolProgressIndicator.tsx:122-211 - frontend/src/components/chat/ToolProgressIndicator.tsx:219-301

事件到推理消息映射(event_mapper.py)

章节来源 - agent/src/openbb_bridge/event_mapper.py:83-114

思维过程与活动线条

章节来源 - frontend/src/pages/agentToolTimeline.ts:28-71 - frontend/src/components/chat/ToolProgressIndicator.tsx:219-301 - agent/cli/ui/rail.py:345-416

Swarm 团队状态实时反馈

[本节为概念性概述,不直接分析具体文件]

工具调用生命周期管理

章节来源 - agent/cli/ui/rail.py:345-416 - frontend/src/pages/agentToolTimeline.ts:28-71

错误处理与超时控制

章节来源 - agent/tests/test_tool_timeout.py:42-99 - agent/tests/test_mcp_client_adapter.py:216-247

自定义工具调用集成指南

章节来源 - agent/cli/ui/rail.py:345-416 - frontend/src/components/chat/ToolProgressIndicator.tsx:219-301 - frontend/src/pages/agentToolTimeline.ts:28-71

依赖关系分析

graph LR RAIL["rail.py"] --> TPI["ToolProgressIndicator.tsx"] TPI --> TYPES["types/agent.ts"] MAP["event_mapper.py"] --> TPI TL["agentToolTimeline.ts"] --> TPI

图表来源 - agent/cli/ui/rail.py:345-416 - frontend/src/components/chat/ToolProgressIndicator.tsx:219-301 - frontend/src/types/agent.ts:60-81 - agent/src/openbb_bridge/event_mapper.py:83-114 - frontend/src/pages/agentToolTimeline.ts:28-71

章节来源 - agent/cli/ui/rail.py:345-416 - frontend/src/components/chat/ToolProgressIndicator.tsx:219-301 - frontend/src/types/agent.ts:60-81 - agent/src/openbb_bridge/event_mapper.py:83-114 - frontend/src/pages/agentToolTimeline.ts:28-71

性能考量

[本节提供通用指导,不直接分析具体文件]

故障排查指南

章节来源 - agent/tests/test_tool_timeout.py:42-99 - agent/tests/test_mcp_client_adapter.py:216-247 - frontend/src/pages/agentToolTimeline.ts:28-71

结论

Vibe-Trading 的工具调用可视化通过“后端事件流 + 前端渲染”的清晰分层,实现了: - 高保真的时间线展示:步骤行、进度环/条形图、ETA、耗时与参数摘要。 - 健壮的生命周期管理:开始、进行中、完成、压缩、错误与超时均有明确处理。 - 高性能渲染:节流、合并、截断与内存限制,保障流畅体验。 - 可扩展集成:遵循事件契约即可接入自定义工具,并在聊天与时间线中统一呈现。

[本节为总结性内容,不直接分析具体文件]

附录

章节来源 - agent/cli/components/tool_event.py:150-215 - frontend/src/types/agent.ts:60-81