Version: 0.7.1.dev.260320

🧠 agent智能编排:删除了落库相关逻辑。再次重申:agent智能编排旨在为用户预览排程结果,实际的落库由用户决定,并通过按钮触发常规接口进行落库。目前仅保留 ReAct 精排循环链路(待改进)。
📄 修改了 ReAct 智能精排决策文档相关内容。
🔄 undo:当前 agent 智能排程逻辑待改进。
This commit is contained in:
LoveLosita
2026-03-20 19:40:11 +08:00
parent d3cec2a5b9
commit 059b25872a
12 changed files with 115 additions and 661 deletions

View File

@@ -62,10 +62,95 @@
### 6.1 新流程graph 结构)
```
plan → preview(粗排) → hybridBuild(混合日程) → reactRefine(ReAct循环) → returnPreview → END
↑ |
└────────────────────────┘ (tool失败重试最多N轮)
```
`HybridScheduleWithPlan` 依赖未注入时preview 后自动走原有 materialize → apply 路径
智能排程仅返回预览结果,不自动落库。用户确认后由前端调用独立落库接口完成持久化
#### 6.1.1 整体 Graph 流程图
> 下图展示完整的 SchedulePlanGraph 编排结构ReAct 精排路径)。
```mermaid
flowchart TD
START([START]) --> plan["plan<br/>意图识别 + 约束提取<br/><i>callScheduleModelForJSON</i>"]
plan --> plan_br{{"FinalSummary 非空<br/>或 TaskClassID ≤ 0 ?"}}
plan_br -- 是 --> exit_a["exit → END<br/><i>提前终止</i>"]
plan_br -- 否 --> preview["preview<br/>调用粗排算法<br/><i>SmartPlanningRaw</i>"]
preview --> pv_br{{"preview 结果?"}}
pv_br -- "失败 / 无候选" --> exit_b["exit → END"]
pv_br -- "成功" --> hybridBuild["hybridBuild<br/>构建混合日程<br/><i>existing + suggested</i>"]
hybridBuild --> hb_br{{"HybridEntries 非空?"}}
hb_br -- 空 --> exit_c["exit → END"]
hb_br -- 非空 --> reactRefine["reactRefine<br/>ReAct 精排循环<br/><i>最多 3 轮 × 5min/轮</i>"]
reactRefine --> returnPreview["returnPreview<br/>HybridEntries → 预览格式<br/><i>不落库,等用户确认</i>"]
returnPreview --> END_A([END])
%% ═══ 样式 ═══
style reactRefine fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px
style hybridBuild fill:#e8f5e9,stroke:#2e7d32
style returnPreview fill:#e8f5e9,stroke:#2e7d32
```
#### 6.1.2 ReAct 精排内部循环
> 下图展开 `reactRefine` 节点内部的 ReAct 循环逻辑(`react.go`)。
> 每轮独立设置 5 分钟超时(`reactRoundTimeout`reasoning_content 实时推送到 SSE。
```mermaid
flowchart TD
enter([进入 reactRefine]) --> init["构造初始 messages<br/>system: ReAct 优化 prompt<br/>user: 混合日程 JSON + 约束"]
init --> round_gate{{"ReactRound < ReactMaxRound (3) ?"}}
round_gate -- 否 --> max_round["标记完成<br/>'已达最大轮次,使用当前结果'"]
max_round --> to_return([退出 → returnPreview])
round_gate -- 是 --> inc["ReactRound++<br/>创建 roundCtx<br/><i>context.WithTimeout(ctx, 5min)</i>"]
inc --> stream["chatModel.Stream(roundCtx, messages)<br/><i>ThinkingTypeEnabled</i>"]
stream --> recv_loop["循环 reader.Recv()"]
recv_loop --> has_reasoning{{"有 reasoning_content ?"}}
has_reasoning -- 是 --> push_sse["推送到 outChan<br/><i>前端实时可见思考过程</i>"]
push_sse --> has_content
has_reasoning -- 否 --> has_content{{"有 content ?"}}
has_content -- 是 --> acc["累积到 contentBuilder"]
acc --> recv_more{{"EOF ?"}}
has_content -- 否 --> recv_more
recv_more -- 否 --> recv_loop
recv_more -- 是 --> parse
stream -- "超时 / 错误" --> timeout["ReactDone = true<br/>'模型调用超时或失败,<br/>使用粗排结果'"]
timeout --> to_return
parse["解析 LLM JSON 输出<br/><i>parseReactLLMOutput</i>"]
parse --> parse_br{{"解析结果?"}}
parse_br -- 解析失败 --> parse_fail["ReactDone = true<br/>'LLM 输出格式异常'"]
parse_fail --> to_return
parse_br -- "done: true" --> done["ReactDone = true<br/>ReactSummary = summary"]
done --> to_return
parse_br -- "无 tool_calls<br/>且 done ≠ true" --> auto_done["ReactDone = true<br/>'排程优化已完成'"]
auto_done --> to_return
parse_br -- "有 tool_calls" --> dispatch["依次分发 Tool 调用<br/><i>dispatchReactTool</i>"]
dispatch --> tools["执行工具(纯内存操作)<br/>Swap ─ 交换两个 suggested 时间<br/>Move ─ 移动到新时间段<br/>TimeAvailable ─ 查询是否空闲<br/>GetAvailableSlots ─ 列出可用槽"]
tools --> append["messages += assistant 输出<br/>messages += tool 结果user msg"]
append --> round_gate
%% ═══ 样式 ═══
style stream fill:#e3f2fd,stroke:#1565c0,stroke-width:2px
style dispatch fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px
style tools fill:#e8f5e9,stroke:#2e7d32
style push_sse fill:#fce4ec,stroke:#c62828
style timeout fill:#ffebee,stroke:#b71c1c
```
### 6.2 混合日程HybridScheduleEntry
将既有日程existing和粗排建议suggested统一到同一结构