5.3 KiB
5.3 KiB
聊天记录总结功能测试指南
测试数据说明
已创建测试聊天:帝国骑士维尔 / 恶魔女友长篇测试
故事架构
- 主题:日式恶魔女友角色扮演
- 情节:User召唤魅魔,发现对方是前女友 → 签订契约 → 前女友表面嫌弃但内心不舍
- 长度:10层消息,前5层每层约2000字符,后5层为占位符
- 总字符数:约10,894字符
角色设定
- 雪乃(莉莉丝):前女友变成的高阶魅魔,银发红眼,哥特萝莉装,口是心非
- 我(User):召唤者,深情且坚定,愿意为爱牺牲
测试步骤
1. 在UI中选择总结模式
- 打开左侧栏角色卡片
- 选择"帝国骑士维尔"角色
- 进入编辑模式(点击角色卡片)
- 在"历史记录模式"下拉框中选择 "总结模式(定期总结历史)"
- 配置总结参数:
- 总结间隔:2(每2条AI回复触发总结)
- 保留最近楼层:2(最后2层不总结)
- 包含用户输入:勾选
- 总结提示词:保持默认或自定义
- 保存设置
2. 开始对话测试
预期行为
初始状态:
- L1-L10:正常显示所有消息
当AI回复达到2条时(L2、L4、L6、L8):
- 前端计数器检测到阈值
- 异步调用总结API:
POST /api/chats/帝国骑士维尔/恶魔女友长篇测试/summarize - 传递参数:
{ "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. 验证总结效果
检查点
✅ 数据结构验证
# 查看聊天文件
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:
# 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速度)
下一步优化
- 前端集成:在ChatBoxSlice中集成计数器逻辑
- 自动触发:用户发送消息时自动检查是否达到总结阈值
- 进度显示:在右侧栏任务队列中显示总结进度
- 批量总结:支持一次性总结多个区间
- 总结历史:保存每次总结的元数据(时间、长度等)
联系与支持
如有问题,请查看:
- 后端日志:
docker-compose logs -f backend - 前端控制台:浏览器开发者工具
- 相关文档:
WORLDBOOK_ACTIVATION_LOGIC.md,SETTINGS_TEST_GUIDE.md