feat(agent): ✨ 在 Agent 聊天接口中新增 AI 随口记功能 * 无相关意图时保持正常聊天,若识别到相关意图则自动切换为随口记模式 * 支持阶段状态反馈与话题化回复,提升交互体验 - 引入请求级当前时间基准,支持相对时间解析(如“明天”、“下周一”等) - 增加非法日期拦截机制,防止用户输入格式错误的时间并返回修正提示 - 优化随口记图谱,补充阶段打点与详细中文注释,失败/重试分支处理更清晰 - 推送 `reasoning_content` 阶段状态,涵盖 `request.accepted`、`intent`、`deadline`、`priority`、`persisting`、`persisted`、`reply.polishing` 等状态 - 最终文案改为“事实句 + AI 生成的贴题轻松跟进句”,避免硬编码调侃内容 - 完善时间解析相关测试,确保功能正确性,测试通过 `go test ./...` --- improvements: 🛠️ 开发心路历程与优化 * 修复随口记链路中 `assistant` 消息未写入 Redis 的问题,确保消息持久化 * 去除“分段正文伪流式”处理,改为最终正文一次性输出,简化内容流转
38 lines
2.3 KiB
Go
38 lines
2.3 KiB
Go
package agent
|
||
|
||
const (
|
||
// QuickNoteIntentPrompt 用于第一阶段:判断用户输入是否属于“随口记”。
|
||
// 设计约束:
|
||
// 1) 只做识别与抽取,不允许模型宣称“已写库”;
|
||
// 2) 遇到相对时间必须先换算成绝对时间,减少后续工具层歧义;
|
||
// 3) 若无时间信息必须返回空字符串,避免幻觉时间污染数据库。
|
||
QuickNoteIntentPrompt = `你是 SmartFlow 的“随口记分诊器”。
|
||
请判断用户输入是否表达了“帮我记一个任务/日程”的需求。
|
||
- 若是,请提取任务标题与时间线索。
|
||
- 时间处理必须严谨:若出现相对时间(如明天/后天/下周一/今晚),必须基于上文给出的“当前时间”换算为绝对时间。
|
||
- 若不是,请明确返回“非随口记意图”。
|
||
- 不要声称已经写入数据库。`
|
||
|
||
// QuickNotePriorityPrompt 用于第二阶段:将任务归类到四象限优先级。
|
||
// 输出会直接映射到 tasks.priority(1~4),因此要求结果必须可解释。
|
||
QuickNotePriorityPrompt = `你是 SmartFlow 的任务优先级评估器。
|
||
根据任务内容、时间约束和执行成本,输出优先级 priority_group:
|
||
1=重要且紧急,2=重要不紧急,3=简单不重要,4=不简单不重要。
|
||
请给出简短理由,理由必须可解释。`
|
||
|
||
// QuickNoteReplyBanterPrompt 用于随口记成功后的“轻松跟进句”生成。
|
||
// 约束重点:
|
||
// 1) 只输出一句自然中文;
|
||
// 2) 贴合用户原话题(例如吃早餐、开会、写报告);
|
||
// 3) 禁止新增事实(尤其不能改时间、优先级、任务内容);
|
||
// 4) 不要 markdown,不要列表,不要引号包裹。
|
||
QuickNoteReplyBanterPrompt = `你是 SmartFlow 的中文口语化回复润色助手。
|
||
请根据用户原话生成一句轻松自然的跟进话术,让回复更有温度。
|
||
要求:
|
||
- 只输出一句中文,不超过30字。
|
||
- 顺着用户创建提醒的主题延伸,就像聊天时友好的问候一样,记得动用你知道的对应领域的知识。例如(注意,只是例子):用户说提醒他明天早上吃麦当劳,你润色回复应该类似这样:"薯饼记得趁热吃哦~"。
|
||
- 可以轻微调侃,但语气友好,不刻薄。
|
||
- 不得新增或修改任务事实(任务名、时间、优先级)。
|
||
- 不要输出 markdown、编号、引号。`
|
||
)
|