从会议录音到知识库全自动:我把数百段录音做成了可 RAG 问答的 Wiki(附开源代码)

2 小时 34 分钟前
 xgordon

做了个会议录音 → 知识库的全自动管线,开源了,来分享一下。

背景:公司用 Plaud 录音笔积累了大量会议录音,但一直躺在那里没人整理。Plaud 自带的 AI 笔记质量一般,而且说话人都是匿名的( Speaker 1 、Speaker 2…),行动项根本没法落实到人。

做了什么

录音文件 → 说话人分割 → 身份具名 → AI 纪要 → Wiki 知识库
                                                    ↓
                                          可浏览 + 可搜索 + 可 RAG 问答

每天 22:00 cron 自动跑,0 人工干预。


最核心的部分:三阶段说话人具名漏斗

说话人识别我试过纯声纹方案,发现 CAM++ 跨录音根本不可靠——同一个人在不同录音的余弦相似度只有 0.50–0.65 ,反而不如不同人在同一录音的 0.85–0.97 。直接用声纹聚类,阈值 0.65 时同一个人被拆成 17 个簇。

最后用了三层漏斗:

优先级 方法 命中率
1 外部标签时间戳对齐(地面真相) ~95%
2 CAM++ 声纹余弦匹配(阈值 0.55 ) 填补剩余
3 LLM + 组织架构图 + 称呼惯例推断 兜底

最终 94% 片段具名率( 56,862 / 60,664 )。有了具名,行动项才能从"某参与人说要做某事"变成"张经理需在周五前提交报价"。


技术栈


几个踩坑记录

  1. pyannote 直接读 OGG 会有分割边界漂移,先 ffmpeg 转 16kHz WAV
  2. 54 分钟音频不加 VAD 直接跑 FunASR → 需要 43GB 显存 → OOM ,必须开 fsmn-vad
  3. LLM 输出 JSON 要多策略解析( strip code fence → bare JSON → trailing comma ),单一策略会静默丢结果
  4. S3 预签名 URL 不能带 Authorization header ,得用干净 session

开源地址https://github.com/xclgordon/plaud-pipeline

架构文档在 docs/architecture.md,比较详细。

需要 NVIDIA GPU ( pyannote 分割),其他没有特殊依赖。主流程已经和 Plaud 解耦,把录音文件丢进 recordings/ 文件夹就能跑。

欢迎提问和 PR 。

205 次点击
所在节点    Python
3 条回复
hoky
2 小时 11 分钟前
正好最近在研究这个,感谢。
ktyang
2 小时 2 分钟前
虽然用不到,但是支持一下
Usrename
1 小时 50 分钟前
不需要区分人,但是需要做录音的整理,是否很好的支持了?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1212230

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX