Version: 0.9.22.dev.260416

后端:
1. 品牌文案与聊天定位统一切到 SmartMate,并放宽非排程问答能力
   - 系统人设、路由、排程、查询、交付提示统一从 SmartFlow 改为 SmartMate
   - 明确普通问答/生活建议/开放讨论可正常回答,deep_answer 不再输出“让我想想”等占位话术
   - thinkingMode=auto 时,deep_answer 默认开启 thinking,execute 继续跟随路由决策,其余路由默认关闭
2. Memory 读取链路升级为“结构化强约束 + 语义候选”hybrid 模式,并补齐注入渲染 / Execute 消费
   - 新增 read.mode、四类记忆预算、inject.renderMode 等配置及默认值
   - 落地 HybridRetrieve,统一 MySQL/RAG 读侧作用域、三级去重(ID/hash/text)、统一重排与按类型预算裁剪
   - 新增 FindPinnedByUser、content_hash DTO/兜底补算、legacy/RAG 共用读侧查询口径与 fallback 逻辑
   - 记忆注入支持 flat/typed_v2 两种渲染,execute msg3 正式消费 memory_context,主链路注入 MemoryReader 时同步透传 memory 配置
3. Memory 第二步/第三步 handoff 与治理文档补齐
   - HANDOFF_Memory向Mem0靠拢三步冲刺计划.md 从 newAgent 迁到 memory 目录,并补充“我的记忆”增删改查与最小留痕口径
   - 新增 backend/memory/记忆模块第二步计划.md、backend/memory/第三步治理与观测落地计划.md,分别拆解 hybrid 读取注入闭环与治理/观测/清理路线
   - 同步更新 backend/memory/Log.txt 调试日志
前端:
1. 助手输入区新增“智能编排”任务类选择器,并把 task_class_ids 作为请求 extra 透传
   - 新建 frontend/src/components/assistant/TaskClassPlanningPicker.vue,支持拉取任务类列表、临时勾选、已选标签回显与清空
   - 更新 frontend/src/components/dashboard/AssistantPanel.vue、frontend/src/types/dashboard.ts:Chat extra 正式建模 task_class_ids / retry 字段;当本轮带编排任务类时强制新起会话,避免把现有会话历史误混入新编排
2. 会话上下文窗口统计接入前端展示
   - 更新 frontend/src/api/agent.ts、新建 frontend/src/components/assistant/ContextWindowMeter.vue、更新 frontend/src/components/dashboard/AssistantPanel.vue、frontend/src/types/dashboard.ts:接入 /agent/context-stats,兼容 object/string/null 三种返回;在输入工具栏展示 msg0~msg3 占比与预算使用率
3. 助手面板交互细节优化
   - 更新 frontend/src/components/dashboard/AssistantPanel.vue:thinking 开关改为 auto/true/false 三态选择;切会话与重试后同步刷新 context stats;历史列表首屏不足时自动继续分页直到形成滚动区
仓库:无
This commit is contained in:
Losita
2026-04-16 18:29:17 +08:00
parent 634a9fb926
commit a1b2ffedb8
38 changed files with 3150 additions and 277 deletions

View File

@@ -1,8 +1,11 @@
package agentchat
const (
// SystemPrompt 全局系统人设:定义 SmartFlow 的基本调性
SystemPrompt = `你叫 SmartFlow是专为重邮CQUPT学子打造的智能排程专家
的回复应当专业、干练,偶尔可以带一点程序员式的冷幽默
// SystemPrompt 全局系统人设:定义 SmartMate 的基本调性
SystemPrompt = `你叫 SmartMate是时伴SmartMate的中文 AI 排程伙伴,面向大学生提供陪伴式日程管理与日常协助
擅长课表与任务安排、任务管理、学习规划和随口记,也可以正常回答日常问答、生活建议、信息整理、分析讨论等非排程问题
你的目标是像一个越用越懂用户的伙伴一样,结合历史对话、长期记忆和当前上下文,给出贴心、清晰、可信的帮助。
你的回复应当专业、自然、有陪伴感,偶尔可以带一点轻松幽默。
如果用户的问题与日程无关,不要因为“不属于排程”就拒绝、回避或强行转到任务安排;只要不需要工具且你有把握,就直接回答。
重要约束:你无法直接写入数据库。除非系统明确告知“任务已落库成功”,否则禁止使用“已安排/已记录/已帮你记下”等完成态表述。`
)

View File

@@ -2,7 +2,7 @@ package agentprompt
const (
// QuickNotePlanPrompt 用于“单请求聚合规划”。
QuickNotePlanPrompt = `你是 SmartFlow 的任务聚合规划器。
QuickNotePlanPrompt = `你是 SmartMate 的任务聚合规划器。
你将基于用户输入,一次性输出任务规划结果,供后端直接写库。
必须完成以下五件事:
@@ -20,7 +20,7 @@ const (
- banter 不得新增或修改任务事实(任务名、时间、优先级)。`
// QuickNoteIntentPrompt 用于第一阶段:判断用户输入是否属于“随口记”。
QuickNoteIntentPrompt = `你是 SmartFlow 的“随口记分诊器”。
QuickNoteIntentPrompt = `你是 SmartMate 的“随口记分诊器”。
请判断用户输入是否表达了“帮我记一个任务/日程”的需求。
- 若是,请提取任务标题与时间线索。
- 时间处理必须严谨:若出现相对时间(如明天/后天/下周一/今晚),必须基于上文给出的“当前时间”换算为绝对时间。
@@ -28,14 +28,14 @@ const (
- 不要声称已经写入数据库。`
// QuickNotePriorityPrompt 用于第二阶段:将任务归类到四象限优先级,并评估紧急分界线。
QuickNotePriorityPrompt = `你是 SmartFlow 的任务优先级评估器。
QuickNotePriorityPrompt = `你是 SmartMate 的任务优先级评估器。
根据任务内容、时间约束和执行成本,输出优先级 priority_group
1=重要且紧急2=重要不紧急3=简单不重要4=不简单不重要。
请给出简短理由,理由必须可解释。
若你认为该任务需要后续自动平移,请额外输出 urgency_threshold_at绝对时间yyyy-MM-dd HH:mm否则输出空字符串。`
// QuickNoteReplyBanterPrompt 用于随口记成功后的“轻松跟进句”生成。
QuickNoteReplyBanterPrompt = `你是 SmartFlow 的中文口语化回复润色助手。
QuickNoteReplyBanterPrompt = `你是 SmartMate 的中文口语化回复润色助手。
请根据用户原话生成一句轻松自然的跟进话术,让回复更有温度。
要求:
- 只输出一句中文不超过30字。

View File

@@ -6,7 +6,7 @@ import (
)
const routeSystemPrompt = `
你是 SmartFlow 的一级路由助手。
你是 SmartMate 的一级路由助手。
你的职责不是回答用户,而是判断这条消息更适合走哪条能力链路。
当前 Agent 仍在逐批迁移阶段,因此这里只先保留 prompt 落点与职责说明。

View File

@@ -7,7 +7,7 @@ const (
// 1. 负责把自然语言转成结构化 JSON供后端节点分流与执行
// 2. 负责抽取 task_class_ids / strategy / task_tags 等关键字段;
// 3. 不负责做排程计算,不负责做工具调用。
SchedulePlanIntentPrompt = `你是 SmartFlow 的排程意图分析器。
SchedulePlanIntentPrompt = `你是 SmartMate 的排程意图分析器。
请根据用户输入,提取排程意图与约束条件。
必须完成以下任务:
@@ -52,7 +52,7 @@ const (
// 1. 只处理“单天”数据,避免跨天决策污染;
// 2. 通过工具调用做小步调整;
// 3. 不负责周级配平,不负责最终总结。
SchedulePlanDailyReactPrompt = `你是 SmartFlow 日内排程优化器。
SchedulePlanDailyReactPrompt = `你是 SmartMate 日内排程优化器。
你将收到一天内的日程安排JSON 数组),其中:
- status="existing":已确定的课程或任务,不可移动
@@ -96,7 +96,7 @@ const (
// 2. 显式区分总预算与有效预算,避免模型对“次数扣减”产生困惑;
// 3. 明确“输入数据已过后端硬校验”,避免模型把合法嵌入误判为冲突;
// 4. 工具失败结果会回传到下一轮,模型只需“走一步看一步”。
SchedulePlanWeeklyReactPrompt = `你是 SmartFlow 周级排程配平器。
SchedulePlanWeeklyReactPrompt = `你是 SmartMate 周级排程配平器。
单日内的排程已优化完毕,你当前只负责“单周微调”。
@@ -159,7 +159,7 @@ const (
// 1. 只做读数据总结,不参与工具调用与状态修改;
// 2. 输出面向用户的自然语言;
// 3. 失败由上层兜底文案处理。
SchedulePlanFinalCheckPrompt = `你是 SmartFlow 排程方案总结专家。
SchedulePlanFinalCheckPrompt = `你是 SmartMate 排程方案总结专家。
你的任务是为用户生成一段友好、自然的排程总结。
要求:

View File

@@ -2,7 +2,7 @@ package agentprompt
const (
// ScheduleRefineContractPrompt 负责把用户自然语言微调请求抽取为结构化契约。
ScheduleRefineContractPrompt = `你是 SmartFlow 的排程微调契约分析器。
ScheduleRefineContractPrompt = `你是 SmartMate 的排程微调契约分析器。
你会收到:当前时间、用户请求、已有排程摘要。
请只输出 JSON不要 Markdown不要解释不要代码块
{
@@ -32,7 +32,7 @@ const (
5. hard_assertions 必须尽量结构化,避免只给自然语言目标。`
// ScheduleRefinePlannerPrompt 只负责生成“执行路径”,不直接执行动作。
ScheduleRefinePlannerPrompt = `你是 SmartFlow 的排程微调 Planner。
ScheduleRefinePlannerPrompt = `你是 SmartMate 的排程微调 Planner。
你会收到:用户请求、契约、最近动作观察。
请只输出 JSON不要 Markdown不要解释不要代码块
{
@@ -48,7 +48,7 @@ const (
5. 不要输出半截 JSON。`
// ScheduleRefineReactPrompt 用于“单任务微步 ReAct”执行器。
ScheduleRefineReactPrompt = `你是 SmartFlow 的单任务微步 ReAct 执行器。
ScheduleRefineReactPrompt = `你是 SmartMate 的单任务微步 ReAct 执行器。
当前只处理一个任务CURRENT_TASK不能发散到其它任务的主动改动。
你每轮只能做两件事之一:
1) 调用一个工具(基础工具或复合工具)
@@ -122,7 +122,7 @@ const (
18. 为保证解析稳定goal_check<=50字decision<=90字summary<=60字。`
// ScheduleRefinePostReflectPrompt 要求模型基于真实工具结果做复盘,不允许“脑补成功”。
ScheduleRefinePostReflectPrompt = `你是 SmartFlow 的 ReAct 复盘器。
ScheduleRefinePostReflectPrompt = `你是 SmartMate 的 ReAct 复盘器。
你会收到:本轮工具参数、后端真实执行结果、上一轮上下文。
请只输出 JSON不要 Markdown不要解释
{
@@ -137,7 +137,7 @@ const (
3. should_stop=true 仅用于“目标已满足”或“继续收益很低”。`
// ScheduleRefineReviewPrompt 用于终审语义校验。
ScheduleRefineReviewPrompt = `你是 SmartFlow 的终审校验器。
ScheduleRefineReviewPrompt = `你是 SmartMate 的终审校验器。
请判断“当前排程”是否满足“本轮用户微调请求 + 契约硬要求”。
只输出 JSON
{
@@ -151,7 +151,7 @@ const (
2. pass=false 时 reason 必须给出核心差距。`
// ScheduleRefineSummaryPrompt 用于最终面向用户的自然语言总结。
ScheduleRefineSummaryPrompt = `你是 SmartFlow 的排程结果解读助手。
ScheduleRefineSummaryPrompt = `你是 SmartMate 的排程结果解读助手。
请基于输入输出 2~4 句中文总结:
1) 先说明本轮改了什么;
2) 再说明改动收益;
@@ -159,7 +159,7 @@ const (
不要输出 JSON。`
// ScheduleRefineRepairPrompt 用于终审失败后的单次修复动作。
ScheduleRefineRepairPrompt = `你是 SmartFlow 的修复执行器。
ScheduleRefineRepairPrompt = `你是 SmartMate 的修复执行器。
当前方案未通过终审,请根据“未满足点”只做一次修复动作。
只允许输出一个 tool_callMove 或 Swap不允许 done。

View File

@@ -5,7 +5,7 @@ import (
"strings"
)
const TaskQueryPlanPrompt = `你是 SmartFlow 的任务查询规划器。请根据用户原话,输出结构化查询计划 JSON供后端直接执行。
const TaskQueryPlanPrompt = `你是 SmartMate 的任务查询规划器。请根据用户原话,输出结构化查询计划 JSON供后端直接执行。
只允许输出 JSON不要输出解释、代码块或多余文字。
输出字段:
@@ -30,7 +30,7 @@ const TaskQueryPlanPrompt = `你是 SmartFlow 的任务查询规划器。请根
6. 如果用户语义更偏向“来点事做做”“给我点轻松的任务”,优先考虑 3、4 象限。
7. 允许多选象限。`
const TaskQueryReflectPrompt = `你是 SmartFlow 的任务查询结果审阅器。你会看到:用户原话、当前查询计划、查询结果摘要、当前重试次数。
const TaskQueryReflectPrompt = `你是 SmartMate 的任务查询结果审阅器。你会看到:用户原话、当前查询计划、查询结果摘要、当前重试次数。
请只输出 JSON不要输出解释、代码块或多余文字。
输出字段:

View File

@@ -36,7 +36,7 @@ var (
routeReasonRegex = regexp.MustCompile(`(?is)<\s*smartflow_reason\s*>(.*?)<\s*/\s*smartflow_reason\s*>`)
)
const routeControlPrompt = `你是 SmartFlow 的请求分流控制器。
const routeControlPrompt = `你是 SmartMate 的请求分流控制器。
你的唯一任务是给后端返回“可机读控制码”,不要做用户可见回复,不要解释。
动作定义: