我读完 [community_growth_20k.md](https://github.com/modelscope/FunASR/blob/main/docs/community_growth_20k.md) 我觉得应该再有一个 roadmap, 制定下一步的发展方向,甚至包括哪些 help wanted . 另外有个小问题,我好像以前也问过,但是看了 community_growth_20k 也没搞懂,就是 FunAudioLLM/Fun-ASR 这个项目的作用, 我能理解 FunAudioLLM 要强调 LLM-ASR model, 但还是搞不太清和 modelscope/FunASR 分工在哪里;另外如果作为使用者,需要知道 FunAudioLLM/Fun-ASR 这个项目吗? Repository | Role in the ecosystem | Growth surface -- | -- | -- modelscope/FunASR | Core toolkit, Python package, runtime services, deployment docs | First-run success, production deployment, issue/PR operations FunAudioLLM/Fun-ASR | Fun-ASR-Nano model family and LLM-ASR identity | Model cards, Transformers integration, benchmarks, vLLM/GGUF stories 我们关于 Fun-ASR-Nano 问题讨论也都是在 modelscope/FunASR 里不是在 FunAudioLLM/Fun-ASR | Fun-ASR-Nano 然后我读 modelscope/FunASR 的 [serve_realtime_ws.py](https://github.com/modelscope/FunASR/blob/main/examples/industrial_data_pretraining/fun_asr_nano/serve_realtime_ws.py) 和 FunAudioLLM的 [serve_realtime_ws.py](https://github.com/FunAudioLLM/Fun-ASR/blob/main/serve_realtime_ws.py) 觉得它们基本一样,但差异的地方又让人糊涂, 比如 modelscope/FunASR 有 `get_partial_decode_audio` 但 FunAudioLLM 的 没有,可是 `get_partial_decode_audio` 我们也讨论过几次,为什么 会一个有一个没有?
Activity
LauraGPT commentedon Jul 13, 2026
这个问题提得非常对。当前两个仓库的边界和重复示例没有表达清楚,确实会让使用者困惑;
get_partial_decode_audio的差异也不是有意设计成两套能力,而是 toolkit 侧的长语音/并发修复没有同步到模型仓库。我们后续按下面的边界维护:
modelscope/FunASRFunAudioLLM/Fun-ASR因此,普通使用者如果只需要通过 Python 包或服务部署 ASR,关注
modelscope/FunASR即可;需要选择 Nano/MLT checkpoint、了解模型能力或使用特定推理框架时,再看FunAudioLLM/Fun-ASR。对两份
serve_realtime_ws.py,我们会把 toolkit 版本作为生产实现的 canonical source,并推进三件事:Roadmap 会按
Now / Next / Later落到仓库文档并拆出 help-wanted:感谢把这个问题具体指出来。这个 issue 保持打开,直到 roadmap 和仓库边界文档真正落地。
qiulang commentedon Jul 13, 2026
@LauraGPT 我又读了一遍 serve_realtime_ws.py 觉得还是有个隐藏的问题:
audio_buffer会不断增加session.reset() 只是在 一开始
START调用一次,所以如果ws一直开着,内存拷贝会out of memory, 比如简单估算 16kHz float32 = 64 KB/s;客户端 100ms 一帧 → 每秒 10 次 np.concatenate,每次拷贝整个已累积 buffer。全程拷贝量 ≈ 32 KB × T² / chunk_sec我不知道我没有用哪里没看对,你再确认一下
LauraGPT commentedon Jul 13, 2026
你没有看错。我按当前 main(defff40e)把数据流重新走了一遍,结论是这个问题确实存在,而且比单纯的 audio_buffer 常驻还要严重一些。
所以这不是你漏看了某个清理路径,而是当前实现的真实长会话缺陷,也与 #3101 开启 speaker 后 30-60 分钟断线的复测结果吻合。我会把代码修复继续集中在 #3101:需要同时引入有绝对时间偏移的有界音频存储、不会引用旧大数组的 speaker chunk、以及有界或增量的 speaker 状态,不能只在现有数组上加一个简单 truncate。修复前可靠的规避方式仍是关闭 speaker,或按固定时长 STOP/重新 START 轮换 session。
qiulang commentedon Jul 13, 2026
从 3101描述那还真是。我最近一个项目做asr,所以就希望能对funasr 也贡献一点力量 (所以这个issue 提了想看看有没有 help wanted我能帮忙的),以后项目可能不做asr,就没精力再做贡献了。
另外我看你的提交代码的密集程度,简直是惊人! 一方面说明确实是能者多劳,但另一方面也说明可能真的需要有“真人”做 code review
LauraGPT commentedon Jul 13, 2026
@qiulang 谢谢你愿意在这段时间贡献,也谢谢你明确提醒需要人工 code review。这个方向同意:外部贡献的 PR 会保留给 maintainer 做人工审核,不会自动合并。
我先把这个 issue 标成
help wanted和ready for PR。为了不让你被 #3101 的 speaker 状态设计选择卡住,有一个可以独立完成、独立 review 的文档任务:docs/repository_roles_zh.md和对应英文docs/repository_roles.md。Now / Next / Laterroadmap;用现有 issue/PR 链接表达进度,不承诺无法保证的发布日期。modelscope/FunASR版本为 canonical source,模型仓库只链接它,不再把两份副本都描述为权威实现。README.md、README_zh.md和CONTRIBUTING.md加入清晰入口。验收重点是链接可达、四仓边界一致、没有复制新的服务代码。你如果愿意接这个任务,可以在这里回复“我来做”,或者直接开标题类似
Docs: clarify repository roles and roadmap (#3203)的 PR。#3101 的有界音频和 speaker 状态修复继续作为单独技术任务推进,避免一个 PR 同时承担文档治理和高风险实时服务改造。
qiulang commentedon Jul 13, 2026
这个我可以做,不过我还是想知道funasr下一步方向是什么 ,比如你说的 “Later: 官方可用 demo、容器化及稳定的 headless/API 工作流。“
官方可用dmo, 容器化指什么,example 目录下不是有很多这样的例子吗?
roadmap 我本来想到是 1.4.x 1.5x 主要做什么 2.x又规划做什么
LauraGPT commentedon Jul 13, 2026
可以,这个文档任务就由你来做;我不会同时另开一份重复 PR。
你指出得对,我前面写的“官方可用 demo、容器化及稳定的 headless/API 工作流”太抽象。
examples/里确实已经有很多 demo,缺的不是“再多放几个示例”,而是下面这些可验证的产品化入口:关于你说的
1.4.x / 1.5.x / 2.x:我刚核对了当前发布状态。仓库没有已建立的 milestone,GitHub Python tag 到v1.3.13,PyPI 已是1.3.14;目前没有经过核心 maintainer 确认的 1.4/1.5/2.0 边界。因此我们不能在文档 PR 里自行承诺版本号或发布日期。这次 PR 请先写成 directional roadmap,并单独注明 “Versioned release roadmap: pending maintainer confirmation”:
每一项尽量链接现有 issue/PR;没有 owner 或验收证据的内容不要写完成日期。你可以按这个范围直接开
Docs: clarify repository roles and roadmap (#3203),PR 会保留给 maintainer 做人工 review。LauraGPT commentedon Jul 13, 2026
给 roadmap 文档补一个最新状态,方便你在 PR 里引用:
文档任务范围不变,不需要把上述实现代码带进你的 PR。
10 remaining items
qiulang commentedon Jul 15, 2026
@LauraGPT 另一个提醒 vllm 官方文档 https://docs.vllm.ai/en/latest/models/supported_models/#transcription
列的fun-asr-nano 是 allendou/Fun-ASR-Nano-2512-vllm
这个我试过,
它这个是有问题,ASR结果重复 (换 https://huggingface.co/yuekai/Fun-ASR-Nano-2512-vllm 就没问题) , 但不知道什么和 #3031 有关,当时我也没细研究。 看你们能怎么提醒 vllm 官方这个,至少要加上官方的 Fun-ASR-Nano-2512.更正,没有问题,是我使用方法不对,当时刚开始接触funasr,还不懂,但又对vllm 有些了解,所以造成这个乌龙。lol
LauraGPT commentedon Aug 29, 2026
重新打开这个 issue。之前在 roadmap 文档合入后就关闭得太快,后续关于 vLLM 模型入口、权重来源与 safetensors 的问题仍未逐项回应,也没有等待提议者确认,关闭条件并不充分。
接下来我会在这里继续核对并更新公开 roadmap:已交付能力、仍在推进的上游集成,以及需要社区验证的部署边界都会按实际状态维护。这个 issue 会保持打开,直到上述问题有可复现结论并给提议者合理的反馈时间。感谢 @qiulang 当时指出这些具体问题。
LauraGPT commentedon Aug 29, 2026
路线图刷新已通过 #3567 合并,当前文档已同步到
funasr==1.4.7,并区分了已交付、进行中和下一步:这个 issue 不会因为文档合并就自动关闭。我会继续在这里回应你之前提出的 vLLM 模型入口、权重来源和 safetensors 问题,并等待你的反馈。
LauraGPT commentedon Aug 29, 2026
把你之前提出的 vLLM 模型入口、权重来源和 safetensors 问题做了一次按固定 revision 的核验。先给结论:你的困惑是合理的,当前确实存在两条不同的 vLLM 路径,不能把它们混写成同一种部署方式;这个 issue 继续保持 open。
1. 三个模型仓的职责并不相同
FunAudioLLM/Fun-ASR-Nano-2512272c57b8model.pt+config.yaml+ 独立Qwen3-0.6B/tokenizer/configAutoModelVLLM读取官方 checkpoint,在本地把llm.*310 个张量导出成临时model.safetensors;音频 encoder/adaptor 仍由 FunASR/PyTorch 执行allendou/Fun-ASR-Nano-2512-vllme718b36eFunASRForConditionalGeneration的社区转换;单个 safetensors 包含 encoder + adaptor + LLMvllm serve ...直接提供 OpenAI transcription API;这是 vLLM 当前文档和测试 registry 使用的模型yuekai/Fun-ASR-Nano-2512-vllm9fd10018inputs_embeds.pt示例我只读取了两个 safetensors 的 header,没有下载或改写权重:
allendou:1,261 个 tensors,包含 audio encoder/adaptor 和 LLM,LoRA tensor 为 0。yuekai:310 个 tensors,只有 Qwen3 LLM,LoRA tensor 为 0。config.yaml明确是use_lora: false;所以这里不是“运行时再加载一份 LoRA”。官方model.pt已包含训练后的完整llm.*权重,FunASR 的 vLLM 适配器只是把这些权重抽出并改存为 vLLM 更适合加载的 safetensors。2. 为什么 vLLM 文档还不能直接换成官方模型 ID
当前官方 HF 仓根目录没有 Transformers/vLLM 所需的
config.json、preprocessor_config.json和原生model.safetensors;它是 FunASR checkpoint layout。allendou转换仓补齐了这些文件并把 1,261 个权重改名为 vLLMFunASRForConditionalGeneration所需命名。vLLM 的主仓当前仍在:docs/models/supported_models.md指向allendou/Fun-ASR-Nano-2512-vllm;tests/models/registry.py也用同一模型做 registry 测试;因此现在直接把文档字符串替换成
FunAudioLLM/Fun-ASR-Nano-2512会让vllm serve找不到所需原生 layout,不是一个安全的文档修正。3. 正确的收敛方向
allendou是经过固定 revision 验证的社区转换,官方原始 checkpoint 仍是FunAudioLLM/Fun-ASR-Nano-2512。model.pt@272c57b8到 1,261-tensor safetensors 的确定性转换和哈希。allendou@e718b36e的现存结论。若当前版本仍能复现,请贴 exact vLLM/Transformers 版本、完整启动命令、音频 SHA256 和原始响应;这里会继续跟进,不会因 roadmap 文档已经合并而关闭。下一步不是再复制一套运行代码,而是把官方 vLLM 工件的发布责任、转换可重复性和上游 registry 测试收敛到同一个可验证对象。
LauraGPT commentedon Aug 30, 2026
补充上一条审计后的实质进展,issue 继续保持 open:
FunAudioLLM/Fun-ASR-Nano-2512-vllm,固定 revisiona4362c943d48951f98ca2a62181cc028970270c5,tagvllm-0.27.1-20260830。FunAudioLLM/Fun-ASR-Nano-2512@272c57b8转换;model.safetensors与此前验证的allendou@e718b36e逐字节一致(SHA25696dfbec48282dd24d3334369a01e9e909f321ee39a1b0003c528c5379f68c1a6),因此迁移模型 ID 不改变权重。680e2177上已准备 docs + registry 的最小迁移提交,并把 registry pin 到上述 immutable revision。exact-head dummy initialization 通过;pre-commit 全部通过。registry import 项因上游已知的 Transformers 5.2+ 不兼容约束在本机transformers==5.15.0下按规则跳过,这个约束没有被掩盖或删除。你原来指出“不要长期让官方能力依赖个人转换仓”是正确的。官方工件这一层已经补齐,上游 registry 迁移正在按其贡献规范推进;等你复测或上游完成迁移后再判断是否关闭。
LauraGPT commentedon Aug 31, 2026
你提出的“roadmap 应该让有能力、有时间的人知道可以参与什么”,我已经按中英文同时落成 PR #3593,exact head 是
100a5f2e284c7e8596e191ed7bb2513b1c27ddd7。这次不是再增加一份静态愿望清单,而是补了三层可执行入口:
good first issue、help wanted、ready for PR的实时查询与明确语义;文档也明确写了中文或英文都可以贡献;涉及路线图和仓库职责的改动,需要在同一个 PR 中同步中英文。你刚在 #3528 提到愿意帮忙写中英文内容,这类贡献非常欢迎。
同时修正了两处事实边界:当前 GitHub/PyPI 版本是
1.4.11;MOSS-Transcribe-Diarize 输出的是单次录音内的匿名 speaker labels,不是已知人物身份识别。验证为 18 项文档测试通过、相对链接检查通过、提交签名并满足 DCO。这个 issue 继续保持 open,等你和其他贡献者对入口是否清楚给反馈,不会因为 roadmap PR 合并就自动关闭。
qiulang commentedon Sep 1, 2026
补充更正我之前对
allendou/Fun-ASR-Nano-2512-vllm模型的描述。我最早说它的 ”ASR结果重复“是因为当时我还不懂funasr,使用方式不对造成。现在对他们了解就知道原因:
allendou/Fun-ASR-Nano-2512-vllm的权重文件是model.safetensors, 必须用vllm的启动方式vllm serve xxx/allendou/Fun-ASR-Nano-2512-vllm --port 8000使用FunAudioLLM/Fun-ASR-Nano-2512权重文件你已经解释了,权重文件是pytorch训练下生成的model.pt, 所以使用前需要调用 inference_vllm.py的prepare_vllm_model_dir()从Qwen3-0.6B/这个子目录下 复制配置与 tokenizer,model.pt提取llm.*权重我当时应该是用较早的 funasr 版本这样启动
python ./FunASR/examples/industrial_data_pretraining/fun_asr_nano/serve_realtime_ws.py --model allendou/Fun-ASR-Nano-2512-vllm ...虽然起来了,但是asr结果错。但是现在funasr版本 (从1.3.9之后)如果这样启动就会报错了
FileNotFoundError: Qwen3-0.6B config directory not found ...所以这个问题就不存在了 (就是没法用官方funasr的代码加载allendou/Fun-ASR-Nano-2512-vllm)。所以我想 #3475 那个问题单可以关闭了,还可以做的就是补充 vllm_guide_zh_v2 那里描述,可以提到如果是用
allendou/Fun-ASR-Nano-2512-vllm使用方式必现是vllm serve allendou/Fun-ASR-Nano-2512-vllm --port xxxx而不是 funasr 官方的python -m funasr.bin.realtime_ws, 而且 vllm的实时流式需要自己实现 ,参见 https://docs.vllm.ai/en/latest/examples/speech_to_text/realtime/ 和https://docs.vllm.ai/en/latest/models/supported_models/#transcriptionLauraGPT commentedon Sep 1, 2026
针对你刚补充的“native vLLM 模型不能用 FunASR realtime WebSocket 启动”的结论,我已提交可审查的文档 PR #3603:
exact head a9c4069,本地针对性测试 4 passed,GitHub contract check 已成功。该 PR 仍等待独立 maintainer review;本 issue 继续保持 open,等待你确认这条入口说明是否清楚。
qiulang commentedon Sep 2, 2026
native-vLLM 我会在仔细验证一下
native vLLM 模型不能用 FunASR realtime WebSocket 启动, 这个如果要验证可以这样试验, 返回 403 (不是 404 )
是 403 不是 404 (开始我还纳闷了一下),查了fastapi 查发现是因为 uvicorn websocket.close,一律翻译成 403
文档需要我验证会慢一点。抱歉,这两天工作中的事多,实际空闲时间就少了
LauraGPT commentedon Sep 2, 2026
感谢你把实际 403 握手和 Uvicorn 的解释补全,这个区别很重要。
403表示当前服务拒绝了 WebSocket 握手,并不意味着 native Fun-ASR 获得了可用的 realtime session;也不能把“必须是 404”写进文档。我已据此更新 #3603:现在明确 403 只是当前实现表现,不是稳定 API 契约或支持性探测;文档仍只承诺 native
vllm serve的请求/响应转写路径。回归契约已通过。你按自己的节奏验证即可,不急;#3203 保持 open 等你的文档体验反馈。LauraGPT commentedon Sep 2, 2026
你补充的 403 握手实测和 Uvicorn 行为说明已经据实纳入文档边界。对应修正现已通过 #3601 合并到 main:
bb7599d22e3d5a52dc111699565b11136b373a05;合并提交:fddf9b486bc87e44b9a2afe395437d4c89243b37。FunAudioLLM/Fun-ASR-Nano-2512-vllm的入口是vllm serve加 OpenAI-compatible/v1/audio/transcriptions,不是 FunASRserve_realtime_ws.py或AutoModelVLLM。/v1/realtime的 403 只是当前 Uvicorn/FastAPI 的 WebSocket 拒绝表现,不作为 404/403 的支持性契约。native vLLM 未注册 FunASR realtime session;需要低延迟 partial 时,继续使用 FunASR WebSocket 服务,或在应用侧实现 vLLM 的分段与请求调度。感谢你愿意按自己的节奏继续验证。这个 issue 保持 open,等待你确认入口表述和实际部署体验是否清楚;不会因文档合并而提前关闭。
LauraGPT commentedon Sep 2, 2026
你提出的“官方能力不应长期依赖个人转换仓”现在已进入 vLLM 上游 PR:vllm-project/vllm#54944 。
这份 PR 将 supported-models 文档和 FunASR registry 从 allendou/Fun-ASR-Nano-2512-vllm 更新到官方 FunAudioLLM/Fun-ASR-Nano-2512-vllm,并固定为 immutable revision a4362c943d48951f98ca2a62181cc028970270c5。本地 pre-commit、引用和格式检查、官方 Hub config 的 architecture 元数据均已通过;提交已签名且满足 DCO。
vLLM 的新贡献者 CI 准入目前要求项目方加 verified 或 ready 标签,或作者已有四个已合并 PR。该工作流明确禁止 AI 请求标签,因此我不会绕过这项规则或制造无效 CI 重跑。PR 保持打开,等待 vLLM 的正常维护流程;一旦有实际 code review 或 CI 反馈会直接处理。
这里继续保持 open,等待你确认官方 vLLM 工件与部署入口的表述是否清楚,也继续接收 roadmap/贡献入口的反馈。
qiulang commentedon Sep 2, 2026
最新main branch 上的 vllm_guide 中英文我都读过确认,这次把 "Choose the model path" 下的 A/B 两条路差别解释得很清楚了
allendou/Fun-ASR-Nano-2512-vllm的存在和作用也说清楚了 , #3475 可以关闭了另,我在之前一条回复说的不太准确:
这个错就是 vllm_guide 里写的 "不要把任一 native checkpoint 传给 AutoModelVLLM", 把 native checkpoint 传给 AutoModelVLLM 会报 FileNotFoundError.
但我查到我的自己git项目历史记录,我当时是自己简单写了一个测试funasr的代码,根本原因就是当时不懂
allendou/Fun-ASR-Nano-2512-vllm到底要怎么用。