Version: 0.6.5.dev.260316

 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
This commit is contained in:
Losita
2026-03-16 22:30:45 +08:00
parent 84371e2ff8
commit 09dca9f772
16 changed files with 2371 additions and 105 deletions

View File

@@ -0,0 +1,81 @@
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 中说明当前最接近结果。`
)