news 2026/9/12 3:55:00

AIRI 网页版零配置语音识别:浏览器 Web Speech API(ASR/STT)接入实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AIRI 网页版零配置语音识别:浏览器 Web Speech API(ASR/STT)接入实战指南

AIRI 网页版零配置语音识别:浏览器 Web Speech API(ASR/STT)接入实战指南

【免费下载链接】airi💖🧸 Self hosted, you-owned Grok Companion, a container of souls of waifu, cyber livings to bring them into our worlds, wishing to achieve Neuro-sama's altitude. Capable of realtime voice chat, Minecraft, Factorio playing. Web / macOS / Windows supported.项目地址: https://gitcode.com/GitHub_Trending/ai/airi

AIRI 内置的Web Speech API 转写提供者(browser-web-speech-api)利用浏览器原生语音识别能力,让 Web 版本无需任何 API Key 和外部服务即可完成实时语音转文字(STT/ASR),是快速体验语音输入的最简方案。本文将带你完成从环境校验、图形化配置到实时转写验证的完整流程,并结合仓库源码剖析其底层实现、参数默认值与问题排查路径,读完即可在自己的浏览器环境中跑通基于 Web Speech API 的语音对话链路。

Web Speech API:为什么它是零门槛的选择

Web Speech API 是浏览器内置的语音识别接口,在 AIRI 中它作为一个本地(Local)转写提供者存在。根据 provider 定义 中的说明:

  • description: 'Browser-native speech recognition. No API keys.'——无需任何密钥;
  • requiresCredentials: false——不需要填写凭据即可启用;
  • 支持的任务包括speech-to-textautomatic-speech-recognitionasrsttstreaming-transcription,并且同时具备**流式输入(streamInput)流式输出(streamOutput)**能力,可接入 AIRI 的实时听觉流水线。

正如 index.ts 的配置说明所示:如果你只想在网页上快速试验语音输入,且浏览器支持该 API,这就是设置成本最低的选项——不用申请密钥、不用配置服务器地址、不用选择远端模型。

浏览器支持确认:先检查运行环境

在开始配置前,请先确认两点:

  1. 使用 AIRI 网页版。Web Speech API 提供者仅能在浏览器环境中运行,无法在桌面版(Electron)中使用
  2. 确认浏览器支持该 API 并愿意授予麦克风权限

这一点在源码中有明确的硬性校验。看 provider.ts 的可用性检测逻辑:

const isAvailable = typeof window !== 'undefined' && ('webkitSpeechRecognition' in window || 'SpeechRecognition' in window) if (!isAvailable) { throw new Error('Web Speech API is not available in this environment. It requires a browser context with SpeechRecognition support (Chrome, Edge, Safari).') }

即同时满足两个条件才能使用:

  • 存在window对象(浏览器渲染上下文);
  • 全局存在SpeechRecognition或带厂商前缀的webkitSpeechRecognition(Chrome、Edge、Safari 等基于 Chromium 或 WebKit 的现代浏览器通常都支持)。

从源码结构看,运行环境矩阵测试 明确将browser-web-speech-api归入browserOnlyProviderIds(仅浏览器提供者集合),进一步印证了它对浏览器环境的强依赖。

需要注意:识别性能会因浏览器、网络环境和语言不同而有所差异。Web Speech API 在部分浏览器实现中依赖云端语音服务,因此实际识别质量与网络状况相关。

在 AIRI 网页版中配置 Web Speech API

配置入口与操作步骤:

  1. 打开Web 版本设置(Settings)→ 提供者(Providers)→ 转录(Transcription)→ Web Speech API
  2. Recognition Language(识别语言)下拉框中选择识别语言。
  3. 按需开启Continuous Recognition(连续识别)Show Interim Results(显示中间结果)
  4. 该页面明确提示No API key required,无需任何凭据即可继续。

三个核心配置项说明

根据 浏览器 Web Speech API 设置页 与 配置 schema,三个配置项的默认值如下:

配置项默认值说明
language(识别语言)en-US指定语音识别使用的语言代码(BCP-47 格式)
continuous(连续识别)true开启后持续监听,而不是每说完一句话就停止
interimResults(显示中间结果)true开启后边说话边实时显示部分识别结果

Recognition Language 可选语言列表

设置页面内置了常用的语言选项(见 browser-web-speech-api.vue):

  • English (US) —en-US
  • English (UK) —en-GB
  • Spanish —es-ES
  • French —fr-FR
  • German —de-DE
  • Italian —it-IT
  • Portuguese —pt-BR
  • Japanese —ja-JP
  • Korean —ko-KR
  • Chinese (Simplified) —zh-CN
  • Chinese (Traditional) —zh-TW
  • Russian —ru-RU

底层实现:这些配置项如何被使用

在 provider.ts 中,配置项被直接映射到SpeechRecognition实例的属性上:

const recognition = new SpeechRecognition() recognition.lang = extraOptions?.language || 'en-US' recognition.continuous = extraOptions?.continuous ?? true recognition.interimResults = extraOptions?.interimResults ?? true recognition.maxAlternatives = extraOptions?.maxAlternatives ?? 1

各参数的语义如下:

  • lang:识别语言代码,最终传给浏览器语音服务;
  • continuous:是否连续监听。注意 AIRI 在持续监听模式下会在onend事件里自动重启识别会话(延迟 100ms,见 provider.ts),从而让对话无限期进行下去;
  • interimResults:是否返回中间(未定稿)结果。AIRI 出于避免刷屏的考虑,默认只把isFinal === true的定稿片段作为增量(delta)对外发出(见 provider.ts),中间结果主要用于调试日志;
  • maxAlternatives:每个结果最多返回的候选数,默认 1。

另外值得注意的一点:Web Speech API只支持实时流式识别,不支持文件转写。在createWebSpeechAPIProviderfetch实现中,如果请求体携带FormDataBlobFile,会直接抛出异常提示改用流式 API(见 provider.ts)。

流式转写函数与实时管线

仓库还提供了面向实时听觉流水线的流式转写函数streamWebSpeechAPITranscription(见 provider.ts),它接收MediaStream并返回ReadableStream形式的增量文本流(fullStream)、最终文本 Promise(text)以及文本流(textStream),并通过onSentenceEnd/onSpeechEnd回调把识别结果推送给上层。该函数在 听觉模块 store 中被直接调用,与麦克风流、AbortController、空闲定时器、IO 追踪 Span 等机制整合,构成了完整的“麦克风 → Web Speech API → 转写文本 → 语音对话”链路。

验证设置:从页面测试到模块配置

配置完成后,建议按以下步骤验证转写是否真正生效:

1. 在设置页内直接测试

Web Speech API 的提供者设置页内建了Speech-to-Text Test(语音转文字测试)面板(见 browser-web-speech-api.vue):

  1. 选择Audio Input Device(音频输入设备)——未选择时页面会给出提示并要求先选择;
  2. 点击Start Speech-to-Text Test开始测试;
  3. 对着麦克风说话,页面会实时显示流式识别文本(Current transcription)与最终结果(Final transcription)。

该测试直接调用streamWebSpeechAPITranscription无论默认听觉提供者是什么,此测试始终固定使用 Web Speech API,因此非常适合用来单独验证当前浏览器与麦克风环境是否正常。测试过程中页面还会显示当前生效的语言、模式(Streaming)、连续识别与中间结果开关状态。

2. 在听觉(Hearing)模块中启用

  1. 进入设置 → 模块 → 听觉(Hearing),将转写提供者切换为Web Speech API,并确认选择了正确的音频输入设备。
  2. 允许浏览器的麦克风访问权限
  3. 开始一段简短的语音输入测试,观察 AIRI 中是否出现转写结果。

在听觉 store 中,当activeTranscriptionProvider === 'browser-web-speech-api'时:

  • configured计算属性直接返回true(Web Speech API 只要选中即可用,不强制要求模型,见 hearing.ts);
  • 若未手动选择模型,会自动选中默认模型web-speech-api(见 hearing.ts);
  • 语言与选项的优先级为:调用时传入的providerOptions> 提供者配置language/continuous/interimResults> 内置默认值(见 hearing.ts)。

问题排查指南

如果转写结果没有出现,请按下表逐项排查:

现象可能原因处理方法
页面提示 Web Speech API 不可用浏览器不支持SpeechRecognition;或在 Electron 桌面版中使用改用 Chrome / Edge / Safari 等支持的浏览器,并使用 AIRI 网页版
转写无输出浏览器麦克风权限被拒绝在浏览器地址栏的站点权限中允许麦克风访问,并刷新页面重试
转写无输出选错了音频输入设备在听觉模块或测试面板中切换到实际使用的麦克风
识别文字与所说语言不符识别语言(Recognition Language)设置不正确language调整为与实际口音匹配的语言代码(如zh-CNja-JP
not-allowed错误麦克风权限被拒绝源码会在该错误下明确提示 “Please grant microphone access and try again.”(见 provider.ts)
no-speech/audio-capture/network错误未检测到语音、麦克风采集异常或网络不可用这类错误在实现中会被静默记录而非中断会话(见 provider.ts),可检查麦克风与网络后重试

如果当前浏览器确实不支持该 API,仓库中已具备可选的替代路线:改用本地转写提供者(local transcription provider)或云端转写提供者(cloud transcription provider),在提供者列表中切换即可,无需改动其他配置。

结语

Web Speech API 提供者让 AIRI 网页版在“零密钥、零部署”的前提下获得了可用的实时语音识别能力:三个核心开关(语言、连续识别、中间结果)即可覆盖多数语音输入场景,设置页内置的 STT 测试面板又能独立验证浏览器与麦克风环境,源码中的可用性检测、连续模式自动重启、错误分类处理等实现细节则保证了其在真实使用中的健壮性。对于希望快速体验 AIRI 语音对话、或暂时不想接入云端转写服务的用户,这是当前仓库中最便捷的入口。

【免费下载链接】airi💖🧸 Self hosted, you-owned Grok Companion, a container of souls of waifu, cyber livings to bring them into our worlds, wishing to achieve Neuro-sama's altitude. Capable of realtime voice chat, Minecraft, Factorio playing. Web / macOS / Windows supported.项目地址: https://gitcode.com/GitHub_Trending/ai/airi

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

Reflex HTML 元素详解:用 rx.el 在纯 Python 中编写原生 HTML 页面

Reflex HTML 元素详解:用 rx.el 在纯 Python 中编写原生 HTML 页面 【免费下载链接】reflex 🕸️ Web apps in pure Python 🐍 项目地址: https://gitcode.com/GitHub_Trending/re/reflex Reflex 不仅提供了 rx.text、rx.button 这类高…

作者头像 李华
网站建设 2026/9/12 3:54:43

信道编码实战指南:从汉明距离到LDPC的误码控制全解析

1. 差错控制编码到底在解决什么问题1.1 数字通信系统里的误码是从哪来的先讲个特别常见的场景。你调试一套无线数传系统,发射功率明明已经开到最大了,接收端还是时不时冒出几个错bit,解调出来的数据要么出现乱码,要么干脆丢包。这…

作者头像 李华
网站建设 2026/9/12 3:52:45

医院预约挂号系统毕业设计:号源状态管理与并发防超卖实现

简介:医院预约挂号系统毕业设计资料包,面向Java及JavaWeb方向的计算机专业学生,覆盖用户注册登录、预约挂号、取消预约、医生与科室信息管理等核心业务模块,同时展示从需求分析、数据库设计到功能实现的基本流程。系统采用MVC分层…

作者头像 李华
网站建设 2026/9/12 3:52:13

Agent执行时代:从LLM到ReAct与Workflow的工程落地

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

作者头像 李华
网站建设 2026/9/12 3:49:38

静磁场仿真中的形状优化与灵敏度分析:从概念到工程实践

1. 为什么关注静磁场仿真里的形状优化与灵敏度分析先说清楚这个东西到底是什么。静磁场仿真,解决的是永磁体、电流线圈、铁磁材料这些对象在稳态条件下的磁场分布问题,典型场景包括电机、电磁阀、磁吸盘、磁共振线圈、磁性夹具。形状优化,是在…

作者头像 李华