给跑团存音频做了个长期记忆引擎
组里跑团三四小时一期,录音堆到三十多期时才发现:普通会议纪要工具根本不懂奇幻专有名词,更不知道谁在说什么,每期都当孤岛处理。我折腾了个叫 Table Canon 的管线,专门解决跨期长程状态追踪——NPC 档案、未完成任务钩子、角色承诺的兑现情况,全靠结构化增量写入数据库,而不是把所有历史塞进上下文窗口。
几个踩坑记录
目前免登录可上传 6 小时音频试用,欢迎同样被跑团录音淹没的 DM 来踩坑、提意见。
下一篇
深蓝 G318 接入华为乾崑 ADS 5 Pro,方盒子终于能进城了 →
技术栈一览
- 转写:whisper-large-v3-turbo
- 说话人分离与声纹匹配:pyannote
- 实体抽取与状态更新:OpenAI Structured Outputs(JSON Schema 强制约束)
- 语音回顾生成:Kokoro / Chatterbox Turbo
- 球德风格总结歌词:ACE-Step-v1.5-XL-Turbo
几个踩坑记录
一、状态增量 vs 上下文爆炸
把前 20 期完整逐字稿喂进去,Token 成本和噪声双双失控。现在的做法:每期只产出原子级状态增量——NPC 档案增删改、新增地点、已解决/新增的承诺——直接落库。上下文窗口永远只看「当前增量 + 活跃实体快照」,跑到 30 期以上依然可控。
二、自建前置词典救专有名词
通用 STT 把「阿兹高尔」识别成「爱思高尔」,「米斯特拉」变「密斯特拉」。方案是在 Prompt 里注入本战役专用术语表(人名、地名、组织、法术名),首轮拼写准确率肉眼可见提升。
三、 VAD 分块避免显存泄漏
4 小时原始 wav 直接扔给 Pyannote/Whisper,显存飙升到 OOM,进程还会卡死。现在的预处理流程:先跑 Silero VAD 切出有效语音段,按固定时长(如 30 分钟)决定性分块,再并行喂模型,最后按时间轴拼回。
还在啃的硬骨头
- 实体别名消歧:玩家口里的「红衣主教」「亚瑟」「那个邪教头子」可能指同一个 NPC,也可能是三个人。现在靠用户事后在界面上合并/拆分实体兜底,想探索基于共指消解 + 向量相似度的半自动方案。
- 任务钩子闭环判定:LLM 很难可靠判断一个承诺是「已完成」「显式放弃」还是「隐性搁置」。目前在 Schema 里加了置信度字段 + 三值逻辑,但误判率还在 15% 左右。
目前免登录可上传 6 小时音频试用,欢迎同样被跑团录音淹没的 DM 来踩坑、提意见。
免费 AI 工具箱 · 全部完全免费
我试过把整段扔给Whisper再用GPT按"战斗/探索/社交/闲聊"分段,准度大概85%左右。关键得给模型喂足上下文——比如把NPC名单、地点名、关键道具当system prompt塞进去,否则很容易把"我去开个门"这种OOC当成剧情。
你要是不想折腾提示词,Notion AI或Mem.ai那种自带语义分块的工具可能更省事,直接按话题聚类,事后人工合一下就行。