feat(knowledge): add short-term ask memory

This commit is contained in:
2026-07-18 21:22:49 +08:00
parent 2eda757483
commit 064816a784
33 changed files with 1348 additions and 99 deletions
@@ -1,14 +1,14 @@
# 问师傅多轮会话与原始资料交付设计
> 状态:实施基线,尚未代表代码完成、生产发布或业务验收。
> 状态:代码、自动化、本地真实 HTTP、390×844 移动端视觉与交互已验证;生产发布与正式业务验收仍须分别记录。
>
> 目标:让“问·数字师傅”能理解本次连续对话中的指代,并在当前授权范围内交付命中的原文件或操作视频。
## 1. 当前事实与问题
`mobile-uni/src/pages/user/sop/index.vue` 会在页面内展示消息列表,但每次文字查询只向 `POST /api/knowledge/query` 发送当前 `queryText`;附件查询同样只向 `POST /api/knowledge/query-media` 发送当前问题和本次附件。页面刷新、重新进入或服务端生成答案时都没有可用的对话上下文。
升级前,`mobile-uni/src/pages/user/sop/index.vue` 只在页面内展示消息列表,每次文字或附件查询只提交当前问题,服务端没有可用的对话上下文。
因此当前能力是“微信式界面 + 单轮无状态 RAG”,不是多轮智能会话。典型失败包括:
因此升级前的能力是“微信式界面 + 单轮无状态 RAG”,不是多轮智能会话。典型失败包括:
- 用户先问“自动扶梯困人怎么办”,再说“把这个 SOP 原文件给我”,第二句无法确定“这个”指什么;
- 用户说“有没有操作视频”,系统仍按普通知识问答检索,可能返回另一份语义相近但无关的 SOP;
@@ -45,7 +45,7 @@
| `expires_time` | 30 分钟不活跃过期时间 |
| `create_time`、`update_time` | 审计时间 |
约束:单个用户问题最多 600 字、单个答案最多 800 字、送入模型的会话上下文最多 6000 字;过期记录惰性清理。唯一键为 `tenant_id + app_id + user_id + conversation_id`。客户端不能传租户、应用或用户身份。
约束:单个用户问题最多 600 字、单个答案最多 800 字、送入模型的会话上下文最多 6000 字;服务端至多每 5 分钟惰性批量清理 500 条过期记录。唯一键为 `tenant_id + app_id + user_id + conversation_id`。客户端不能传租户、应用或用户身份。
## 4. 查询契约
@@ -129,3 +129,10 @@
安全与回归还需覆盖:跨用户/跨租户会话不可读、旧版本冲突、30 分钟过期、模型关闭、OSS 缺失、视频类型过滤、外部 API 保持无状态、旧客户端单轮查询不回退。
完成结论分为:代码实现、自动化测试、本地 HTTP、移动端视觉与交互、生产部署、生产真实多轮、正式业务验收;这些层级不得互相替代。
## 10. 当前验证记录
- 后端定向合同与服务测试 `20/20` 通过;移动端完整单元测试、类型检查和 H5 构建通过。
- 本地手机号真实登录后完成“报修第一步 → 把对应原文件给我 → 有对应操作视频吗”三轮:上下文版本依次递增,第二轮路由为 `FILE` 并下载受保护原文件,第三轮无视频时返回空资源和明确说明;旧版本请求返回 `409`。
- 390×844 H5 已实际操作登录、两轮追问、资料卡点击和“新对话”;资料卡请求命中受保护内容接口,未发现遮挡、溢出或底栏覆盖。
- 上述是本地工程验证,不等于生产发布、真机文件权限验证或正式业务验收。