news 2026/9/13 2:15:21

FunASR 产品部署中心(Deployment Hub)设计:将官网打造为可验证的私有化语音部署入口

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
FunASR 产品部署中心(Deployment Hub)设计:将官网打造为可验证的私有化语音部署入口

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 条新路由

主导航顺序固定为:

  1. Product / 产品
  2. Deploy / 部署
  3. Models / 模型
  4. Benchmarks / 性能
  5. Ecosystem / 生态
  6. Blog / 博客
  7. Docs / 文档
  8. Donors / 功德榜

语言切换与 GitHub 动作作为独立的页头控件存在。这一导航清单在实现中对应 web-pages/product-site/data/navigation.json,每项同时携带中英文标签与中英文 href,成为"同一份导航清单喂给所有新页面与存量页规范化器"的单一事实来源。

新增路由如下:

中文路由英文路由用途
/deploy//en/deploy/工作负载与硬件部署选择器
/deploy/vllm.html/en/deploy/vllm.htmlFun-ASR-Nano GPU 批量与高吞吐推理
/deploy/llama-cpp.html/en/deploy/llama-cpp.htmlCPU、桌面与边缘 GGUF 运行时
/deploy/openai-api.html/en/deploy/openai-api.htmlOpenAI 兼容私有转写 API
/deploy/realtime.html/en/deploy/realtime.htmlWebSocket 实时字幕与流式 ASR
/deploy/containers.html/en/deploy/containers.htmlDocker Compose 与 Kubernetes 服务部署
/deploy/cpu-runtime.html/en/deploy/cpu-runtime.htmlONNX/C++ 高并发 CPU 部署
/deploy/production.html/en/deploy/production.html安全、就绪、容量、可观测性与上线检查清单
/benchmarks.html/en/benchmarks.html可复现基准证据与方法论

既有quickstart.htmlmodels.htmlecosystem.html/blog/与功德榜路由保持稳定。

5. 页面设计:可扫描的产品表面

5.1 首页:运营型产品界面而非营销拼贴

  1. 全宽品牌 hero:一张自定义部署拓扑位图 + 可审查的真实终端/API 输出(以 HTML 分层呈现,而非烘焙进图片);
  2. 紧凑的部署选择器:分段控件选择工作负载与硬件,推荐一条路径并解释原因;
  3. 事实证明条:Apache-2.0、支持的操作系统家族、OpenAI 兼容端点、验证日期与基准证据;
  4. 按工作负载、硬件、接口与成熟度组织的部署矩阵;
  5. 真实 API 契约示例:/health/v1/models/v1/audio/transcriptions
  6. 生产就绪条:区分原生能力与网关/基础设施责任;
  7. 已验证运行时下载与生态采纳;
  8. 末尾的部署与 GitHub CTA。

设计约束还要求"下一区块在常见桌面与移动视口高度下保持可见",避免用户首屏只能看到 hero 而看不到任何决策内容。

上图是浏览器测试产出的首页桌面端截屏(见 web-pages/product-site/tests/browser/screenshots/),可看到"从工作负载开始""无 JavaScript 也能完成选择"的矩阵区与终端命令区,即设计文档 6.1 节所述结构的实际渲染效果。

5.2 部署选择器:确定性的输入与输出

输入:

  • 工作负载:文件批量、实时流、私有 API 或边缘应用;
  • 硬件:NVIDIA GPU、通用 CPU、桌面/边缘 GPU 或 Kubernetes 集群;
  • 优先级:吞吐、延迟、可移植性或兼容性。

输出:

  • 推荐运行时;
  • 支持的模型家族;
  • 匹配原因;
  • 主要限制;
  • 指向详情页的直接链接。

选择器是确定性的,编码在部署注册表中:不向服务器发送数据,且在无 JavaScript 时通过其下方的完整矩阵兜底工作。

5.3 部署详情页统一模板

每个部署页使用相同的可扫描结构:

  1. 状态、最近验证日期、测试的 FunASR 版本与证据链接;
  2. 适合/不适合指引;
  3. 支持的模型、硬件、操作系统与接口;
  4. 可直接复制的安装与启动命令;
  5. 带预期输出的健康检查或 smoke test 命令;
  6. 架构与请求流;
  7. 容量规划变量与基准方法;
  8. 安全与网络边界;
  9. 运维:就绪、日志、模型缓存、优雅重启与回滚;
  10. 已知限制与故障排查;
  11. 发布资产、深入文档、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_reasonprimary_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.verifiedtested.funasrtested.runtimecommands.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。完整步骤:

  1. 在隔离的 worktree 中构建;
  2. 校验生成的 HTML、链接、sitemap、语言对与资产哈希;
  3. 上传到新发布目录;
  4. 对暂存目录执行 live-root 检查;
  5. 备份 Nginx 配置,nginx -t通过后才 reload;
  6. 原子切换符号链接;
  7. 执行公网 HTTPS 与浏览器 smoke test;
  8. 任一步骤失败则切回上一发布。

部署过程中没有任何命令会修改或删除更早的发布版本。配套的发布操作文档见 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 分步上线

  1. 添加生成器、注册表、校验与测试;
  2. 构建双语首页与部署索引;
  3. 构建七个部署页与基准页;
  4. 规范化存量导航并保留旧路由;
  5. 添加版本化部署、Nginx 加固与转化日志;
  6. 运行完整本地与暂存浏览器验证;
  7. 原子部署、公网验证并监控首个 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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 2:14:50

Ubuntu下JDK安装全指南:三种方式与环境变量配置详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/13 2:13:07

FreeCAD 新手指南:从一张草图做出真正的 3D 参数化零件

FreeCAD 新手指南&#xff1a;从一张草图做出真正的 3D 参数化零件 【免费下载链接】FreeCAD Official source code of FreeCAD, a free and opensource multiplatform 3D parametric modeler. 项目地址: https://gitcode.com/GitHub_Trending/fr/FreeCAD 如果你一直想上…

作者头像 李华
网站建设 2026/9/13 2:07:54

Argo CD 本地环境搭建实战:基于 Kind 快速部署与开发调试

Argo CD 本地环境搭建实战&#xff1a;基于 Kind 快速部署与开发调试 【免费下载链接】argo-cd Declarative Continuous Deployment for Kubernetes 项目地址: https://gitcode.com/GitHub_Trending/ar/argo-cd 本指南以官方文档 docs/try_argo_cd_locally.md 为主体脉络…

作者头像 李华
网站建设 2026/9/13 2:03:15

5 分钟跑通 CogVideoX:一张显卡,用一句提示词生成 10 秒视频

5 分钟跑通 CogVideoX&#xff1a;一张显卡&#xff0c;用一句提示词生成 10 秒视频 【免费下载链接】CogVideo text and image to video generation: CogVideoX (2024) and CogVideo (ICLR 2023) 项目地址: https://gitcode.com/GitHub_Trending/co/CogVideo 给一句话&…

作者头像 李华