Files
SillyTavern_replica/CHAT_SUMMARY_TEST_GUIDE.md

174 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 聊天记录总结功能测试指南
## 测试数据说明
已创建测试聊天:**帝国骑士维尔 / 恶魔女友长篇测试**
### 故事架构
- **主题**:日式恶魔女友角色扮演
- **情节**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`