From 468367d6174926c3c406b24763d8992e72f6cb18 Mon Sep 17 00:00:00 2001 From: Losita <2810873701@qq.com> Date: Sat, 28 Mar 2026 18:00:31 +0800 Subject: [PATCH] =?UTF-8?q?Version:=200.8.3.dev.260328=20=E5=90=8E?= =?UTF-8?q?=E7=AB=AF=EF=BC=9A=201.=E5=BD=BB=E5=BA=95=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E5=8E=9Fagent=E6=96=87=E4=BB=B6=E5=A4=B9=EF=BC=8C=E5=B9=B6?= =?UTF-8?q?=E5=B0=86=E7=8E=B0agent2=E6=96=87=E4=BB=B6=E5=A4=B9=E5=85=A8?= =?UTF-8?q?=E9=87=8F=E9=87=8D=E5=91=BD=E5=90=8D=E4=B8=BAagent(=E5=8C=85?= =?UTF-8?q?=E6=8B=AC=E5=85=A8=E9=83=A8=E6=B6=89=E5=8F=8A=E5=88=B0=E7=9A=84?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E4=BB=A5=E5=8F=8A=E6=96=87=E6=A1=A3=E3=80=81?= =?UTF-8?q?=E6=B3=A8=E9=87=8A)=EF=BC=8C=E8=BF=81=E7=A7=BB=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E5=AE=8C=E7=BE=8E=E7=BB=93=E6=9D=9F=202.=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E4=BA=86=E9=87=8D=E8=AF=95=E6=B6=88=E6=81=AF=E7=9A=84?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E9=80=BB=E8=BE=91=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 前端: 1.改善了一些交互体验,修复了一些bug,现在只剩少的功能了,现存的bug基本都修复完毕 全仓库: 1.更新了决策记录和README文档 --- AGENTS.md | 5 +- README.md | 260 +- agent2逐批搬迁实施细节.md | 388 -- agent代码复用清单.md | 448 --- backend/agent/README.md | 23 - backend/agent/chat/prompt.go | 2 +- backend/agent/chat/stream.go | 161 +- backend/{agent2 => agent}/entrance.go | 14 +- backend/{agent2 => agent}/graph/quicknote.go | 6 +- backend/{agent2 => agent}/graph/schedule.go | 4 +- backend/{agent2 => agent}/graph/taskquery.go | 4 +- backend/{agent2 => agent}/llm/ark.go | 0 backend/{agent2 => agent}/llm/client.go | 6 +- backend/{agent2 => agent}/llm/json.go | 0 backend/{agent2 => agent}/llm/quicknote.go | 2 +- backend/{agent2 => agent}/llm/route.go | 4 +- backend/{agent2 => agent}/llm/schedule.go | 2 +- .../{agent2 => agent}/llm/schedule_refine.go | 0 backend/{agent2 => agent}/llm/taskquery.go | 2 +- backend/{agent2 => agent}/model/common.go | 4 +- backend/{agent2 => agent}/model/quicknote.go | 2 +- backend/{agent2 => agent}/model/route.go | 0 backend/{agent2 => agent}/model/schedule.go | 0 .../model/schedule_refine.go | 2 +- .../{agent2 => agent}/model/task_priority.go | 0 backend/{agent2 => agent}/model/taskquery.go | 0 backend/{agent2 => agent}/node/quicknote.go | 4 +- .../{agent2 => agent}/node/quicknote_tool.go | 4 +- .../{agent2 => agent}/node/schedule_plan.go | 10 +- .../node/schedule_plan_tool.go | 2 +- .../{agent2 => agent}/node/schedule_refine.go | 6 +- .../node/schedule_refine_tool.go | 0 backend/{agent2 => agent}/node/taskquery.go | 8 +- .../{agent2 => agent}/node/taskquery_tool.go | 2 +- backend/{agent2 => agent}/node/tool_common.go | 0 backend/{agent2 => agent}/prompt/quicknote.go | 0 backend/{agent2 => agent}/prompt/route.go | 2 +- backend/{agent2 => agent}/prompt/schedule.go | 0 .../prompt/schedule_refine.go | 0 backend/{agent2 => agent}/prompt/taskquery.go | 0 backend/agent/quicknote/graph.go | 163 - backend/agent/quicknote/nodes.go | 670 ---- backend/agent/quicknote/prompt.go | 86 - .../agent/quicknote/quick_note_graph_test.go | 36 - backend/agent/quicknote/runner.go | 61 - backend/agent/quicknote/state.go | 174 - backend/agent/quicknote/tool.go | 681 ---- backend/agent/quicknote/tool_deadline_test.go | 123 - backend/agent/route/route.go | 279 -- backend/agent/route/route_test.go | 45 - .../{agent2 => agent}/router/action_route.go | 8 +- backend/{agent2 => agent}/router/route.go | 2 +- .../{agent2 => agent}/router/route_model.go | 2 +- backend/agent/scheduleplan/daily_refine.go | 315 -- backend/agent/scheduleplan/daily_split.go | 93 - backend/agent/scheduleplan/final_check.go | 171 - backend/agent/scheduleplan/graph.go | 210 - backend/agent/scheduleplan/merge.go | 86 - backend/agent/scheduleplan/nodes.go | 767 ---- backend/agent/scheduleplan/prompt.go | 178 - backend/agent/scheduleplan/quick_refine.go | 77 - backend/agent/scheduleplan/react.go | 847 ----- backend/agent/scheduleplan/runner.go | 128 - backend/agent/scheduleplan/state.go | 287 -- backend/agent/scheduleplan/tool.go | 147 - backend/agent/scheduleplan/tools_react.go | 465 --- .../schedulerefine/composite_route_test.go | 85 - .../schedulerefine/composite_tools_test.go | 179 - backend/agent/schedulerefine/graph.go | 114 - backend/agent/schedulerefine/nodes.go | 3380 ----------------- backend/agent/schedulerefine/prompt.go | 188 - .../schedulerefine/refine_filters_test.go | 637 ---- backend/agent/schedulerefine/runner.go | 53 - backend/agent/schedulerefine/state.go | 377 -- backend/agent/schedulerefine/tool.go | 2027 ---------- backend/{agent2 => agent}/shared/clone.go | 0 backend/{agent2 => agent}/shared/retry.go | 0 backend/{agent2 => agent}/shared/time.go | 4 +- backend/{agent2 => agent}/stream/emitter.go | 0 backend/{agent2 => agent}/stream/openai.go | 2 +- backend/agent/taskquery/graph.go | 183 - backend/agent/taskquery/nodes.go | 839 ---- backend/agent/taskquery/nodes_test.go | 86 - backend/agent/taskquery/prompt.go | 81 - backend/agent/taskquery/state.go | 88 - backend/agent/taskquery/tool.go | 344 -- backend/agent/taskquery/tool_helpers.go | 37 - backend/agent/taskquery/tool_test.go | 45 - backend/agent/通用能力接入文档.md | 176 + backend/agent2/chat/prompt.go | 8 - backend/agent2/chat/stream.go | 161 - backend/agent2/通用能力接入文档.md | 356 -- backend/dao/agent.go | 49 + backend/service/agentsvc/agent.go | 16 +- backend/service/agentsvc/agent_history.go | 14 +- backend/service/agentsvc/agent_quick_note.go | 18 +- backend/service/agentsvc/agent_route.go | 2 +- .../service/agentsvc/agent_schedule_plan.go | 8 +- .../agentsvc/agent_schedule_preview.go | 199 +- .../service/agentsvc/agent_schedule_refine.go | 8 +- backend/service/agentsvc/agent_task_query.go | 6 +- .../智能排程ReAct精排引擎_决策记录.md | 359 +- frontend/src/api/scheduleCenter.ts | 41 +- .../components/dashboard/AssistantPanel.vue | 125 +- .../components/schedule/TaskClassSidebar.vue | 15 +- .../components/schedule/WeekPlanningBoard.vue | 321 +- frontend/src/views/ScheduleView.vue | 584 ++- openapi.yaml | 390 -- 108 files changed, 1910 insertions(+), 17173 deletions(-) delete mode 100644 agent2逐批搬迁实施细节.md delete mode 100644 agent代码复用清单.md delete mode 100644 backend/agent/README.md rename backend/{agent2 => agent}/entrance.go (73%) rename backend/{agent2 => agent}/graph/quicknote.go (95%) rename backend/{agent2 => agent}/graph/schedule.go (98%) rename backend/{agent2 => agent}/graph/taskquery.go (97%) rename backend/{agent2 => agent}/llm/ark.go (100%) rename backend/{agent2 => agent}/llm/client.go (97%) rename backend/{agent2 => agent}/llm/json.go (100%) rename backend/{agent2 => agent}/llm/quicknote.go (98%) rename backend/{agent2 => agent}/llm/route.go (89%) rename backend/{agent2 => agent}/llm/schedule.go (98%) rename backend/{agent2 => agent}/llm/schedule_refine.go (100%) rename backend/{agent2 => agent}/llm/taskquery.go (97%) rename backend/{agent2 => agent}/model/common.go (66%) rename backend/{agent2 => agent}/model/quicknote.go (97%) rename backend/{agent2 => agent}/model/route.go (100%) rename backend/{agent2 => agent}/model/schedule.go (100%) rename backend/{agent2 => agent}/model/schedule_refine.go (99%) rename backend/{agent2 => agent}/model/task_priority.go (100%) rename backend/{agent2 => agent}/model/taskquery.go (100%) rename backend/{agent2 => agent}/node/quicknote.go (99%) rename backend/{agent2 => agent}/node/quicknote_tool.go (99%) rename backend/{agent2 => agent}/node/schedule_plan.go (99%) rename backend/{agent2 => agent}/node/schedule_plan_tool.go (99%) rename backend/{agent2 => agent}/node/schedule_refine.go (99%) rename backend/{agent2 => agent}/node/schedule_refine_tool.go (100%) rename backend/{agent2 => agent}/node/taskquery.go (98%) rename backend/{agent2 => agent}/node/taskquery_tool.go (99%) rename backend/{agent2 => agent}/node/tool_common.go (100%) rename backend/{agent2 => agent}/prompt/quicknote.go (100%) rename backend/{agent2 => agent}/prompt/route.go (87%) rename backend/{agent2 => agent}/prompt/schedule.go (100%) rename backend/{agent2 => agent}/prompt/schedule_refine.go (100%) rename backend/{agent2 => agent}/prompt/taskquery.go (100%) delete mode 100644 backend/agent/quicknote/graph.go delete mode 100644 backend/agent/quicknote/nodes.go delete mode 100644 backend/agent/quicknote/prompt.go delete mode 100644 backend/agent/quicknote/quick_note_graph_test.go delete mode 100644 backend/agent/quicknote/runner.go delete mode 100644 backend/agent/quicknote/state.go delete mode 100644 backend/agent/quicknote/tool.go delete mode 100644 backend/agent/quicknote/tool_deadline_test.go delete mode 100644 backend/agent/route/route.go delete mode 100644 backend/agent/route/route_test.go rename backend/{agent2 => agent}/router/action_route.go (96%) rename backend/{agent2 => agent}/router/route.go (97%) rename backend/{agent2 => agent}/router/route_model.go (92%) delete mode 100644 backend/agent/scheduleplan/daily_refine.go delete mode 100644 backend/agent/scheduleplan/daily_split.go delete mode 100644 backend/agent/scheduleplan/final_check.go delete mode 100644 backend/agent/scheduleplan/graph.go delete mode 100644 backend/agent/scheduleplan/merge.go delete mode 100644 backend/agent/scheduleplan/nodes.go delete mode 100644 backend/agent/scheduleplan/prompt.go delete mode 100644 backend/agent/scheduleplan/quick_refine.go delete mode 100644 backend/agent/scheduleplan/react.go delete mode 100644 backend/agent/scheduleplan/runner.go delete mode 100644 backend/agent/scheduleplan/state.go delete mode 100644 backend/agent/scheduleplan/tool.go delete mode 100644 backend/agent/scheduleplan/tools_react.go delete mode 100644 backend/agent/schedulerefine/composite_route_test.go delete mode 100644 backend/agent/schedulerefine/composite_tools_test.go delete mode 100644 backend/agent/schedulerefine/graph.go delete mode 100644 backend/agent/schedulerefine/nodes.go delete mode 100644 backend/agent/schedulerefine/prompt.go delete mode 100644 backend/agent/schedulerefine/refine_filters_test.go delete mode 100644 backend/agent/schedulerefine/runner.go delete mode 100644 backend/agent/schedulerefine/state.go delete mode 100644 backend/agent/schedulerefine/tool.go rename backend/{agent2 => agent}/shared/clone.go (100%) rename backend/{agent2 => agent}/shared/retry.go (100%) rename backend/{agent2 => agent}/shared/time.go (89%) rename backend/{agent2 => agent}/stream/emitter.go (100%) rename backend/{agent2 => agent}/stream/openai.go (98%) delete mode 100644 backend/agent/taskquery/graph.go delete mode 100644 backend/agent/taskquery/nodes.go delete mode 100644 backend/agent/taskquery/nodes_test.go delete mode 100644 backend/agent/taskquery/prompt.go delete mode 100644 backend/agent/taskquery/state.go delete mode 100644 backend/agent/taskquery/tool.go delete mode 100644 backend/agent/taskquery/tool_helpers.go delete mode 100644 backend/agent/taskquery/tool_test.go create mode 100644 backend/agent/通用能力接入文档.md delete mode 100644 backend/agent2/chat/prompt.go delete mode 100644 backend/agent2/chat/stream.go delete mode 100644 backend/agent2/通用能力接入文档.md delete mode 100644 openapi.yaml diff --git a/AGENTS.md b/AGENTS.md index b784d36..55a11dc 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,4 +1,4 @@ -# AGENTS.md +# AGENTS.md ## 协作偏好(逐条追加) @@ -13,7 +13,7 @@ 9. 对于明显过大的文件(尤其是同时承载编排、业务、模型交互、工具分发的文件),后续重构时必须拆分职责,禁止继续向单文件堆砌新逻辑。 10. Prompt、State、模型交互、Graph 连线应尽量分目录/分文件管理,禁止把大段 prompt、节点逻辑、模型 helper 长期混写在同一文件中。 11. 若本轮任务包含“结构迁移”,最终答复中必须明确说明:本轮迁了什么、哪些旧实现仍保留、当前切流点在哪里、下一轮建议迁什么。 -12. 若后续在 `backend/agent2` 中新增、下沉、替换任何“通用能力”,必须同步更新 `backend/agent2/通用能力接入文档.md`,否则视为重构信息不完整。 +12. 若后续在 `backend/agent` 中新增、下沉、替换任何“通用能力”,必须同步更新 `backend/agent/通用能力接入文档.md`,否则视为重构信息不完整。 13. 跑完单元测试后,必须删除单元测试的test.go文件,禁止把测试文件长期留在项目中。 ## 注释规范(强制) @@ -45,3 +45,4 @@ - `// 查询缓存` - `// 调用 DAO` - `// 返回结果` + diff --git a/README.md b/README.md index 9b9ad8f..b2bc161 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# 1 项目概览 +# 1 项目概览 ## 1.1 总体介绍 @@ -359,7 +359,7 @@ flowchart TD A["/api/v1/agent/chat
解析请求体 + 规范 conversation_id
Header 写入 X-Conversation-ID"] --> B["AgentService.AgentChat
创建 outChan / errChan"] B --> C["规范 chat_id + 选择模型(worker/strategist)"] C --> D["确保会话存在
先查 Redis 状态
未命中回源 DB + 必要时创建"] - D --> E["模型控制码路由
route.DecideActionRouting
action=chat/quick_note_create/task_query/schedule_plan"] + D --> E["模型控制码路由
route.DecideActionRouting
action=chat/quick_note_create/task_query/schedule_plan_create/schedule_plan_refine"] E --> F{"RouteFailed?"} F -- "是" --> G["pushErrNonBlocking(errChan, RouteControlInternalError)
API 侧 SSE 输出 error + [DONE]"] @@ -381,12 +381,17 @@ flowchart TD K1 -- "是" --> K2["记录日志 + 发 fallback 阶段块
回退 runNormalChatFlow"] K1 -- "否" --> K3["emitSingleAssistantCompletion
persistChatAfterReply + 异步标题"] - H -- "schedule_plan" --> L["runSchedulePlanFlow -> SchedulePlanGraph
并写入排程预览缓存"] + H -- "schedule_plan_create" --> L["runSchedulePlanFlow -> SchedulePlanGraph
并写入排程预览缓存"] L --> L1{"排程链路报错?"} L1 -- "是" --> L2["记录日志 + 发 fallback 阶段块
回退 runNormalChatFlow"] L1 -- "否" --> L3["emitSingleAssistantCompletion
persistChatAfterReply + 异步标题"] - H -- "未知 action" --> M["兜底回退 runNormalChatFlow"] + H -- "schedule_plan_refine" --> M["runScheduleRefineFlow -> ScheduleRefineGraph
读取上一版排程预览上下文"] + M --> M1{"连续微调链路报错?"} + M1 -- "是" --> M2["直接上报错误
不回退普通聊天"] + M1 -- "否" --> M3["emitSingleAssistantCompletion
persistChatAfterReply + 异步标题"] + + H -- "未知 action" --> N["兜底回退 runNormalChatFlow"] I2 --> Z["API c.Stream 转发 outChan/errChan
正常收尾或错误收尾"] J2 --> Z @@ -395,7 +400,9 @@ flowchart TD K3 --> Z L2 --> Z L3 --> Z - M --> Z + M2 --> Z + M3 --> Z + N --> Z G --> Z ``` @@ -431,7 +438,7 @@ flowchart TD ```mermaid flowchart TD - A["用户消息进入 /agent/chat"] --> B["通用控制码分流
action=chat/quick_note_create/task_query/schedule_plan"] + A["用户消息进入 /agent/chat"] --> B["通用控制码分流
action=chat/quick_note_create/task_query/schedule_plan_create/schedule_plan_refine"] B --> C{"action 是否为 task_query"} C -- 否 --> D["走其它分支
普通聊天或随口记"] C -- 是 --> E["进入 TaskQueryGraph"] @@ -452,11 +459,11 @@ flowchart TD Q --> R["后置持久化
user+assistant 写 Redis + outbox/DB"] ``` -### 4) 命中“智能排程”后的业务流转图 +### 4) 命中新建“智能排程”后的业务流转图 ```mermaid flowchart TD - A["命中 action=schedule_plan
发 request.accepted 阶段块"] --> B["runSchedulePlanFlow 入口"] + A["命中 action=schedule_plan_create
发 request.accepted 阶段块"] --> B["runSchedulePlanFlow 入口"] B --> B1{"依赖齐全?
model + 3个函数注入"} B1 -- "否" --> B2["返回 error 给上层
上层回退普通聊天"] B1 -- "是" --> C["清理旧预览缓存
DeleteSchedulePlanPreview
失败仅记日志"] @@ -498,15 +505,211 @@ flowchart TD H2 --> Z ``` +### 5) 命中“排程连续微调”后的业务流转图 + +```mermaid +flowchart TD + A["命中 action=schedule_plan_refine
发 request.accepted 阶段块"] --> B["runScheduleRefineFlow 入口"] + B --> C{"selectedModel 非空?"} + C -- "否" --> C1["直接返回错误
不回退普通聊天"] + C -- "是" --> D["loadSchedulePreviewContext
Redis 预览优先 -> miss 回源 MySQL 快照"] + D --> E{"上一版预览存在?"} + E -- "否" --> E1["返回 SchedulePlanPreviewNotFound
直接上报错误"] + E -- "是" --> F["NewScheduleRefineState
注入 HybridEntries / AllocatedItems / CandidatePlans / OriginOrderMap"] + F --> G["RunScheduleRefineGraph"] + + G --> H["contract
抽取 intent / strategy / hard_assertions
默认 keep_relative_order=true"] + H --> I["plan
生成 3~4 步执行计划
必要时注入复合工具硬条件"] + I --> J["slice
提取 week/source_days/target_days
编译 objective + workset"] + J --> K["route
命中 SpreadEven / MinContextSwitch 时先走复合路由
首次 + 最多2次重试"] + K --> K1{"CompositeRouteSucceeded?"} + K1 -- "是" --> L["react
检测到已收口,直接 skip"] + K1 -- "否" --> M["react
单任务微步循环
失败后禁复合,只用基础工具"] + L --> N["hard_check
先锁定业务目标
再按需顺序归位 / 一次修复"] + M --> N + N --> O["summary
回填 AllocatedItems + CandidatePlans
Completed 仅由终审是否通过决定"] + + O --> P{"shouldPersistScheduleRefinePreview?"} + P -- "是" --> Q["saveSchedulePlanPreview
覆盖 Redis + MySQL 快照"] + P -- "否" --> R["emit schedule_refine.preview.skipped
保留上一版预览基线"] + Q --> S["emitSingleAssistantCompletion
输出 FinalSummary"] + R --> S + S --> T["persistChatAfterReply
统一后置持久化 + 异步标题"] + + C1 --> Z["错误直接返回前端"] + E1 --> Z + T --> Z +``` + # 6 前端实现 -## 6.1 设计策略 +## 6.1 当前前端技术栈与工程约定 +当前前端位于 `frontend/` 目录,已经落地为一个可独立运行的 Vue 单页应用。 +技术栈如下: -## 6.2 组件拆解 +| 分类 | 当前选型 | 说明 | +| --- | --- | --- | +| 前端框架 | Vue 3 | 统一使用 Composition API 与 `