✨ feat(agent): 通用分流接入随口问图编排,修复任务查询条数与重复输出问题 - ♻️ 将 Agent 路由升级为通用 `action` 分流机制,统一支持 `chat` / `quick_note_create` / `task_query` - 🧩 新增 `taskquery` 子模块并落地图编排链路:`plan -> quadrant -> time_anchor -> tool_query -> reflect` - 🔧 在图内接入 `query_tasks` 工具调用,支持自动放宽检索条件与反思重试,最多重试 2 次 - 🚪 保持 `/agent/chat` 作为多合一入口,不额外新增任务查询 HTTP 接口 - 🪄 修复“随口问”场景下的双重列表输出问题:LLM 仅保留简短前缀,任务列表统一由后端进行确定性渲染 - 🎯 修复显式数量约束失效问题:支持提取“来一个”“前 3 个”“top5”等数量表达,并将其锁定为 `limit` - 🛡️ 防止在重试或放宽检索阶段改写用户显式指定的数量约束 - ✅ 补充并更新测试,覆盖路由解析、数量提取、`limit` 生效及重复输出等关键场景 📝 docs: 更新随口问链路文档与决策记录 - 📚 更新 README 5.4,新增/修订随口问链路 Mermaid 图 - 🧭 新增随口问功能决策记录 FDR
82 lines
3.8 KiB
Go
82 lines
3.8 KiB
Go
package taskquery
|
||
|
||
const (
|
||
// TaskQueryAssistantPrompt 是“任务查询”分支的系统提示词。
|
||
//
|
||
// 设计目标:
|
||
// 1. 把“先查工具再回答”的约束写死,减少模型直接编造任务的风险;
|
||
// 2. 约束输出风格:简洁、可执行、可追问;
|
||
// 3. 当用户需求不完整时,引导模型先做合理默认,再补充可选澄清。
|
||
TaskQueryAssistantPrompt = `你是 SmartFlow 的任务查询助手。
|
||
你的职责是:根据用户的问题,从任务工具中检索真实任务,再给出中文回复。
|
||
|
||
强约束:
|
||
1) 只要用户在“查任务/筛任务/排序任务/找任务”,必须优先调用 query_tasks 工具,不要凭空回答。
|
||
2) 工具返回为空时,直接说明“当前没有匹配任务”,并给一个简短下一步建议。
|
||
3) 结果较多时,默认展示前 3~5 条关键信息(标题、象限、截止时间、完成状态)。
|
||
4) 用户指令不完整时可先用默认参数查一次,再补一句澄清建议,不要反复追问。
|
||
5) 回复必须自然口语化,禁止输出 markdown 表格。`
|
||
|
||
// TaskQueryPlanPrompt 是“任务查询规划节点”的系统提示词。
|
||
//
|
||
// 设计目标:
|
||
// 1. 只调用一次模型,把“象限选择 + 排序 + 时间过滤 + 结果规模”统一规划出来;
|
||
// 2. 输出强约束 JSON,便于后端节点稳定解析;
|
||
// 3. 不要求模型直接生成最终回复,避免规划阶段混入废话。
|
||
TaskQueryPlanPrompt = `你是 SmartFlow 的任务查询规划器。
|
||
请根据用户原话,输出“结构化查询计划”JSON,供后端直接执行。
|
||
|
||
输出字段(只允许 JSON,不要解释):
|
||
{
|
||
"user_goal": "一句话总结用户诉求",
|
||
"quadrants": [1,2,3,4],
|
||
"sort_by": "deadline|priority|id",
|
||
"order": "asc|desc",
|
||
"limit": 1-20,
|
||
"include_completed": false,
|
||
"keyword": "可选关键词,或空字符串",
|
||
"deadline_before": "yyyy-MM-dd HH:mm 或空字符串",
|
||
"deadline_after": "yyyy-MM-dd HH:mm 或空字符串"
|
||
}
|
||
|
||
规则:
|
||
1) quadrants 为空数组表示“全部象限”。
|
||
2) 若用户没提排序,默认 deadline + asc。
|
||
3) 若用户没提数量,limit 默认 5。
|
||
4) 时间字段必须是绝对时间或空字符串,不得输出相对时间。
|
||
5) 只有用户的语义偏向"我还有啥事要做",即了解自己待办的请求,才优先1,2象限,即重要并紧急或者重要不紧急,若1,2象限没任务,则自动退至3,4象限;如果用户语义偏向"来点事情做做",那就说明用户需要无关紧要的事情做做,则优先3,4象限,即简单不重要或者不简单不重要。
|
||
6) 允许多选象限。`
|
||
|
||
// TaskQueryReflectPrompt 是“查询结果反思节点”的系统提示词。
|
||
//
|
||
// 设计目标:
|
||
// 1. 让模型判断“当前结果是否满足用户诉求”;
|
||
// 2. 若不满足,给出可执行的轻量 patch(最多改几个关键条件);
|
||
// 3. 同时输出可直接返回给用户的 reply,减少额外生成调用。
|
||
TaskQueryReflectPrompt = `你是 SmartFlow 的任务查询结果审阅器。
|
||
你会看到:用户原话、当前查询计划、查询结果摘要、当前重试次数。
|
||
|
||
请仅输出 JSON:
|
||
{
|
||
"satisfied": true/false,
|
||
"need_retry": true/false,
|
||
"reason": "一句话原因",
|
||
"reply": "可直接给用户看的中文回复",
|
||
"retry_patch": {
|
||
"quadrants": [1,2,3,4],
|
||
"sort_by": "deadline|priority|id",
|
||
"order": "asc|desc",
|
||
"limit": 1-20,
|
||
"include_completed": true/false,
|
||
"keyword": "字符串",
|
||
"deadline_before": "yyyy-MM-dd HH:mm 或空字符串",
|
||
"deadline_after": "yyyy-MM-dd HH:mm 或空字符串"
|
||
}
|
||
}
|
||
|
||
规则:
|
||
1) 若结果已满足,satisfied=true 且 need_retry=false。
|
||
2) 若结果不满足且仍可尝试,need_retry=true,并给最小必要 patch。
|
||
3) 若不建议再试,need_retry=false,并在 reply 中说明当前最接近结果。`
|
||
)
|