4.3 KiB
4.3 KiB
RAG 会话自动标题开发任务拆解与接口变更清单
最后整理:2026-05-19 对应方案:
docs/RAG/RAG会话自动标题生成与重命名实施方案.md
1. 本期落地范围
本期目标不是做一个“前端点一下自动命名”的伪功能,而是完成第一版可稳定运行的后端自动标题链路:
- 新会话首轮回答完成后,后端异步生成标题
- 手动重命名后,不再被自动标题覆盖
- 会话列表排序从“单纯 updated_at”收口到“最后消息时间优先”
- 前端移除旧的假自动重命名逻辑
2. 任务拆解
2.1 后端数据层
任务:
- 为
rag_conversation增加标题状态字段 - 增加
last_message_at - 增加相关索引
交付物:
scripts/创建sql/schema_rag_chat_auto_title.sql
验收点:
- 老数据执行 SQL 不报错
- 默认值正确
- 索引存在
2.2 后端会话查询层
任务:
- 会话列表返回
titleSource - 会话列表返回
lastMessageAt - 排序改为
COALESCE(last_message_at, updated_at) DESC
验收点:
- 自动标题更新不会让会话无故跳到顶部
- 真正发新消息的会话仍能上浮
2.3 后端消息完成链路
任务:
- assistant 最终落库时同步更新
last_message_at - 首轮回答完成后调度自动标题任务
验收点:
- 标题生成失败不影响主回答
- 只在首轮完整回答后触发
2.4 后端自动标题生成器
任务:
- 新增
_maybe_schedule_auto_title(...) - 新增
_run_auto_title_task(...) - 新增
_generate_conversation_title(...) - 新增
_sanitize_generated_title(...) - 新增
_build_fallback_title(...)
验收点:
- 同一会话不会重复并发生成标题
- 生成失败能记状态
- 生成成功后能回写标题
2.5 后端手动重命名链路
任务:
RenameConversation()改为写入title_source = 'manual'- 清空最近一次标题生成错误
验收点:
- 用户手动改名后,后续自动任务不再覆盖
2.6 前端聊天主链路
任务:
- 移除
generateConversationName(...)自动调用 - 移除
sidebarRef.autoRename(...)自动调用 - 回答完成后轻量刷新会话列表,把后端自动标题同步回来
验收点:
- 首轮问答完成后,会话名称自然更新
- 前端不再双写标题
2.7 前端会话列表排序与本地更新
任务:
- 会话排序优先用
last_message_at - 仅标题更新时不再强行覆盖
updated_at
验收点:
- 手动重命名不会导致会话跳序
- 自动重命名不会导致会话跳序
3. 接口变更清单
3.1 GET /api/v3/rag/chat/conversations
新增返回字段:
{
"id": "conversation_id",
"name": "烟草专卖法中的烟草定义",
"introduction": "",
"titleSource": "auto",
"createdAt": 1779078161,
"updatedAt": 1779078200,
"lastMessageAt": 1779078200
}
兼容性说明:
- 前端旧代码即使不消费新增字段也不会炸
- 新前端会使用
last_message_at改善排序
3.2 PATCH /api/v3/rag/chat/conversations/{ConversationId}
本期请求体不变:
{
"name": "我手动改的标题"
}
但服务端语义变化为:
- 更新标题
- 将
title_source切为manual - 保护后续自动任务不覆盖
4. 数据字段说明
| 字段 | 说明 |
|---|---|
title_source |
default / auto / manual |
title_generation_status |
idle / pending / running / succeeded / failed |
title_generated_at |
自动标题成功时间 |
first_question_message_id |
预留,本期可暂不写 |
first_answer_message_id |
记录首轮回答 message_id |
title_generation_error |
最近一次失败原因 |
last_message_at |
最后一次消息完成时间 |
5. 本期已知边界
- 自动标题目前走与 follow-up 相同的在线 LLM 依赖
- 如果 LLM 配置错误,主回答可能正常但标题生成失败
- 本期还未增加专门的
conversation_renamedSSE 事件 - 前端目前通过“回答完成后刷新列表”同步标题,优先保证正确性
6. 后续增强建议
- 新增
conversation_renamedSSE 事件,减少列表刷新 - 增加后台补偿任务,扫描
failed会话再重试 - 引入标题生成提示词版本号,便于回溯
- 对
first_question_message_id也做持久化,补齐审计链路