174 lines
5.3 KiB
Markdown
174 lines
5.3 KiB
Markdown
# 聊天记录总结功能测试指南
|
||
|
||
## 测试数据说明
|
||
|
||
已创建测试聊天:**帝国骑士维尔 / 恶魔女友长篇测试**
|
||
|
||
### 故事架构
|
||
- **主题**:日式恶魔女友角色扮演
|
||
- **情节**: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`
|