# 聊天记录总结功能测试指南 ## 测试数据说明 已创建测试聊天:**帝国骑士维尔 / 恶魔女友长篇测试** ### 故事架构 - **主题**:日式恶魔女友角色扮演 - **情节**:User召唤魅魔,发现对方是前女友 → 签订契约 → 前女友表面嫌弃但内心不舍 - **长度**:10层消息,前5层每层约2000字符,后5层为占位符 - **总字符数**:约10,894字符 ### 角色设定 - **雪乃(莉莉丝)**:前女友变成的高阶魅魔,银发红眼,哥特萝莉装,口是心非 - **我(User)**:召唤者,深情且坚定,愿意为爱牺牲 --- ## 测试步骤 ### 1. 在UI中选择总结模式 1. 打开左侧栏角色卡片 2. 选择"帝国骑士维尔"角色 3. 进入编辑模式(点击角色卡片) 4. 在"历史记录模式"下拉框中选择 **"总结模式(定期总结历史)"** 5. 配置总结参数: - **总结间隔**:2(每2条AI回复触发总结) - **保留最近楼层**:2(最后2层不总结) - **包含用户输入**:勾选 - **总结提示词**:保持默认或自定义 6. 保存设置 ### 2. 开始对话测试 #### 预期行为 **初始状态**: - L1-L10:正常显示所有消息 **当AI回复达到2条时**(L2、L4、L6、L8): - 前端计数器检测到阈值 - 异步调用总结API:`POST /api/chats/帝国骑士维尔/恶魔女友长篇测试/summarize` - 传递参数: ```json { "start_floor": 1, "end_floor": 2, "summary_config": { "interval": 2, "recentFloorsToKeep": 2, "includeUserInput": true, "summaryPrompt": "...", "maxSummaryLength": 500 } } ``` **总结完成后**: - L1:`mes=""`, `is_summarized=true`(清空内容) - L2:`mes="总结文本"`, `is_summary=true`, `summary_range="L1-L2"` - L3-L10:保持不变 **继续对话到L4时**: - L3:`mes=""`, `is_summarized=true` - L4:`mes="总结文本"`, `is_summary=true`, `summary_range="L3-L4"` - L5-L10:保持不变 **到达L8时**(保护最后2层): - L7:`mes=""`, `is_summarized=true` - L8:`mes="总结文本"`, `is_summary=true`, `summary_range="L7-L8"` - **L9-L10:永远不会被总结**(因为设置了保留最后2层) ### 3. 验证总结效果 #### 检查点 ✅ **数据结构验证** ```bash # 查看聊天文件 cat data/chat/帝国骑士维尔/恶魔女友长篇测试.jsonl | jq . ``` 应该看到: - 被总结的楼层:`"mes": ""`, `"is_summarized": true` - 总结楼层:`"mes": "总结内容..."`, `"is_summary": true`, `"summary_range": "Lx-Ly"` ✅ **前端显示验证** - 空楼层应显示省略标记(如 "--- 已总结 ---") - 总结楼层应高亮显示,并显示范围提示 - 最后2层始终保持原始内容 ✅ **Prompt组装验证** - 发送给LLM的prompt中,`is_summarized=true`且`mes=""`的消息应被过滤 - 总结消息(`is_summary=true`)应保留并作为上下文 ✅ **正则处理验证** - 总结后的消息仍应经过正则处理器 - 空楼层不应影响正则匹配 --- ## 手动测试API 如果前端集成尚未完成,可以手动测试API: ```bash # 1. 获取聊天状态 curl http://localhost:8000/api/chats/帝国骑士维尔/恶魔女友长篇测试/summary-status # 2. 触发总结(总结L1-L2) curl -X POST http://localhost:8000/api/chats/帝国骑士维尔/恶魔女友长篇测试/summarize \ -H "Content-Type: application/json" \ -d '{ "start_floor": 1, "end_floor": 2, "summary_config": { "interval": 2, "recentFloorsToKeep": 2, "includeUserInput": true, "summaryPrompt": "请总结以下对话内容,保留关键信息和上下文。用简洁的语言概括主要事件、人物状态和重要细节。", "maxSummaryLength": 500 } }' # 3. 再次获取状态,验证总结结果 curl http://localhost:8000/api/chats/帝国骑士维尔/恶魔女友长篇测试/summary-status ``` --- ## 常见问题 ### Q1: 总结后消息丢失怎么办? A: 总结采用"楼层保留式"机制,原文被清空但楼层索引不变。可以通过查看JSONL文件恢复原始数据。 ### Q2: 总结质量不理想怎么办? A: 调整`summaryPrompt`提示词,或增加`maxSummaryLength`限制。 ### Q3: 如何重置总结状态? A: 目前需要手动编辑JSONL文件,将所有`is_summarized`和`is_summary`字段设为`false`,并恢复`mes`内容。 ### Q4: RAG模式为什么不能取消? A: RAG模式涉及数据库结构变更,一旦启用会产生持久化数据,为避免数据不一致,设计为不可逆操作。 --- ## 性能指标 - **单条消息平均长度**:~1,000字符 - **总结触发频率**:每2条AI回复 - **预计总结次数**:(10-2)/2 = 4次 - **LocalStorage占用**:< 1KB(仅存储计数器) - **API响应时间**:< 3秒(取决于LLM速度) --- ## 下一步优化 1. **前端集成**:在ChatBoxSlice中集成计数器逻辑 2. **自动触发**:用户发送消息时自动检查是否达到总结阈值 3. **进度显示**:在右侧栏任务队列中显示总结进度 4. **批量总结**:支持一次性总结多个区间 5. **总结历史**:保存每次总结的元数据(时间、长度等) --- ## 联系与支持 如有问题,请查看: - 后端日志:`docker-compose logs -f backend` - 前端控制台:浏览器开发者工具 - 相关文档:`WORLDBOOK_ACTIVATION_LOGIC.md`, `SETTINGS_TEST_GUIDE.md`