fischer-agentkit/docs/brainstorms/2026-06-12-frontend-product...

188 lines
19 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.

---
date: "2026-06-12"
topic: "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是前端重建的前置条件需前后端协同推进
- 终端 APIR17依赖已有的 `PTYSession` 工具(`src/agentkit/tools/pty_session.py`),需将其能力暴露为 HTTP/WebSocket 端点
- 设置 APIR18依赖 `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:**
- 终端 APIR17的安全边界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 双向转换)