Files
smartmate/backend/agent/scheduleplan/quick_refine.go
Losita e5b27df80d Version: 0.7.2.dev.260322
feat(schedule-plan):  重构智能排程链路并修复粗排双节对齐问题

-  新增“对话级排程状态持久化”能力:引入 `agent_schedule_states` 模型/DAO,并接入启动迁移
-  智能排程图升级:补齐小幅微调(quick refine)分支,完善预算/并发/状态字段流转
-  预览链路增强:完善排程预览服务读写与桥接逻辑,新增本地预览页 `infra/schedule_preview_viewer.html`
- ♻️ 缓存治理统一:将相关缓存处理收口到 DAO + `cache_deleter` 联动清理,移除旧散落逻辑
- 🐛 修复粗排核心 bug:禁止单节降级,强制双节并按 `1-2/3-4/...` 对齐;修复结束日扫描边界问题
-  新增粗排回归测试:覆盖孤立单节、偶数起点双节、Filler 对齐等关键场景
2026-03-22 13:50:10 +08:00

78 lines
2.4 KiB
Go
Raw 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.
package scheduleplan
import (
"context"
"fmt"
)
// runQuickRefineNode 是 small 微调分支的“轻量预算收缩节点”。
//
// 职责边界:
// 1. 负责在进入 weekly_refine 前收缩预算与并发,避免小改动走重链路;
// 2. 负责保留“可回退”的最低预算,避免直接压成 0 导致无动作可执行;
// 3. 不负责执行任何 Move/Swap真正动作仍由 weekly_refine 完成)。
func runQuickRefineNode(
ctx context.Context,
st *SchedulePlanState,
emitStage func(stage, detail string),
) (*SchedulePlanState, error) {
_ = ctx
if st == nil {
return nil, fmt.Errorf("schedule plan quick refine: nil state")
}
emitStage("schedule_plan.quick_refine.start", "检测到小幅微调,正在切换到快速优化路径。")
// 1. 预算收缩策略:
// 1.1 small 场景目标是“快速响应 + 可解释改动”,不追求大规模重排;
// 1.2 因此把总预算压到最多 2 次尝试、有效预算压到最多 1 次成功动作;
// 1.3 如果上游已配置更小预算,则尊重更小值,不做反向放大。
if st.WeeklyTotalBudget <= 0 {
st.WeeklyTotalBudget = schedulePlanDefaultWeeklyTotalBudget
}
if st.WeeklyAdjustBudget <= 0 {
st.WeeklyAdjustBudget = schedulePlanDefaultWeeklyAdjustBudget
}
st.WeeklyTotalBudget = clampBudgetUpper(st.WeeklyTotalBudget, 2)
st.WeeklyAdjustBudget = clampBudgetUpper(st.WeeklyAdjustBudget, 1)
// 2. 预算一致性兜底:
// 2.1 总预算至少为 1否则 weekly worker 无法执行);
// 2.2 有效预算至少为 1否则所有成功动作都不被允许
// 2.3 有效预算永远不能超过总预算。
if st.WeeklyTotalBudget < 1 {
st.WeeklyTotalBudget = 1
}
if st.WeeklyAdjustBudget < 1 {
st.WeeklyAdjustBudget = 1
}
if st.WeeklyAdjustBudget > st.WeeklyTotalBudget {
st.WeeklyAdjustBudget = st.WeeklyTotalBudget
}
// 3. 小改动路径把周级并发收敛到 1优先保证稳定与可观察性。
st.WeeklyRefineConcurrency = 1
emitStage(
"schedule_plan.quick_refine.done",
fmt.Sprintf(
"快速微调预算已生效:总预算=%d有效预算=%d并发=%d。",
st.WeeklyTotalBudget,
st.WeeklyAdjustBudget,
st.WeeklyRefineConcurrency,
),
)
return st, nil
}
// clampBudgetUpper 把预算裁剪到“非负且不超过上限”。
func clampBudgetUpper(current int, upper int) int {
if current < 0 {
return 0
}
if current > upper {
return upper
}
return current
}