Files
SillyTavern_replica/CHAT_SUMMARY_TEST_GUIDE.md

5.3 KiB
Raw Blame History

聊天记录总结功能测试指南

测试数据说明

已创建测试聊天:帝国骑士维尔 / 恶魔女友长篇测试

故事架构

  • 主题:日式恶魔女友角色扮演
  • 情节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

  • 前端计数器检测到阈值
  • 异步调用总结APIPOST /api/chats/帝国骑士维尔/恶魔女友长篇测试/summarize
  • 传递参数:
    {
      "start_floor": 1,
      "end_floor": 2,
      "summary_config": {
        "interval": 2,
        "recentFloorsToKeep": 2,
        "includeUserInput": true,
        "summaryPrompt": "...",
        "maxSummaryLength": 500
      }
    }
    

总结完成后

  • L1mes="", is_summarized=true(清空内容)
  • L2mes="总结文本", is_summary=true, summary_range="L1-L2"
  • L3-L10保持不变

继续对话到L4时

  • L3mes="", is_summarized=true
  • L4mes="总结文本", is_summary=true, summary_range="L3-L4"
  • L5-L10保持不变

到达L8时保护最后2层

  • L7mes="", is_summarized=true
  • L8mes="总结文本", 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=truemes=""的消息应被过滤
  • 总结消息(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_summarizedis_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