FunASR 产品部署中心(Deployment Hub)设计:将官网打造为可验证的私有化语音部署入口
【免费下载链接】FunASROpen-source speech recognition toolkit for training, inference, streaming ASR, VAD, punctuation, speaker diarization pipelines, and OpenAI-compatible/MCP serving.项目地址: https://gitcode.com/GitHub_Trending/fun/FunASR
本设计文档定义 FunASR 官网www.funasr.com的产品化改造方案:从"项目与教程页面集合"升级为面向生产部署的产品入口,帮助开发者、平台工程师和技术负责人在不翻阅 GitHub 仓库的情况下,回答四个问题——选哪个运行时、最短可验证命令是什么、上线前还要补什么、精确的发布资产与证据在哪里。文章以设计规格为骨架,结合仓库中已落地的静态构建、部署注册表与校验实现,说明该方案如何从文档走向可运行的代码。
1. 改造动机:从"有流量"到"能转化部署"
设计文档给出的现状证据指出:官网在 2026-07-26 报告了 5,527 次页面浏览与 2,182 个独立访客,其中首页 1,485 次,而quickstart.html仅 82 次、models.html仅 76 次。这说明站点已有分发能力,但从落地页到部署成功的路径很弱。
同时,内容表面是碎片化的:
- 首页提到"工业部署",但没有提供部署决策流程;
- 存在独立的
llama-cpp.html,但 vLLM、WebSocket、OpenAI API、容器、ONNX、Triton 与运维内容没有形成连贯的产品家族; - GitHub 的
web-pagesVue 源码与手工维护的线上静态 HTML 已经分叉; - 线上
tracker.js向/stats/log上报,但 Nginx 没有对应路由,导致github_clicks始终为零,转化无法度量; - Nginx 直接从可变的
dist目录提供服务,部署与回滚不具备原子性; - 配置的 TLS 协议列表仍包含 TLS 1.0 与 1.1。
仓库内部其实已经沉淀了很强的素材:部署矩阵、模型选型指南、带健康检查与模型列表的 OpenAI 兼容 API、Docker Compose 与 Kubernetes 示例、生产 WebSocket 指引、vLLM 基准与并发说明、ONNX/C++ 与 Triton 运行时,以及九个跨平台 llama.cpp/GGUF 发布资产。问题不在于缺少内容,而在于缺少一个把内容组织成"部署决策"的产品结构。
2. 范围界定:第一版做什么、明确不做什么
2.1 第一版包含的内容
- 围绕部署选型重新设计中英文首页;
- 新增双语
/deploy/产品中心与七个部署详情页; - 引入统一的部署数据模型:状态、硬件、模型、命令、证据、限制与发布链接;
- 统一生成页与存量页的主导航,同时保留
功德榜/Donors作为导航末项; - 保留现有博客、演示、语音资产与高价值的已收录 URL;
- 将公开站点语料导入源码控制(排除备份、访问统计、日志与生成产物),保证发布可以不读取生产主机上的可变文件即可重建;
- 保留
/llama-cpp.html与/en/llama-cpp.html作为永久兼容入口,并通过 canonical 链接指向新的部署页; - 为 GitHub、文档、发布与部署等固定 CTA 增加保护隐私的第一方转化度量;
- 用版本化发布 + 原子
current符号链接替换可变就地部署; - 加固 Nginx:仅 TLS 1.2/1.3、安全响应头、缓存策略与确定性重定向。
2.2 第一版明确排除
- 重写全部既有博客文章;
- 在
www.funasr.com托管公开推理 API; - 在没有仓库证据的情况下宣称某个运行时"生产就绪";
- 在网站改造中给 FunASR 服务端内置认证、限流或 Prometheus 指标——站点会明确说明哪些控制是原生的、哪些属于 API 网关;
- 将全站迁移到 Astro 或其他完整内容框架。
设计文档特别强调一个边界:站点的职责是如实说明运行时原生能力与网关/基础设施责任的分界,而不是替服务端添加不属于它的功能。这一原则也体现在部署详情页的"安全边界"章节中。
3. 产品定位:第一屏即"可私有化部署的语音智能基础设施"
首个视口直接用产品名作为标题:
FunASR
支撑文案(中文):
可私有化部署的语音智能基础设施。覆盖 GPU 高吞吐、实时流式服务、OpenAI 兼容 API,以及 CPU 与边缘独立运行。
英文:
Private-deployment speech infrastructure for high-throughput GPU inference, real-time streaming, OpenAI-compatible APIs, and standalone CPU or edge use.
主 CTA 是选择部署方案/Choose a deployment,次级动作是5 分钟验证/Verify in five minutes。GitHub 保留在页头可见位置,但不替代部署工作流——这是定位上的一次关键转换:GitHub 从"入口"降级为"来源"。
上图即设计中要求的"自定义部署拓扑位图"落地资产(见 web-pages/product-site/assets/images/),直观呈现从 GPU 服务器到 CPU/边缘客户端的部署光谱,供首页 hero 区域叠加使用。
4. 信息架构:8 项主导航与 9 条新路由
主导航顺序固定为:
- Product / 产品
- Deploy / 部署
- Models / 模型
- Benchmarks / 性能
- Ecosystem / 生态
- Blog / 博客
- Docs / 文档
- Donors / 功德榜
语言切换与 GitHub 动作作为独立的页头控件存在。这一导航清单在实现中对应 web-pages/product-site/data/navigation.json,每项同时携带中英文标签与中英文 href,成为"同一份导航清单喂给所有新页面与存量页规范化器"的单一事实来源。
新增路由如下:
| 中文路由 | 英文路由 | 用途 |
|---|---|---|
/deploy/ | /en/deploy/ | 工作负载与硬件部署选择器 |
/deploy/vllm.html | /en/deploy/vllm.html | Fun-ASR-Nano GPU 批量与高吞吐推理 |
/deploy/llama-cpp.html | /en/deploy/llama-cpp.html | CPU、桌面与边缘 GGUF 运行时 |
/deploy/openai-api.html | /en/deploy/openai-api.html | OpenAI 兼容私有转写 API |
/deploy/realtime.html | /en/deploy/realtime.html | WebSocket 实时字幕与流式 ASR |
/deploy/containers.html | /en/deploy/containers.html | Docker Compose 与 Kubernetes 服务部署 |
/deploy/cpu-runtime.html | /en/deploy/cpu-runtime.html | ONNX/C++ 高并发 CPU 部署 |
/deploy/production.html | /en/deploy/production.html | 安全、就绪、容量、可观测性与上线检查清单 |
/benchmarks.html | /en/benchmarks.html | 可复现基准证据与方法论 |
既有quickstart.html、models.html、ecosystem.html、/blog/与功德榜路由保持稳定。
5. 页面设计:可扫描的产品表面
5.1 首页:运营型产品界面而非营销拼贴
- 全宽品牌 hero:一张自定义部署拓扑位图 + 可审查的真实终端/API 输出(以 HTML 分层呈现,而非烘焙进图片);
- 紧凑的部署选择器:分段控件选择工作负载与硬件,推荐一条路径并解释原因;
- 事实证明条:Apache-2.0、支持的操作系统家族、OpenAI 兼容端点、验证日期与基准证据;
- 按工作负载、硬件、接口与成熟度组织的部署矩阵;
- 真实 API 契约示例:
/health、/v1/models、/v1/audio/transcriptions; - 生产就绪条:区分原生能力与网关/基础设施责任;
- 已验证运行时下载与生态采纳;
- 末尾的部署与 GitHub CTA。
设计约束还要求"下一区块在常见桌面与移动视口高度下保持可见",避免用户首屏只能看到 hero 而看不到任何决策内容。
上图是浏览器测试产出的首页桌面端截屏(见 web-pages/product-site/tests/browser/screenshots/),可看到"从工作负载开始""无 JavaScript 也能完成选择"的矩阵区与终端命令区,即设计文档 6.1 节所述结构的实际渲染效果。
5.2 部署选择器:确定性的输入与输出
输入:
- 工作负载:文件批量、实时流、私有 API 或边缘应用;
- 硬件:NVIDIA GPU、通用 CPU、桌面/边缘 GPU 或 Kubernetes 集群;
- 优先级:吞吐、延迟、可移植性或兼容性。
输出:
- 推荐运行时;
- 支持的模型家族;
- 匹配原因;
- 主要限制;
- 指向详情页的直接链接。
选择器是确定性的,编码在部署注册表中:不向服务器发送数据,且在无 JavaScript 时通过其下方的完整矩阵兜底工作。
5.3 部署详情页统一模板
每个部署页使用相同的可扫描结构:
- 状态、最近验证日期、测试的 FunASR 版本与证据链接;
适合/不适合指引;- 支持的模型、硬件、操作系统与接口;
- 可直接复制的安装与启动命令;
- 带预期输出的健康检查或 smoke test 命令;
- 架构与请求流;
- 容量规划变量与基准方法;
- 安全与网络边界;
- 运维:就绪、日志、模型缓存、优雅重启与回滚;
- 已知限制与故障排查;
- 发布资产、深入文档、issue 模板与 GitHub 动作。
5.4 基准页:无条件的性能数字一律不出现
设计文档立下硬性规则:每个指标必须附带模型、运行时、硬件、数据集或音频时长、批量/并发设置、是否排除下载与预热、来源链接与验证日期;页面区分批量 RTFx 与实时流式容量,并明确警告"不要把一个流量画像当作普适的并发承诺"。
6. 部署选择器的实现:加权评分与稳定平局
选择器并非前端硬编码,而是由 web-pages/product-site/selector.py 提供确定性的推荐评分。核心逻辑如下:
- 三类输入各自限定在受控取值集合内(
SUPPORTED_VALUES),非法取值直接抛ValueError; - 匹配权重:工作负载 4 分、硬件 3 分、优先级 2 分(
MATCH_WEIGHTS); - 对每个
selectable的注册表条目,按三类输入是否命中累加得分; - 得分相同(负数取最小)时以
selector_rank作为稳定平局键,再以条目id兜底,保证同一输入永远得到同一推荐; - 最终结果附上双语
selection_reason与primary_limitation,即"为什么匹配"与"主要限制"。
从源码结构看,recommend()的输出被build.py的_selector_payload()打包进页面上下文(含权重、条目路由、排名、双语名称/原因/限制),前端仅负责呈现,不参与决策。这与设计文档"选择器确定性、可无 JS 兜底"的要求一一对应。
7. 内容与证据模型:双语部署注册表
设计的"单一事实来源"是仓库中的双语部署注册表 web-pages/product-site/data/deployments.json。每个条目包含:
- 稳定 id 与中英文路由;
- 中英文名称、摘要、适合/不适合与限制;
- 成熟度:
production-verified(生产验证)、community-verified(社区验证)或experimental(实验); - 支持的模型、硬件、操作系统与接口;
- 安装、启动、健康检查与 smoke test 命令;
- 测试的 FunASR/运行时版本与验证日期;
- 带完整条件的基准记录;
- 发布资产与文档证据;
- 运维与安全责任。
以注册表中的llama-cpp条目为例,它声明成熟度为production-verified,测试环境为runtime-llamacpp-v0.2.6+llama.cpp@c8d43b10,验证日期 2026-08-30,并列出 Linux/macOS/Windows 共九个预编译资产(CPU、AVX2、Vulkan、CUDA、Blackwell sm_120),每个资产均带 sha256 校验和。
注册表的校验由 web-pages/product-site/registry.py 实施,规则与设计文档第 8 节逐条对应:
production-verified条目必须具备tested.verified、tested.funasr、tested.runtime、commands.smoke(见PRODUCTION_FIELDS),缺一即报错;- 每个证据 URL 必须为 https(
_is_https_url); - 中英文翻译字段集合必须完全一致(
TRANSLATION_FIELDS与"translation fields must match"检查); - 下载资产的 sha256 必须是 64 位小写十六进制;
- 基准记录必须补齐
BENCHMARK_FIELDS全部 11 个字段(model、runtime、hardware、workload、audio、settings、timing_scope、result、qualification、source、verified),这正是"无条件的性能数字一律不出现"的数据层保障。
任何"生产验证"条目缺失验证日期、证据链接、测试版本、smoke test 或明确限制,构建即失败。URL 与模型别名会被验证,中英文条目结构必须一致。
8. 静态构建架构:无运行时依赖的纯静态产物
设计文档规划的目录结构:
web-pages/product-site/ assets/ content/ data/deployments.json legacy/ templates/ build.py validate.py requirements-site.txt tests/该结构已在仓库中完整落地,且构建逻辑集中在 web-pages/product-site/build.py。关键实现细节:
- 构建环境:Python 3.11+,使用固定的 Jinja2 与 Beautiful Soup 构建依赖,输出零运行时依赖的静态 HTML/CSS/JS、sitemap、重定向与部署清单;
- 存量页快照:
legacy/目录是已追踪的公开路由、内容与演示资产快照,构建时从快照复制,绝不读取可变的生产目录; - 导航规范化:对每个含
nav.nav的存量 HTML,调用 web-pages/product-site/legacy.py 的normalize_document()替换导航壳、注入 canonical/hreflang 元数据(_metadata_markup),并删除已废弃的/stats/tracker.js引用与 Google Fonts 依赖(_remove_metadata_links、_remove_excluded_runtime_dependencies);该规范化是幂等的,且保留文章正文; - 资产指纹:
_copy_hashed_assets()对全部资产计算 sha256 并以name.<digest12>.ext重命名,HTML 不缓存、不可变资产长期缓存; - 路由渲染:
route_path()将/deploy/vllm.html一类路由映射为对应输出文件;_write_sitemap()从每个页面的 canonical 链接反推 sitemap,保证 sitemap 与真实产物一致; - 清单产物:构建末尾写出
deployment-manifest.json,记录全部页面路由与资产哈希,作为后续部署校验的对照基准; - 暂存即完成:所有产物先在临时暂存目录(
tempfile.mkdtemp(prefix='.funasr-product-build-'))生成完毕,最后才stage.replace(output_dir)一次性替换,与"完整产物先于任何线上变更存在"的要求一致。
部署详情页的渲染模板 web-pages/product-site/templates/deploy-detail.html 也验证了设计的可扫描结构:页面通过data-section属性标记 fit、commands、smoke-test、operations、security、limitations、evidence 等章节,命令块带复制按钮与data-copy-target,下载资产表逐行带data-field="sha256",状态徽章按成熟度分级渲染(status-{{ entry.maturity }})。
9. 部署与回滚:原子切换的current符号链接
设计规定部署目标为:
/root/FunASR/web-pages/releases/<UTC timestamp>/校验通过后原子切换:
/root/FunASR/web-pages/current -> releases/<UTC timestamp>Nginx 只服务current。完整步骤:
- 在隔离的 worktree 中构建;
- 校验生成的 HTML、链接、sitemap、语言对与资产哈希;
- 上传到新发布目录;
- 对暂存目录执行 live-root 检查;
- 备份 Nginx 配置,
nginx -t通过后才 reload; - 原子切换符号链接;
- 执行公网 HTTPS 与浏览器 smoke test;
- 任一步骤失败则切回上一发布。
部署过程中没有任何命令会修改或删除更早的发布版本。配套的发布操作文档见 docs/operations/funasr-com-site-release.md,其中说明了备份、原子切换与回滚的完整流程。
Nginx 与度量改造
- 只服务原子
current目录; - 仅允许 TLS 1.2 与 1.3;
- 增加与本地资产及既有视频嵌入兼容的内容安全策略;
- 增加
Permissions-Policy,保留 HSTS、frame、content-type 与 referrer 头; - HTML 不缓存,版本化资产长期不可变缓存;
- 为 GitHub、文档、发布与部署 CTA 增加固定 302 路由(
/go/github、/go/releases等,见 web-pages/product-site/build.py 中_page_context注入的github_url/releases_url),这些路由不是开放重定向; - 固定重定向路由写入专用转化访问日志。
设计明确移除失效的信标端点:转化上报由第一方访问日志推导,不存音频、表单输入、Cookie 或持久访客标识;报告包含页面浏览、部署详情页浏览与固定外链动作。
10. 失败处理与验证体系
10.1 失败处理策略
- 构建错误、证据缺失、双语结构非法、链接断裂或 sitemap 不一致会中止部署;
- 存量页导航规范化在副本上执行,解析不到预期结构即中止;
- 部署选择器始终有无 JavaScript 矩阵兜底;
- 未知路由返回双语 404,附带部署、文档与首页链接;
- 已收录路由保持可用,或使用带 canonical 与 hreflang 元数据的永久重定向;
- Nginx 检查或公网 smoke test 失败时,上一发布保持生效。
10.2 验证:构建、浏览器与线上三层
构建与内容层(对应 web-pages/product-site/tests/ 下的 pytest 套件与 web-pages/product-site/validate.py):
- 注册表校验、路由生成、选择器决策与导航规范化的单元测试;
- 全部中英文路由对的生成产物测试;
- 每个生成页与存量页的 HTML 解析与内部链接检查;
- sitemap、canonical、hreflang、robots、结构化数据与重定向检查;
- 精确的模型别名、包版本、发布资产与文档链接检查;
- 每个基准与 production-verified 状态的证据检查。
validate.py的实现细节值得注意:它会检查部署详情页(/deploy/与/en/deploy/下的二级/三级路由)是否齐备REQUIRED_DEPLOYMENT_SECTIONS(fit、commands、smoke-test、security、limitations、operations、evidence)与data-field="verified-date",并逐页校验内部链接、hreflang 对等页、JSON-LD 合法性与资产哈希一致性,最后核对 sitemap 路由集合与产物完全相等。
浏览器层:
- Playwright 在 390x844、768x1024、1440x900、1920x1080 四种视口运行;
- 覆盖首页、部署索引、全部详情模板、移动导航、选择器状态与双语页面的截图;
- 检查无横向溢出、控件重叠、隐藏标题或文本裁剪;
- 检查键盘导航、可见焦点、语义地标、对比度、alt 文本与 reduced-motion 行为;
- 验证 hero 资产加载且首屏露出下一区块;复制按钮、语言链接、选择器推荐、旧 llama.cpp 路由与固定外链重定向均可用。
浏览器测试源码位于 web-pages/product-site/tests/browser/,其中 playwright.config.ts 定义了测试矩阵与自持 HTTP 服务器(拒绝复用被占用的端口)。
线上层:
- 所有 canonical 路由与资产返回 HTTPS 200;
- 缓存与安全头正确;
- TLS 1.0/1.1 被拒绝,TLS 1.2/1.3 被接受;
- 公网 sitemap 路由与生成清单相等;
- 转化日志记录固定外链动作;
- 既有博客与演示契约保持绿色。
11. 上线顺序与成功标准
11.1 分步上线
- 添加生成器、注册表、校验与测试;
- 构建双语首页与部署索引;
- 构建七个部署页与基准页;
- 规范化存量导航并保留旧路由;
- 添加版本化部署、Nginx 加固与转化日志;
- 运行完整本地与暂存浏览器验证;
- 原子部署、公网验证并监控首个 24 小时。
11.2 成功标准
第一版发布仅在以下条件全部满足时才算完成:
- 全部规划的双语路由公开且通过生成清单;
- 访客能在两次交互内获得有依据的部署推荐;
- 每个生产声明都有精确的仓库或发布证据;
- vLLM 与 llama.cpp/GGUF 各有一条完整的生产向页面;
- 旧的高价值 URL 与全部博客/演示契约保持有效;
- 部署是原子的且回滚被证明可行;
- GitHub、文档、发布与部署 CTA 转化可度量;
- 桌面与移动浏览器检查通过,无重叠或溢出;
- 线上站点通过安全头、TLS、sitemap 与链接验证。
12. 仓库内的关联证据链
本文所述设计均有仓库内实现与文档支撑,可按以下路径继续深入:
- 设计规格原文:docs/superpowers/specs/2026-07-26-funasr-product-deployment-hub-design.md
- 产品站源码与内容归属说明:web-pages/product-site/README.md
- 部署注册表(内容与证据模型的事实来源):web-pages/product-site/data/deployments.json
- 构建、校验、选择器与存量页规范化:build.py、validate.py、selector.py、legacy.py、registry.py
- 部署详情页模板(可扫描结构落地点):web-pages/product-site/templates/deploy-detail.html
- 部署矩阵与模型选型(部署中心的内容底座):docs/deployment_matrix.md、docs/model_selection.md
- vLLM 与 llama.cpp 路径的官方验证记录:docs/vllm_guide.md、docs/vllm_official_native_validation.md、runtime/llama.cpp/README.md、runtime/llama.cpp/BENCHMARKS.md
- OpenAI 兼容 API 与安全指南:examples/openai_api/README.md、examples/openai_api/OPENAPI.md、examples/openai_api/SECURITY.md
- 容器、CPU 与 Triton 运行时:examples/openai_api/kubernetes/、runtime/onnxruntime/readme.md、runtime/triton_gpu/README.md
- 实时 WebSocket 协议与基准方法:runtime/python/websocket/README.md、runtime/docs/websocket_protocol.md、docs/benchmark/realtime_ws_benchmark.md、docs/benchmark/rtf_reproducibility.md
这套"设计规格 → 注册表 → 确定性选择器 → 静态构建 → 原子发布 → 多层验证"的闭环,把官网从一个信息展示层变成了 FunASR 私有化部署的可操作入口:访客先做选择、再跑最小验证、随后获得证据与限制,最终按清单上线——每一步都以仓库内可复查的事实为依据,而不是营销话术。
【免费下载链接】FunASROpen-source speech recognition toolkit for training, inference, streaming ASR, VAD, punctuation, speaker diarization pipelines, and OpenAI-compatible/MCP serving.项目地址: https://gitcode.com/GitHub_Trending/fun/FunASR
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考