推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
xgordon
V2EX  ›  Python

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

  •  
  •   xgordon · 1h 35m ago · 155 views

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

    背景:公司用 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 )。有了具名,行动项才能从"某参与人说要做某事"变成"张经理需在周五前提交报价"。


    技术栈

    • 说话人分割:pyannote community-1 ( GPU ,~28x 实时,比 CAM++ 分割准多了)
    • ASR:FunASR Paraformer-large
    • 声纹提取:CAM++ 192-dim embedding
    • LLM:OpenAI 兼容接口( Claude / GPT / 本地 Ollama 均可)
    • Wiki:纯 Python http.server + mistune ,零框架
    • 中文搜索:自制 Bigram 分词,不依赖 jieba

    几个踩坑记录

    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 。

    3 replies    2026-05-12 18:25:44 +08:00
    hoky
        1
    hoky  
       1h 11m ago
    正好最近在研究这个,感谢。
    ktyang
        2
    ktyang  
       1h 3m ago
    虽然用不到,但是支持一下
    Usrename
        3
    Usrename  
       50 mins ago
    不需要区分人,但是需要做录音的整理,是否很好的支持了?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3591 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 11:16 · PVG 19:16 · LAX 04:16 · JFK 07:16
    ♥ Do have faith in what you're doing.