活动跟踪系统

📎 引用文件

本文引用的文件 - agent.ts - ActivityLine.tsx - ThinkingTimeline.tsx - Agent.tsx - agent.ts(类型定义)

目录

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

简介

本文件为 Vibe-Trading 研究页面的“活动跟踪系统”提供完整技术文档。重点覆盖: - AgentActivity 状态机设计:thinking、working、responding、stopped、timeout、failed、done 等状态的触发与转换规则。 - ActivityVerb 类型映射机制:readingMarketData、writingStrategy、runningBacktest、validatingNumbers、working 的自动推导逻辑。 - 活动步骤追踪、时间戳管理、尝试ID关联。 - 活动状态更新的最佳实践与调试方法。

项目结构

活动跟踪系统由前端 Store、渲染组件与页面事件处理三部分构成: - Store(状态与业务逻辑):定义活动状态、动词、数据结构,以及工具调用到活动的映射与状态变更。 - 渲染组件:将活动状态与步骤以用户友好的方式展示,并维护计时器与交互。 - 页面事件处理:接收后端事件,识别活动、更新状态、归档历史消息。

graph TB subgraph "前端 Store" A["stores/agent.ts<br/>定义 ActivityState / ActivityVerb / AgentActivity<br/>deriveActivityVerb()"] end subgraph "渲染层" B["components/chat/ActivityLine.tsx<br/>状态图标/计时/展开详情"] C["components/chat/ThinkingTimeline.tsx<br/>兼容旧消息重建活动"] end subgraph "页面事件处理" D["pages/Agent.tsx<br/>identifyActivity()/归档 stopped/timeout"] end E["types/agent.ts<br/>ToolCallEntry / AgentMessage"] D --> A A --> B C --> B A --> E C --> E

图表来源 - agent.ts:6-29 - ActivityLine.tsx:25-37 - ThinkingTimeline.tsx:17-57 - Agent.tsx:650-677 - agent.ts(类型定义):60-81

章节来源 - agent.ts:6-29 - ActivityLine.tsx:25-37 - ThinkingTimeline.tsx:17-57 - Agent.tsx:650-677 - agent.ts(类型定义):60-81

核心组件

章节来源 - agent.ts:6-29 - agent.ts:31-44 - agent.ts:223-249 - agent.ts(类型定义):60-81

架构总览

活动从后端事件驱动,经页面事件处理器识别并更新 Store 中的 activity;Store 在工具调用时同步更新 steps 与 verb;渲染层基于 activity 展示状态、步骤与计时。

sequenceDiagram participant UI as "页面 Agent.tsx" participant Store as "Store agent.ts" participant Render as "ActivityLine/ThinkingTimeline" participant Types as "类型 ToolCallEntry" UI->>UI : identifyActivity(data, state) alt 首次或新尝试 UI->>Store : startActivity(attemptId, startedAt) else 已有 pending 尝试 UI->>Store : setActivityAttemptId(attemptId) end UI->>Store : setActivityState(state) Note over Store : 终态时设置 endedAt Store-->>Render : 订阅 activity 变化 Render->>Render : 计算 elapsed / 步骤数 / 动词文案 Render-->>UI : 显示状态图标、摘要、步骤列表

图表来源 - Agent.tsx:650-677 - agent.ts:223-249 - ActivityLine.tsx:111-134 - agent.ts(类型定义):60-81

详细组件分析

状态机设计与转换

stateDiagram-v2 [*] --> thinking : "startActivity()" thinking --> working : "addToolCall()/setActivityState('working')" thinking --> responding : "setActivityState('responding')" working --> responding : "setActivityState('responding')" responding --> working : "setActivityState('working')" working --> done : "setActivityState('done')" working --> failed : "setActivityState('failed')" responding --> done : "setActivityState('done')" responding --> failed : "setActivityState('failed')" thinking --> stopped : "用户停止/归档" thinking --> timeout : "超时归档" working --> stopped : "用户停止/归档" working --> timeout : "超时归档" responding --> stopped : "用户停止/归档" responding --> timeout : "超时归档" done --> [*] failed --> [*] stopped --> [*] timeout --> [*]

图表来源 - agent.ts:223-249 - Agent.tsx:982-1016

章节来源 - agent.ts:223-249 - Agent.tsx:982-1016

ActivityVerb 自动推导机制

flowchart TD Start(["收到工具调用"]) --> Normalize["规范化工具名(小写)"] Normalize --> CheckValidate{"是否匹配验证类?"} CheckValidate --> |是| V1["verb = validatingNumbers"] CheckValidate --> |否| CheckBacktest{"是否匹配回测类?"} CheckBacktest --> |是| V2["verb = runningBacktest"] CheckBacktest --> |否| CheckStrategy{"是否匹配策略写入类?"} CheckStrategy --> |是| V3["verb = writingStrategy"] CheckStrategy --> |否| CheckMarket{"是否匹配市场数据类?"} CheckMarket --> |是| V4["verb = readingMarketData"] CheckMarket --> |否| V5["verb = working"] V1 --> End(["返回动词"]) V2 --> End V3 --> End V4 --> End V5 --> End

图表来源 - agent.ts:31-44 - ThinkingTimeline.tsx:17-57

章节来源 - agent.ts:31-44 - ThinkingTimeline.tsx:17-57

活动步骤追踪与时间戳管理

sequenceDiagram participant Page as "Agent.tsx" participant Store as "agent.ts" participant Render as "ActivityLine.tsx" Page->>Store : addToolCall({id, tool, arguments, status, timestamp}) Store->>Store : deriveActivityVerb(tool) Store-->>Render : activity.steps 更新 Render->>Render : 计算 elapsed = (endedAt??now) - startedAt Render-->>Page : 展示步骤与计时

图表来源 - agent.ts:167-222 - ActivityLine.tsx:77-113 - agent.ts(类型定义):60-81

章节来源 - agent.ts:167-222 - ActivityLine.tsx:77-113 - agent.ts(类型定义):60-81

最佳实践与调试方法

章节来源 - agent.ts:223-249 - ActivityLine.tsx:77-113 - ThinkingTimeline.tsx:17-57

依赖关系分析

graph LR Types["types/agent.ts"] --> Store["stores/agent.ts"] Store --> RenderA["components/chat/ActivityLine.tsx"] Store --> RenderB["components/chat/ThinkingTimeline.tsx"] Page["pages/Agent.tsx"] --> Store RenderA --> Types RenderB --> Types

图表来源 - agent.ts(类型定义):60-81 - agent.ts:1-336 - ActivityLine.tsx:1-205 - ThinkingTimeline.tsx:1-85 - Agent.tsx:650-677

章节来源 - agent.ts(类型定义):60-81 - agent.ts:1-336 - ActivityLine.tsx:1-205 - ThinkingTimeline.tsx:1-85 - Agent.tsx:650-677

性能考虑

[本节为通用性能指导,无需特定文件引用]

故障排查指南

章节来源 - agent.ts:223-249 - ActivityLine.tsx:77-113 - ThinkingTimeline.tsx:17-57

结论

活动跟踪系统通过清晰的状态机、可靠的动词推导与完善的步骤追踪,实现了研究页面中对 Agent 行为的可视化与可调试性。Store 负责状态与数据的一致性,渲染层负责用户体验与性能,页面事件处理负责与后端的协同。遵循本文的最佳实践可有效提升系统的稳定性与可维护性。

[本节为总结性内容,无需特定文件引用]

附录

章节来源 - agent.ts:6-29 - agent.ts(类型定义):60-81