1. 页面概览
会话记忆管理页(V5 Stage 6,B5-5.5)是 LightAIP 的记忆流管理入口,路由为 /memory-manage。AIP 的 NLQ 链路以 user_id 作为会话键,为每个用户维护一条记忆流:最近 6 轮保存原文、更早轮次压缩为 LLM 摘要,并附带实体提及抽取。本页提供当前登录用户的会话列表(消息条数/最近活动)、单会话记忆条目的按时间正序查看,以及按会话清空记忆。
页面所有数据都来自 GET /chat/sessions、GET|DELETE /chat/sessions/:sid/memory,归属校验在后端按当前登录用户过滤。一句话总结:会话记忆页是"记忆流可见 + 按会话清理"的隐私与调试工具。
2. 访问入口
2.1 路由与菜单
| 项目 | 值 |
|---|---|
| 路由 path | /memory-manage |
| 路由 name | MemoryManage |
| 路由 title | 会话记忆 |
| requiresAuth | true |
| 菜单位置 | Action 栏目(ActionLayout.vue)「会话记忆」 |
| 前端源码 | action/web/src/views/MemoryManagePage.vue |
| 路由注册 | action/web/src/router/index.js |
2.2 认证与权限
meta 配置 requiresAuth: true;请求经 action/web/src/api/aipClient.js(baseURL /aip-api/v1)附 localStorage.aip_token,401 跳 /login。普通登录用户可访问,但仅能查看/清空自己的记忆。
2.3 端口与 API 前缀
AIP 后端默认端口 18080,API 前缀 /aip-api,实际请求路径 /aip-api/v1/chat/sessions。
3. 界面布局
+--------------------------------------------------+
| 会话记忆管理 |
| AIP NLQ 会话记忆 · 最近 6 轮原文 + 更早轮次摘要 · 实体提及标注 |
+--------------------------------------------------+
| [操作结果提示 alert(有消息时显示,可关闭)] |
+--------------------------------------------------+
| 会话列表(N)[刷新] |
| 表格:会话 ID | 消息条数 | 最近活动 | 操作 |
| [查看记忆] |
+--------------------------------------------------+
| 记忆条目 — <session_id> [清空本会话记忆] |
| 表格:时间 | 角色 | 内容 | 摘要 | 实体提及 |
+--------------------------------------------------+
各板块职责:
- 会话列表:当前登录用户的所有记忆会话概览(会话 ID、消息条数、最近活动时间);空列表时提示先去「智能查询」完成一次自然语言查询。
- 记忆条目:选中会话后按时间升序展示每条消息,列含时间、角色徽标(用户/助手)、内容、摘要(旧轮次压缩)、实体提及标签。
4. 交互元素
| 控件 | 位置 | 含义与作用 |
|---|---|---|
| 刷新按钮 | 会话列表标题 | 重新加载会话列表,成功后提示"会话列表已刷新" |
| 查看记忆按钮 | 会话列表行 | 加载并展示该会话的记忆条目(GET /chat/sessions/:sid/memory) |
| 清空本会话记忆按钮 | 记忆条目标题 | 二次确认("确认清空会话...该操作不可恢复")后 DELETE /chat/sessions/:sid/memory,成功后提示已清空 N 条并刷新两表 |
| 实体提及标签 | 记忆条目表 | 消息内命中的表名/指标名等实体,JSON 解析后以黄色标签展示 |
5. 后端关联
5.1 端点表
| 方法 | 路径 | 用途 |
|---|---|---|
| GET | /chat/sessions | 当前用户记忆会话概览(session_id / message_count / last_activity) |
| GET | /chat/sessions/:sid/memory | 按时间升序列出记忆条目(query limit,默认 50,有上限钳制) |
| DELETE | /chat/sessions/:sid/memory | 清空某会话记忆,响应 {deleted: N} |
5.2 关键机制
- 每用户一条记忆流:NLQ 链路 HandleQuery 以
user_id作为会话键,用户查询成功后才回写记忆(失败轮次不写)。anl_conversation_memory表按(session_id, created_at)索引存储 role / content / summary / entities。 - 原文 + 摘要两级存储:
Append附带轻量实体提及抽取(正则命中表/指标名);Context组装 prompt 时返回最近 6 轮原文 + 更早轮次摘要(无摘要的旧轮滚动用 LLM 批量压缩一次并回写,失败降级截断,受 maxTokens 预算控制)。 - 归属校验:所有端点按
memoryCurrentUserID(c)过滤,非匿名用户仅可读写自己的会话记忆;会话 ID 为空返回MEMORY_BAD_SESSION(400),服务异常返回MEMORY_ERROR(500)。 - 自动清理:调度器注册
aip:memory-cleanup任务,每日 4 点删除 30 天前的记忆。
6. 权限与安全
- 认证为 JWT(
aip_token),/chat/sessions路由挂 protected 登录组。 - 后端强制按登录用户过滤会话归属,本页不存在越权查看他人记忆的路径。
- 清空记忆为不可逆写操作,前端二次确认,且 DELETE 只能作用于当前登录用户自己的会话。
7. 常见问题与排错
问题 1:会话列表为空
现象:提示"暂无会话记忆"。
原因:尚未在「智能查询」完成过成功的自然语言查询;查询失败轮次不写记忆。
处理:先去「智能查询」跑通一次查询,再回到本页点「刷新」。
问题 2:点「查看记忆」提示"加载记忆条目失败"
现象:红色 alert 报错。
原因:会话 ID 含特殊字符、后端 401,或服务返回 MEMORY_ERROR。
处理:确认 aip_token 有效;查看后端日志定位 MEMORY_ERROR;会话 ID 经 encodeURIComponent 处理,一般无需手工转义。
问题 3:清空后记忆条目仍有余留
现象:提示"已清空记忆(N 条)",但表格仍有数据。
原因:清空返回的 deleted 是后端删除条数,随后页面自动重新加载会话记忆,可能是刷新竞态或删除未提交。
处理:再次点「刷新」确认;若仍有数据则查看后端日志确认 DELETE 是否成功。
8. 已知缺陷与边界
| 项 | 说明 |
|---|---|
| 单会话粒度 | 仅支持按会话清空,无"清空全部会话"一键入口 |
| 无分页 | 记忆条目一次加载(后端 limit 有上限),超长会话展示不全 |
| 摘要覆盖不全 | 摘要由 LLM 按需压缩回写,冷启动阶段旧轮次可能无摘要显示「-」 |
| 仅当前用户视角 | 页面只展示登录用户自己的记忆,无管理员全局视角 |