19 KiB
| date | topic |
|---|---|
| 2026-06-12 | frontend-productization |
Summary
对 Fischer AgentKit 前端三个核心界面(可视化编排器、监控数据看板、知识库管理)进行产品级重建,补齐后端 API 缺口,引入 ECharts 图表库,使整体达到面向外部用户交付的产品化标准。
Problem Frame
Fischer AgentKit 后端能力丰富——ReAct/ReWoo/Reflexion 多种推理引擎、Pipeline 编排与 Saga 补偿、自我进化与 A/B 测试、RAG 多源检索——但前端界面停留在 70% 完成度的内部工具水平。可视化编排器的拖拽放置未完成、并行节点缺失;进化仪表盘用原生 SVG 画折线图,无交互无实时推送;知识库上传后数据回填有 bug、文档管理不完整。对于产品化交付,这些界面需要从"能用"升级到"专业"。
同时,后端存在多个 API 缺口:终端 API 完全缺失(前端已实现调用逻辑)、设置 API 缺失、工作流执行历史无法列表查询、KB 文档无法删除和同步、进化仪表盘 WebSocket 推送为空壳。前端重建依赖这些 API 补齐。
Key Decisions
方案 B 关键界面重建而非方案 A 补全修复。 产品化需要质感提升——修补现有代码无法解决架构层面的问题(API 层重复代码、Ant Design 全量引入、SVG 图表无交互能力)。保留整体架构,对三个核心视图进行重建。
三个模块并行推进。 产品化交付需要整体一致性,串行推进会导致长时间内部分界面专业、部分界面粗糙。每个模块先做核心功能闭环,再迭代增强。
引入 ECharts 替换原生 SVG。 进化仪表盘的指标趋势、避坑预警、路径优化等数据可视化需要专业图表库的交互能力(tooltip、缩放、数据点悬停)。ECharts 中文文档完善、功能强大,适合产品化场景。
前后端协同推进。 前端重建依赖后端 API 补齐,两者需同步推进。后端 API 缺口作为本次需求的一部分纳入。
Requirements
可视化编排器
R1. 拖拽放置功能完整可用——从左侧节点面板拖拽节点到画布,松开鼠标后节点出现在画布对应位置,自动对齐网格
- 完成标准: ① 从节点面板拖拽任意类型节点(技能/条件/审批/并行)到画布,松开后节点出现在鼠标释放位置(对齐 15px 网格);② 拖拽过程中画布显示放置预览指示;③ 拖拽到画布外区域时节点不被创建;④ 连续拖拽 3 个节点到画布,位置均正确无偏移
R2. 并行节点拥有自定义 Vue Flow 组件——与技能节点、条件节点、审批节点同级,支持属性编辑(最大并行数),视觉上可区分
- 完成标准: ① 并行节点在画布上渲染为绿色自定义组件(与技能蓝/条件橙/审批紫视觉区分);② 右侧属性面板可编辑"最大并行数"字段;③ 并行节点可正常连线(输入端口和输出端口);④ 序列化/反序列化后并行节点属性不丢失
R3. 条件分支可视化引导——条件节点的"是/否"两个输出端口在画布上有明确标注,连线时自动提示分支方向
- 完成标准: ① 条件节点渲染时,两个输出端口分别标注"是"和"否"标签;② 从"是"端口拖出连线时,目标节点自动标记为真分支;③ 从"否"端口拖出连线时,目标节点自动标记为假分支;④ 序列化后
branch_targets正确反映连线关系
R4. 撤销/重做支持——编辑操作(添加/删除节点、连线、修改属性)可撤销和重做,快捷键 Ctrl+Z / Ctrl+Shift+Z
- 完成标准: ① 添加节点后按 Ctrl+Z,节点从画布消失;② 删除节点后按 Ctrl+Z,节点恢复原位;③ 连线后按 Ctrl+Z,连线消失;④ 修改属性后按 Ctrl+Z,属性恢复原值;⑤ 撤销后按 Ctrl+Shift+Z,操作重做;⑥ 连续操作 5 次后全部撤销再全部重做,画布状态与操作后一致
R5. 工作流执行动画——执行中的阶段节点在画布上高亮显示当前状态(运行中/已完成/已失败),通过 WebSocket 实时更新
- 完成标准: ① 执行工作流后,当前运行阶段节点显示脉冲动画(运行中);② 阶段完成后节点变为绿色勾选状态;③ 阶段失败后节点变为红色错误状态;④ 审批节点暂停时显示等待图标;⑤ 状态变化延迟不超过 1 秒(WebSocket 推送);⑥ 未执行的节点保持默认样式
R6. 工作流执行历史列表——后端新增 GET /workflows/{workflow_id}/executions 端点,前端展示历史执行记录,支持查看每次执行的阶段结果和状态
- 完成标准: ① 后端端点返回指定工作流的执行记录列表(含 execution_id、状态、开始/结束时间);② 前端工作流详情页展示执行历史表格;③ 点击某条记录可展开查看各阶段结果;④ 空历史时显示空状态提示;⑤ API 返回分页数据,前端支持翻页
监控与数据看板
R7. ECharts 替换原生 SVG 图表——指标趋势图(成功率、平均耗时、重试率)使用 ECharts 折线图,支持 tooltip、数据点悬停高亮、图例切换
- 完成标准: ① 指标趋势图使用 ECharts 渲染,不再包含原生 SVG 绘制代码;② 鼠标悬停数据点时显示 tooltip(日期、数值);③ 点击图例可切换显示/隐藏对应趋势线;④ 时间周期切换(7天/30天/全部)后图表正确刷新;⑤ 图表自适应容器宽度,窗口缩放后自动重绘
R8. 进化仪表盘实时 WebSocket 推送——后端在经验记录新增、指标更新、避坑检测等事件中触发 WebSocket 推送,前端接收后自动刷新对应面板
- 完成标准: ① 后端
EvolutionStore写操作(新增经验、更新指标、检测避坑)后调用_broadcast_event;② 前端 WebSocket 连接建立后收到subscribed确认;③ 新经验记录产生后,经验时间线在 2 秒内自动追加新条目;④ 指标更新后,趋势图自动刷新数据;⑤ WebSocket 断开后自动重连(最多 3 次,间隔 5 秒)
R9. 经验时间线筛选 bug 修复——onExperienceFilter 函数正确传递 outcome 参数,筛选功能实际生效
- 完成标准: ① 选择"成功"筛选后,时间线仅显示 outcome 为 success 的记录;② 选择"失败"筛选后,时间线仅显示 outcome 为 failure 的记录;③ 选择"全部"后恢复显示所有记录;④ 切换筛选时 API 请求中 outcome 参数正确传递(非 undefined)
R10. 全局概览页——新增仪表盘首页,展示系统级指标:总任务数、Agent 活跃数、LLM 用量统计、质量门禁通过率,作为进入各子面板的入口
- 完成标准: ① 概览页展示 4 个摘要卡片(总任务数、Agent 活跃数、LLM 用量、质量通过率),数据来自后端 API;② 每个卡片可点击跳转到对应子面板;③ 页面加载时显示骨架屏/loading 状态;④ 数据为空时显示零值而非空白;⑤ 概览页为进化模块的默认着陆页
R11. 用量统计面板——展示 LLM Token 用量趋势(按 Provider/模型分组)、请求成功率、平均响应延迟,支持时间范围选择
- 完成标准: ① 展示 Token 用量折线图(按 Provider 分组,不同颜色区分);② 展示请求成功率百分比和平均响应延迟(ms);③ 支持时间范围选择(今日/7天/30天);④ 数据来自
GET /llm/usage端点;⑤ 无数据时显示空状态提示
知识库管理界面
R12. 文档上传数据回填修复——上传成功后使用后端返回的真实 document_id 和 chunks 数,而非前端伪造的 Date.now()
- 完成标准: ① 上传文档后,文档列表中显示的 document_id 与后端返回值一致;② 分块数显示后端返回的 chunks 值;③ 上传多个文档后,每个文档的 id 均唯一且来自后端;④ 上传失败时文档不出现在列表中,且显示错误提示
R13. 文档列表与删除——后端新增 GET /kb-management/documents 和 DELETE /kb-management/documents/{document_id} 端点,前端展示已上传文档列表并支持删除
- 完成标准: ① 后端
GET /kb-management/documents返回文档列表(含 document_id、filename、chunks、status、created_at);② 前端文档管理 Tab 展示完整文档列表(文件名、状态、分块数、上传时间);③ 点击删除按钮后弹出确认对话框,确认后调用 DELETE 端点;④ 删除成功后文档从列表中移除;⑤ 删除失败时显示错误提示,文档保留在列表中
R14. 信息源同步触发——后端新增 POST /kb-management/sources/{source_id}/sync 端点,前端在信息源详情中提供"立即同步"按钮,显示同步进度
- 完成标准: ① 后端端点触发指定信息源的同步操作并返回同步任务状态;② 前端信息源表格中每行有"同步"按钮;③ 点击后按钮变为 loading 状态,同步完成后恢复;④ 同步完成后信息源的"最近同步时间"更新;⑤ 同步失败时按钮恢复,并显示错误提示
R15. 信息源配置更新——后端新增 PUT /kb-management/sources/{source_id} 端点,前端支持编辑已有信息源的配置
- 完成标准: ① 后端端点接受信息源配置更新请求并返回更新后的完整信息源对象;② 前端信息源表格中每行有"编辑"按钮;③ 点击后弹出编辑表单,预填当前配置;④ 保存后信息源列表刷新显示新配置;⑤ 编辑飞书/Confluence/HTTP 类型信息源时,表单字段与新增时一致
R16. 检索高级选项——检索测试支持指定信息源范围、调整 top_k 参数、选择检索策略(向量/混合)
- 完成标准: ① 检索测试区域新增"高级选项"折叠面板;② 可选择指定信息源(多选下拉框,默认全部);③ 可调整 top_k 参数(数字输入框,默认 5,范围 1-20);④ 可选择检索策略(向量/混合,单选);⑤ 高级选项参数随检索请求一起发送到后端;⑥ 后端
POST /kb-management/search端点接受并处理这些参数
后端 API 补齐
R17. 终端 API 实现——后端新增终端路由模块,提供 POST /terminal/execute、GET /terminal/sessions、GET /terminal/sessions/{sessionId}/history、WS /terminal/ws 四个端点,对接已有的 PTYSession 工具
- 完成标准: ①
POST /terminal/execute接受命令字符串,创建 PTYSession 执行并返回 session_id 和初始输出;②GET /terminal/sessions返回当前活跃终端会话列表;③GET /terminal/sessions/{sessionId}/history返回指定会话的命令历史;④WS /terminal/ws支持实时命令输入和输出流;⑤ 命令执行受安全策略约束(白名单或确认机制);⑥ 前端终端页面可正常执行命令并查看输出
R18. 设置 API 实现——后端新增设置路由模块,提供 GET/PUT /settings/llm、GET/PUT /settings/skills、GET/PUT /settings/kb、GET/PUT /settings/general 端点,前端 Settings 页面可读写配置
- 完成标准: ①
GET /settings/llm返回当前 LLM 配置(Provider 列表、默认模型、别名等),不暴露 API Key 明文;②PUT /settings/llm更新 LLM 配置并触发热重载;③GET/PUT /settings/skills读写技能路径配置;④GET/PUT /settings/kb读写知识库连接配置;⑤GET/PUT /settings/general读写通用设置(日志级别、Server 端口等);⑥ 前端 Settings 页面可展示和修改所有配置项;⑦ 配置修改后无需重启服务即可生效
R19. 工作流 Skill 阶段真实执行——工作流执行引擎中 skill 类型阶段调用真实的 Skill 执行,而非返回 {"dry_run": True} 模拟数据
- 完成标准: ① 工作流执行到 skill 类型阶段时,通过 SkillRegistry 查找并调用对应 Skill;② Skill 执行结果(含输出和元数据)写入 WorkflowExecution 的 stage_results;③ Skill 执行失败时,阶段状态标记为 failed 并记录错误信息;④ 前端工作流执行详情中可查看 Skill 的真实输出;⑤ 不影响 condition/approval/parallel 类型阶段的现有执行逻辑
技术改进
R20. 前端 API 层抽取公共基类——6 个 API 文件的重复 request 函数、错误处理逻辑抽取为共享的 api/base.ts,各模块继承使用
- 完成标准: ①
api/base.ts提供统一的 request 函数(含 baseURL、超时、错误处理);② 6 个 API 文件(portal/workflow/evolution/kb/skills/terminal)均使用 base.ts 的 request,不再各自独立实现;③ 统一的错误处理:网络错误、401 认证失败、5xx 服务端错误均有对应提示;④ 统一的响应拦截:非 2xx 状态码统一抛出异常;⑤ 现有 API 调用行为不变(回归验证)
R21. Ant Design Vue 按需引入——替换 app.use(Antd) 全量注册为按需引入,减小打包体积
- 完成标准: ①
main.ts中移除app.use(Antd)全量注册;② 配置unplugin-vue-components和unplugin-auto-import实现按需引入;③ 所有现有页面渲染和交互行为不变(回归验证);④ 打包产物中 ant-design-vue 体积较全量引入减少 40% 以上;⑤ 构建无报错、无运行时组件缺失警告
R22. ECharts 按需引入——仅引入折线图、柱状图、饼图等使用的图表类型和组件,避免全量打包
- 完成标准: ① 使用 ECharts 按需引入 API(
echarts/use+ 所需图表/组件注册);② 引入的图表类型覆盖:折线图(LineChart)、柱状图(BarChart)、饼图(PieChart);③ 引入的组件覆盖:TooltipComponent、LegendComponent、GridComponent、DataZoomComponent;④ 打包产物中 echarts 体积较全量引入减少 50% 以上;⑤ 所有图表渲染和交互行为正常
Key Flows
-
F1. 拖拽创建工作流节点
- Trigger: 用户从左侧节点面板拖拽节点到画布区域
- Actors: 开发者、运营人员
- Steps: 用户按住节点类型卡片 → 拖动到画布目标位置 → 松开鼠标 → 节点出现在画布对应位置(自动对齐 15px 网格)→ 右侧属性面板自动展示新节点属性表单 → 用户可编辑属性
- Covered by: R1
-
F2. 工作流执行与实时反馈
- Trigger: 用户点击"执行"按钮并输入变量
- Actors: 开发者、运营人员
- Steps: 用户输入执行变量 → 后端创建执行实例 → WebSocket 推送
stage_started事件 → 对应节点高亮为"运行中" → 阶段完成推送stage_completed→ 节点变为"已完成"(失败则标红)→ 审批节点暂停等待人工操作 → 全部完成推送execution_completed - Covered by: R5, R6, R19
-
F3. 知识库文档管理闭环
- Trigger: 用户上传文档或管理已有文档
- Actors: 运营人员
- Steps: 用户拖拽上传文档 → 后端处理并返回真实 document_id 和分块数 → 文档列表自动刷新 → 用户可删除文档 → 用户可触发信息源同步 → 同步进度实时显示
- Covered by: R12, R13, R14
-
F4. 进化仪表盘实时监控
- Trigger: 用户打开进化仪表盘页面
- Actors: 开发者
- Steps: 页面加载获取初始数据 → 建立 WebSocket 连接 → 后端经验记录新增时推送事件 → 经验时间线自动追加新记录 → 指标趋势图自动更新 → 用户可按时间范围/结果筛选
- Covered by: R7, R8, R9
Scope Boundaries
Deferred for later:
- 暗色模式——当前所有样式硬编码白色背景,暗色模式需要设计系统层面的改造,本次不纳入
- 角色视图切换(开发者/运营人员)——两个角色共享同一界面,通过信息架构和交互引导区分使用路径,不做独立的角色视图
- Computer Use 页面——仅占位页,功能独立于本次前端升级
- CI/CD 流水线——项目当前无 CI 配置,独立于前端重建
- 前端单元测试和 E2E 测试——当前前端零测试覆盖,测试体系建设可作为后续专项
Outside this product's identity:
- 多语言国际化(i18n)——当前用户群体为中文用户,全局已配置中文 locale,暂不需要多语言支持
- 移动端适配——AgentKit 是桌面端工具,不需要响应式移动端布局
Dependencies / Assumptions
- 后端 API 补齐(R6, R13, R14, R15, R17, R18, R19)是前端重建的前置条件,需前后端协同推进
- 终端 API(R17)依赖已有的
PTYSession工具(src/agentkit/tools/pty_session.py),需将其能力暴露为 HTTP/WebSocket 端点 - 设置 API(R18)依赖
agentkit.yaml配置文件的热重载机制(src/agentkit/server/app.py中的_on_config_change),需评估 API 写入配置的安全边界 - 工作流真实执行(R19)需要将
WorkflowStage中 skill 类型阶段的执行逻辑对接到SkillRegistry,当前为 dry-run 模拟 - 进化仪表盘 WebSocket 推送(R8)需要在
EvolutionStore的写操作中调用_broadcast_event,当前该函数已定义但从未被业务逻辑调用 - ECharts 和 Ant Design Vue 按需引入(R21, R22)需要 Vite 插件支持(
unplugin-vue-components和unplugin-auto-import)
Outstanding Questions
Resolve Before Planning:
- 终端 API(R17)的安全边界:Shell 命令执行存在安全风险,需确认是否复用
ShellTool的白名单机制,还是采用其他安全策略
Deferred to Planning:
- 全局概览页(R10)的数据聚合方式:是从现有多个端点聚合,还是新增专用概览端点
- 工作流执行动画(R5)的节点状态样式方案:是在现有节点组件上叠加状态层,还是创建带状态的节点变体
Sources / Research
- 前端项目结构:
src/agentkit/server/frontend/(Vue 3 + TypeScript + Ant Design Vue 4 + @vue-flow/core) - 后端路由注册:
src/agentkit/server/app.py(14 个路由模块挂载于/api/v1) - 工作流 Schema:
src/agentkit/orchestrator/workflow_schema.py(WorkflowDefinition / WorkflowStage / WorkflowExecution) - 工作流路由:
src/agentkit/server/routes/workflows.py(CRUD + 执行 + WebSocket) - 进化仪表盘路由:
src/agentkit/server/routes/evolution_dashboard.py(四大数据面板 + WebSocket 空壳推送) - 知识库管理路由:
src/agentkit/server/routes/kb_management.py(信息源 CRUD + 文档上传 + 检索) - PTYSession 工具:
src/agentkit/tools/pty_session.py(终端会话管理,终端 API 的底层依赖) - 前端终端 API 定义:
src/agentkit/server/frontend/src/api/terminal.ts(已定义但后端缺失的四个端点) - 前端工作流序列化:
src/agentkit/server/frontend/src/views/WorkflowView/workflowSerializer.ts(Vue Flow 模型与后端 Schema 双向转换)