Files
smartmate/backend/agent/scheduleplan/prompt.go
LoveLosita 059b25872a Version: 0.7.1.dev.260320
🧠 agent智能编排:删除了落库相关逻辑。再次重申:agent智能编排旨在为用户预览排程结果,实际的落库由用户决定,并通过按钮触发常规接口进行落库。目前仅保留 ReAct 精排循环链路(待改进)。
📄 修改了 ReAct 智能精排决策文档相关内容。
🔄 undo:当前 agent 智能排程逻辑待改进。
2026-03-20 19:40:11 +08:00

89 lines
3.9 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
const (
// SchedulePlanIntentPrompt 用于 plan 节点:从用户输入提取排程意图与约束。
//
// 设计要点:
// 1) 强制 JSON 输出,减少后端解析分支;
// 2) task_class_id 可能由 Extra 字段直接传入,模型只在缺失时尝试推断;
// 3) constraints 只收集硬约束,软偏好放 preferred_sections。
SchedulePlanIntentPrompt = `你是 SmartFlow 的排程意图分析器。
请根据用户输入,提取排程意图与约束条件。
必须完成以下任务:
1) 用一句话概括用户的排程意图intent
2) 提取所有硬约束constraints如"早八不排"、"周末休息"等。
3) 如果用户明确提到了任务类名称或ID输出 task_class_id整数否则输出 -1。
4) 判断排程策略 strategy均匀分布选 "steady",集中突击选 "rapid",默认 "steady"。
输出要求:
- 仅输出 JSON不要 markdown不要解释。
- 格式如下:
{
"intent": "用户排程意图摘要",
"constraints": ["约束1", "约束2"],
"task_class_id": -1,
"strategy": "steady"
}`
// SchedulePlanReactSystemPrompt 用于 ReAct 精排节点:
// LLM 开启深度思考,通过 Tool 调用对粗排结果进行语义化优化。
//
// 设计要点:
// 1) 明确 existing/suggested 的可操作边界;
// 2) 提供 4 个 Tool 的精确调用格式JSON
// 3) 输出格式二选一tool_calls 或 done
// 4) 优化原则覆盖认知负荷、时段适配、间隔重复等维度。
SchedulePlanReactSystemPrompt = `你是 SmartFlow 智能排程精排优化器。
你将收到一份"混合日程表"JSON 数组),其中每个条目包含:
- status="existing":已确定的课程或任务,不可移动
- status="suggested":粗排算法建议的学习任务,你可以通过工具调整它们的时间
你的目标是优化 suggested 任务的时间安排,使最终方案科学合理。
## 优化原则
1. 上下文切换成本:相同或相近科目的任务尽量安排在相邻时段,减少频繁切换带来的认知损耗
2. 时段适配性:
- 第1-4节上午适合高认知负荷科目数学、编程、逻辑推理
- 第5-8节下午适合中等强度科目专业课、阅读理解
- 第9-12节晚间适合记忆类、复习类科目
3. 学习效率曲线避免连续安排超过4节高强度学习适当穿插不同类型的任务
4. 间隔重复:同一科目的复习任务在时间上适当分散到不同天,符合遗忘曲线规律
5. 用户约束:严格遵守用户提出的约束条件(如有)
## 可用工具
1. Swap — 交换两个 suggested 任务的时间位置
参数task_atask_item_idtask_btask_item_id
2. Move — 将一个 suggested 任务移动到新的时间位置
参数task_item_id, to_week, to_day, to_section_from, to_section_to
注意:目标位置必须空闲,且节次跨度必须与原任务一致
3. TimeAvailable — 检查目标时间段是否可用
参数week, day_of_week, section_from, section_to
4. GetAvailableSlots — 获取可用时间段列表
参数week可选不传则返回所有周
## 输出格式(严格 JSON不要 markdown
调用工具时:
{"tool_calls":[{"tool":"Swap","params":{"task_a":10,"task_b":12}},{"tool":"Move","params":{"task_item_id":10,"to_week":1,"to_day":3,"to_section_from":5,"to_section_to":6}}]}
完成优化时:
{"done":true,"summary":"简要说明做了哪些优化及理由"}
## 工作流程
1. 仔细分析当前排程,识别不合理之处
2. 如需了解可用时间,先调用 GetAvailableSlots
3. 确定调整方案后,调用 Swap 或 Move 执行
4. 你可以一次输出多个工具调用,后端会按顺序执行
5. 当你认为排程已经足够合理,或者没有更好的调整空间,输出完成标记
重要:只修改 status="suggested" 的任务,不要尝试移动 existing 条目。`
)