v0.3 把历史会议管起来之后,下一个需求就来了:能不能不等录完再处理,而是开会时边说边出字?正好Kimi K3发布,我就全程用K3折腾了一阵子,v0.4 就把这个能力补上了。v0.4 改了什么
开会时打开浏览器,点「开始实时记录」,麦克风里的声音会实时转成文字显示在页面上。点停止后,它会把录音存成 wav,把原文存成 json,然后进入和上传录音一样的整理流程:校对、整理、生成结构化纪要。标准模式:内置 FunASR 流式引擎,macOS / WSL / Linux 都能用,不需要额外配置增强模式:基于 GPU 的 Fun-ASR-Nano vLLM sidecar,方言、口音、远场识别更准,但环境要求更高,放在 v0.5 再提供实时转录是怎么跑起来的
- 后端用 FunASR 的流式模型 paraformer-zh-streaming 逐段识别
- 停止后,后端把整段录音保存下来,再用离线 ASR 跑一遍,得到准确的说话人和时间戳
所以实时页面上的文字更像是草稿,最终质量得靠停止后的离线那一遍。我踩了 4 个坑
浏览器有个安全规则:麦克风权限只给 localhost 或 HTTPS。如果你在局域网用 http://192.168.x.x:8000 打开,浏览器直接拒绝授权,点「开始」没反应。解决方式是在 config.yaml 里打开 SSL:server: ssl: enabled: true
重启后 run.sh 会自动生成自签名证书到 certs/ 目录,局域网设备通过 https://一开始实时字幕把一大段没标点的文字全堆在 partial 区域,根本没法读。流式模型返回的是原始识别文本,标点要自己补。问题报给K3, K3加了 ct-punc 标点模型给流出的文字实时打标点,同时把 partial 显示区域限制成最多 60 个字符的滑动窗口。页面不会挤成一团,眼睛能跟得上。WSL 有 GPU,但增强模式需要单独启动一个 sidecar 服务。有用户看到增强模式选不了,以为是 bug。v0.4 的处理是直接:增强模式标成"v0.5 提供",前端选择器灰色禁用,点不了。README 和 WSL 部署指南也同步更新,避免误解。实时流式模型只管识别文字,不管说话人分离。刚开始在实时字幕里会硬显示"说话人0",其实是误导。既然区分不聊,所幸就把实时页面的说话人标签去掉了,只显示文字。最终准确的说话人信息由停止后的离线 ASR 来生成,那一步的说话人分离是 OK 的。Kimi K3 在这个过程中做了什么
- 理解 FunASR 流式模型的 API 签名,设计合适的 chunk 大小和缓存策略
- 写实时字幕的增量更新逻辑,处理 partial 和 final 的衔接
- 同步改 README、WSL 部署指南、CLAUDE.md,保证文档和代码一致
- 检查多文件之间有没有漏掉的地方,比如 cache-buster 有没有 bump
我负责拍板方案、验证效果、决定哪些功能进 v0.4、哪些放到 v0.5。Kimi K3 负责把这些决定落地成代码,同时提醒我哪里漏了——比如文档有没有同步、cache-buster 有没有 bump。实时转录涉及 app/stream.py、app/main.py、app/asr.py、static/live.js、README、WSL 部署指南等七八个文件,改完代码还得保证文档不脱节。得益于Kimi K3 的1M上下文和超强的编码能力,能在一次对话里记住所有改过的文件,同步更新相关段落,还是很强的。升级 / 试用
用着 v0.3 的,直接 git pull 然后重启就行,数据目录和配置都不动。git clone https://github.com/baigong-ai/Tingji.gitcd Tingjicp config.yaml.example config.yamlbash scripts/download_models.sh./run.sh
打开 http://localhost:8000,首页点「实时记录」就能试。如果要在局域网其他设备上开麦,记得按上面说的开启 SSL。仓库地址:https://github.com/baigong-ai/Tingji懒人通道:把仓库地址https://github.com/baigong-ai/Tingji直接发给 Claude Code、Codex 或者其他能跑命令的 Agent,让它按 README 去部署安装或者升级即可。v0.4 已做和待做
立即咨询 JOTO
JOTO 提供覆盖企业智能体规划与搭建、AI 平台私有化部署、RAG 知识工程、AI 安全治理、FDE 驻场共创及持续运营优化的全周期 AI 落地服务,帮助企业把验证中的 AI 能力转化为安全、可控、可持续迭代的生产力。 联系 JOTO 获取 AI 落地咨询