@byokit/dictation

中文文档
0.6.1发布于 2026/10/25Apache-2.0TypeScriptES Module构建来源已验证近 30 天下载 1989

TypeScript套件让人们通过他们已经支付的人工智能计划,在网络,电话和桌面上登录到你的应用程序.

中文使用文档
文档目录4 节
  1. On-device React Industrial 用低语.rn 重播
  2. 桌面 WER 定型器
  3. 中继的 34- clip 回归和缓存 CI
  4. 长录音

@byokit/起诉

使用你的订阅机或一台接线引擎进行录音和录音。 向您的应用程序返回文本, 并带有稳定的部分、 最终部分、 语言、 时间戳和用法 。 从不代表你把记录寄出去.

import { Dictation, type AudioMic } from '@byokit/dictation';
import { chatgptEngine } from '@byokit/dictation/node';
import { provider, type Accounts } from '@byokit/accounts';

// Supplied by your app: its accounts instance, selected member and microphone.
declare const accounts: Accounts;
declare const person: string;
declare const yourMicrophonePort: AudioMic;
declare function showText(text: string): void;
const engine = chatgptEngine({
  access: async signal => {
    signal?.throwIfAborted();
    const runtime = await accounts.runtime(person);
    const id = provider('chatgpt').pi;
    const auth = await runtime.getAuth(id); // refresh under the accounts store's lock
    const credential = await runtime.readCredential(id);
    return { access: auth?.auth.apiKey ?? '',
      accountId: credential?.type === 'oauth' && typeof credential.accountId === 'string' ? credential.accountId : undefined };
  },
});
const dictation = new Dictation({ engine, audio: yourMicrophonePort });
const listening = dictation.listen();
listening.on('final', ({ segment }) => showText(segment.text));
const result = await listening.finish();
// Your app decides whether to insert or send result.text.

用于设备上的节点复制,导入 whisperEngine 从 ./node 绝对通过 binary 财务报告和审定财务报表 modelPath 路径。 工具箱从不发现CLI,模型,登录,环境密钥或其他工具的状态. transcribe(bytesOrBlob, options) 接受录音; Uint8Array 输入为 WAV,而 Blob 则为压缩文件提供一种媒体类型. 语言使用 languages[0] (一次1个识别语言);替换仅适用于决赛. Whisper 期望16 kHz WAV;您的应用首先解码出其他格式.

对于浏览器/PWA和React Natural,主条目没有节点或原生导入. 弹出 systemEngine(native) 或一个 DictateEngine 由您的应用程序的工人/本地约束提供。 系统端口必须执行设备上的识别并提供 stop() 解决最后的回话。 抓取属于应用程序;共享语音检测生活在 @byokit/audio. PCM 端口以 16 kHz 发送单个 Int16 Array 帧 。 其专有性 stop() 必须停止生产,解除阻塞迭代,在终止前将所有已经捕获的相框留给相机. finish() 在最后推断之前排出这些相框,包括在飞行中预览期间排出的声音; cancel() 丢弃他们 HTTP提供商运行在节点主机子上,可以在不提供电话账户证书的情况下通过应用自有的引擎运输被曝光.

routes() 默认情况下列出本地和ChatGPT订阅路由。 OpenAI 和 OpenRouter API 密钥( 按使用量计) 路由 offer: false。OpenRouter可以通过账户管理的登录密钥使用 access,但账单仍为每个用途。 该套件不对 ChatGPT 使用实验旗;拒绝报告 not-included它使用自己的发端人.

Live系统识别发出部分/最终文本;Whisper每秒重读一次并稳定部分. RN引擎在完成时对完整录制进行新读;而其他再读引擎则沉寂. 云引擎每次发声后都会返回决赛,而不是本土流出三角洲. onDeviceOnly: true 拒绝云引擎在获取/可信访问前. finish() 一次解决并释放捕获; cancel() 停止捕捉和中止推断. finish() 在取消拒绝后使用 cancelled。 。 。 . listen({ maxSeconds: 300 }) 默认情况下将app注入的PCM捕获时间限制为5分钟,包括沉默和先前确定的转弯;一个有限度的正设置会覆盖它. 无效的设置返回 unsupported 打开抓取前; 超限停止抓取并返回 too-large 从 finish()土著系统识别者拥有他们的捕捉极限。 文件仍以25 MB为限,子推算默认为60秒超时.

时间戳支持跟随引擎: OpenAI 单词时间戳需要 whisper-1, Whisper CLI 使用部分抵消/托肯抵消(如果有的话),而ChatGPT没有语言/时间戳控制. 未估算未知费用/期限. installModel 代表存储/下载到您的主机,并验证大小加SHA-256. 使用 ./testing 用于离线麦克风和推断假冒.

见 规格 编辑 Android 消费者证明软件包 @byokit/dictation. 模拟器流量通过Android SpeechRecognizer 操作公共 JavaScript 输入和应用程序系统端口,并带有确定性本地识别服务;它不具有下载的语音模型或供应商识别器的资格. 原生约束仍然是主机应用的责任.

On-device React Industrial 用低语.rn 重播

安装 [email protected] 在您的本地主机应用程序中遵循 本地安装指令。这是一个可选的对等点:导入工具包不会导入或初始化本地模块。 博览会需要本土发展建设,而不是博览会去. 你的应用用品 initWhisper,下载的本地模式路径或 Metro require() 资产,和捕获。 工具箱下载什么也没有。 没有捆绑或默默选择的模式; DEFAULT_WHISPER_MODEL 建议 base.en-q5_1 (约60 MB),以下测量;它是一种身份,而不是被下载的文件或准确性保证. 为其他语言选择多语言模式并获得通过 multilingual: true 默认为 auto,或选择明确的识别语言.

您的对应本地主机导入 initWhisper 从 whisper.rn 并传递给此功能,并配有主机拥有的模型和PCM16单相16千赫WAV录制:

import { Dictation, whisperRnEngine } from '@byokit/dictation';

export async function transcribeRecording(
  modelPath: string,
  wavBytes: Uint8Array,
  initWhisper: Parameters<typeof whisperRnEngine>[0]['initWhisper'],
) {
  const engine = whisperRnEngine({
    model: modelPath,
    initWhisper,
    settings: { language: 'en', vocabulary: ['TypeScript', 'React Native', 'Byokit'] },
  });
  try {
    return await new Dictation({ engine }).transcribe(wavBytes, { onDeviceOnly: true });
  } finally {
    await engine.release();
  }
}

对于活口语,保留引擎 在水龙头之间,并通过你的 AudioMic 改为 new Dictation({engine, audio}); 使用 listen(), (中文(简体) ), on('partial', ...), (中文(简体) ), on('final', ...) 财务报告和审定财务报表 finish() 如上所示。 一个上下文保持温暖,直到主机呼叫 engine.release()在释放它之前 排出有待推论的能量 后一出抄本再作初始化. 推论被序列化,因为一个Whisper上下文一次处理一个工作. 中止给本地工作打电话 stop() 并等待其承诺在重用上下文前和解;取消不返回单词。 主办方应在停机时或在其选择的闲置超时后释放(前一位消费者用了3分钟).

settings 在本地初始化前被验证; 无效值报告 bad-model。识别语言是一种Whiper代码,比如 en, (中文(简体) ), fr,或 auto,而不是像 en-US逐个呼叫 languages[0], (中文(简体) ), prompt,以及 keywords 覆盖语言或添加提示。 词汇指南识别; 仅限最终 replacements 仍是一个单独的明确纠正步骤.

设置默认含义/ 范围
model (引擎选项)需要从主机本地文件路径或 Metro 数字资产; 无远程 URL
languageen英语模式; multilingual: true 默认为 auto。清晰的双/三字母Whisper语言代码也覆盖
initialPrompt, (中文(简体) ), vocabulary空每次新读的初始上下文和单词/名称清单;明确不重叠 chunkMs 并附加上块的最后200个字符
threads设备核心,最多8个整数 1–64. 默认是平台报告的核心(navigator.hardwareConcurrency),最多8; React Industrial reports no, so sleep.rn从原生核心计数(最多4个)中取出. 线程比核心慢很多倍
gain1PCM 振幅乘以 0.01- 16, 被剪接到 Int16 范围
chunkMs0自动 30 秒窗口, 共 5 秒 , 共 30 秒 ; 整数 100-30000 选择非重叠窗口
vad.enabledfalse可选文件 VAD 删除文件沉默( 能量, 或当一个 vad 厂房通过; 禁用保存所有文件音频
vad.threshold0.0025原始常态 RMS 底片 0– 1 增益后 (在 UI ×4 尺度上为 0.01)
vad.relativeThreshold0.1Live gate 还需要录制最高峰 RMS 的分数; 范围 0–1
vad.silenceMs500整数 20– 10000; 需要沉默结束可选文件 VAD 语音区域
vad.paddingMs200整数 0–5000; 保存文件语音区域周围的音频
beamSize-1贪婪地解码; 整数 2- 100 允许光束搜索 。 生活预览总是贪婪地解码,不管这是什么.
bestOf5整数 1-100;取样/倒计时候选人
temperature0初始解码器温度 0–1
temperatureInc0.2后退增量 0–1; 0 禁用后退温度

内置能VAD使用20ms帧. 当应用程序通过一个 vad 会话厂改为 whisperRnEngine运行共享神经探测器 @byokit/audio 而非关卡; 文件分区仅在 vad.enabled 真实的,所以离开 VAD 禁用 保存整个文件 从转录,而活转 停留神经。 没有工厂,能源大门不会变 一样 silenceMs编号 :paddingMs 设置,每个流一个会话,随流出. 文件 VAD 默认被禁用,以保存静默的语音和暂停. 直播预览需要更大的RMS地层和10%的录音峰值水平,以补偿收益. UI显示被捕获的RMS×4. 这取代了旧的0.06UI门 错过了安静的电话讲话。 最终重新阅读所有被捕获的非零音频,包括预览门下方的静音材料. 抓取保留了整个暂停的音频并完成为最后一段;它从未向最后文本推广预览. 可配置的5分钟录音机盖包括了沉默.

跳过房间噪音,通过 speech: { model, initWhisperVad } 与 initWhisperVad 从 whisper.rn 和本地副本 WHISPER_VAD_MODEL (钉住~0.9 MB) ggml-silero-v6.2.0 图表; 用 installModel,检查尺寸和SHA-256。 最终结果和文件读取运行 Silero VAD(detectSpeechData)收录后收录,收录于30秒窗口. 每个窗口都检查过一次,就在覆盖的第一个解码窗口之前. 一个不与语音相重叠的解码窗口被跳过,因为Whisper否则会把房间噪声变成编成的句子. 所有其他解码窗口都像以前一样被解码,包含安静的通道和暂停. 无发言的录音返回空文本 。 漫长的路程在第一个窗口检查后开始解码,而不是在检查整个路程后开始. options.signal 在窗口之间检查。 VAD 运行在一个线上(nThreads: 1:低语.rn的Android默认4个线程在2个核心设备上检查了7–8 s每秒音频,1个线程检查每秒约10ms. 预览没有门。 VAD 语境与Whisper 语境保持温和,由 engine.release(); 缺少或损坏的 VAD 模型报告 bad-model。 。 。 .

最终结果和文件读取报告每个窗口的进展 onProgress 或 listen() 选项: { phase: 'speech', doneMs, totalMs } 在每个语音门窗口之后 { phase: 'decode', doneMs, totalMs } 每个解码窗口之后。 然后,一个主机可以分辨一个被卡住的读取缓慢. 预览报告什么也没有.

import type { Dictation } from '@byokit/dictation';

declare const dictation: Dictation;
declare function setStatus(text: string): void; // your app's status line
dictation.listen({ onProgress: p => setStatus(`${p.phase === 'speech' ? 'Checking for speech' : 'Transcribing'} ${Math.round(p.doneMs / 1000)}/${Math.round(p.totalMs / 1000)} s`) });

Finals使用完整的模型音频上下文(audioCtx: 0每块,贪婪的解码(无) beamSize 选项), tokenTimestamps: false 财务报告和审定财务报表 maxLen: 0。最长30秒的记录使用一读。 更长的录音使用每25秒开始的30秒窗口,包括整个上个窗口;解码重叠中的共享短语被对齐来去除重复并取回被剪切的边缘词. 每个自动窗口都接收新配置的词汇/文稿,而不需要事先的可以压制重叠语音的文字记录. 匹配忽略了大小写和平分;准确的后缀/前缀匹配被删除一次. 当边缘单词不同时,被绑定的单词会结合到约定的重合内部,保留更早的前缀,并从后期窗口继续;如果没有可靠的协议,则保留两种读取. 这不能纠正任意识别错误。 合并后的文件范围有范围级偏移. 片段元数据由百分之一秒转换成单窗读取,但从未用于剪接或保存音频. 明确文件 VAD/chunking 选择退出这种自动重叠,并可以分出单词. 上游低语 0.7.2忽略了 audioCtx 联合国 JSI 配置;通过零也保留了主机补丁中支持选项的全部上下文. 便携式适配器发送与本土解码器相匹配的PCM16字节. 文字时间戳是不支持和拒绝的.

提示和词汇完全属于主机. 它们没有出现在现场预览中,仅提供给最终/文件读取,防止了重复的提示占据了短预览. 现场预览片也只用最新版本来解码 PREVIEW_WINDOW_SECONDS (10 s) 当前转弯中,将每个读取合并到转弯已解码的前缀上,这样每个预览会保持被约束,而不是对整个转弯进行再解码; settings.beamSize 最终的全程录制窗口 仅适用于决赛和阅读文件。 对于 muxr 应用程序,测量的示例是 initialPrompt: 'muxr, Herdr, Codex, Claude, BYOKit, worktree, npm.'。这些名称是一个实例配置,从不默认套件。 用户关键词/文稿可按呼号传送。 增益、提示和光束搜索可以帮助或伤害;在改变麦克风和词汇之前测量其内容.

桌面 WER 定型器

之后 npm run build 在这个存储库中,运行同样的收益, 能源VAD, 分块和快速管道 针对明确供应的 低语. cpp CLI和型号:

node packages/dictation/dist/wer-cli.js \
  --binary /absolute/path/to/whisper-cli \
  --model /absolute/path/to/ggml-base.en-q5_1.bin \
  --output /absolute/path/to/report.json

已安装的软件包曝光的命令与 byokit-dictation-wer。 。 。 . --profile default 选择配置文件( 重复更多) , --manifest /path/to/manifest.json 提供自己的剪辑/相片,以及 --timeout-ms 120000 每个块的界限。 一个配置文件的可选 model 路径是相对于其显示而解决的,允许模型与相同的剪辑进行比较。 普通测试使用假CLI,没有模型或网络.

运出 显示 包括干净,吵闹(12 dB SNR),快活,技术名合成片段,精确的参考文献,生成器/源属性,SHA-256完整性检查,以及三个设置配置. 全部四个音频文件 语音属性 飞船在柏油丸。 重新创造他们与 python3 packages/dictation/scripts/generate-wer.py --flite /absolute/path/to/flite 使用已记录的 Flite 修订版及其 slt 声音 不使用用户录音或商业语音服务.

JSON输出报告编辑计数,参考词,WER,音频持续时间,延迟和实时因子每个剪辑/分集. WER使NFKC/小写规范化,并将标出作为单词边界. Profile WER是将总编辑除以总参考词;名称保持得分而无需替换. 空引用插入有未定义的 WER ()null) (中文(简体) ). CLI后端包括每个块的新流程/模型负载. 原画 4-剪接基线 记录预调设置,而不是当前默认值.

中继的 34- clip 回归和缓存 CI

这个 回归显示 进口了12个核心和22个扩展合成片段,包括噪音、快语、技术名称、暂停、静语和长语. 证明和再生 识别作者的文本、公共域名 LJ 语音、转换、源承诺和精确的提供字节。 每个片段的SHA-256在推论前都要检查. 这些剪辑是可复制的准确性基准,而不是物理手机麦克风资格.

与Wecs.rn的卖家Wecs.cpp 1.9.1相匹配,获得其精确的可选同源,并建造小型的持久CPU读取器. 从寄存器根(或在已拆开的柏油球中使用等同路径) :

mkdir -p .lab/wer-source
npm pack [email protected] --pack-destination .lab
# Unpack source; this does not install a native runtime into the kit.
tar -xzf .lab/whisper.rn-0.7.2.tgz -C .lab/wer-source
node packages/dictation/scripts/bench/build.mjs \
  --source "$PWD/.lab/wer-source/package" --output "$PWD/.lab/wer-build" --portable
node packages/dictation/dist/wer-cli.js \
  --binary "$PWD/.lab/wer-build/whisperBench" \
  --model /absolute/path/to/ggml-base.en-q5_1.bin --backend rn-bench \
  --manifest packages/dictation/fixtures/wer/regression/manifest.json \
  --profile default --profile application-vocabulary --repeats 3 \
  --output .lab/wer-report.json
node packages/dictation/scripts/bench/gate.mjs .lab/wer-report.json \
  packages/dictation/fixtures/wer/regression/baseline.json

报到 基线 记录模型散列、原生构件和每个剪接结果. --repeats 3 选择每个剪辑的中位编辑计数和中位计时; --speed 3 对报告电话式等待估计的推断。 温暖型号装载不包括在内. 这种乘以是模拟,而不是电话延时证据. 历史简介复制了旧的设置并保留剪接回路仅用于比较;没有生产适配器使用回路. 浮点CPU差异和推论时间可以改变笔录;复制差异用基线记录.

在相同的34个片段/734个参考词上测量,重复了3个:

简介已应用报告 WER / x3 等待Kit 本地运行 WER / x3 等待
历史适合窗口 / 保留剪接/ 自动10.2%/0.64 s (单位:千美元)12.9% / 0.69 s
上个全录光束 5 / 自动5.6% / 2.00秒(秒)6.4% / 2.57 s
贪得无厌的英语5.7% / 0.94 s (中文(简体) )5.9% / 0.85 s (单位:千美元)
训练后+应用词汇4.1% / 1.00 s (单位:千美元)3.7%/0.89 s (单位:千美元)

便携式AVX2 CI积分测出5.3%/3.5%的WER和0.45/0.47的温宿主推论没有×3乘以. 历史回放不完全复制出10.2%:被测量到的推断时间会改变片断,CPU算术会改变假说. 当前的适配器避免了这些切口. 使用每个剪贴结果来检查噪音/名称回归;总体改进并不意味着每个剪贴板改进.

过滤路径 WER 工作流程 缓存被绑定源,CPU构建和校验和验证模型,测量所有34个剪辑和下面三个长剪辑上推荐的剖面,上传两个报告,并用一个绝对的WER百分点可容忍度,独立地将短剪和长剪辑与基线相对. CI使用一个带有两个解码器线程的重复来避免过度订阅跑者;报告记录了超标. 多重听调制仍然可以在当地使用。 缓存在构建后立即被保存,所以推断失败保留了它. 12分钟的暂停是一个后站. --threads 覆盖所有选定配置文件(1-64); --progress 打印每个剪贴板的时间到 Stderr,同时保留 JSON 在 stdout 上。 普通测试仍然离线,没有模型。 出版仍然是合并的主要发行过程.

长录音

这个 长期显示 将现有的被归属的合成录音合并为66.025-,96.810-和300秒的片段,不作剪切发言. 五分钟的剪辑还包括静默的演讲,暂停和名字. 证明和再生 记录出源的ID,精确的散列和粘贴;再生只需要Python的标准库. 使用上方的命令 --manifest packages/dictation/fixtures/wer/long/manifest.json 和门对齐 其单独的基线。 。 。 .

用被钉住的模型/便携式AVX2读取器、两道线和三道重复测量;时间是中位温桌面推论:

记录默认 WER / 推论应用词汇 WER / 推论
66.025 s (中文(简体) )0.53% / 4.83 s (中文(简体) )0.53% / 5.69 s (单位:千美元)
96.810 s (简体中文)3.76% / 7.06 s1.13% / 7.65% s
300 s (简体中文)7.09%/ 24.92 s10.10% / 23.72 s

两个60–120秒的录音成绩为0.88%与app词汇(4个编辑/456个单词)结合. 5分钟的片段仍有识别错误,尤其是围绕静态材料和突起的过渡;延长捕获限制并不能保证准确性. 这些测量是合成的桌面推论,而不是电话延迟或者与另一个应用的录音作对比较.

版本与发布记录

@byokit/dictation 共发布 11 个版本,首次发布于 2026/10/01;过去 12 个月发布了 11 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.6.1latest2026/10/2514 天前
0.6.02026/10/2515 天前
0.5.32026/10/2020 天前
0.5.22026/10/1822 天前
0.5.12026/10/1623 天前
0.5.02026/10/1227 天前

关于 @byokit/dictation 的常见问题

@byokit/dictation 是什么?

TypeScript套件让人们通过他们已经支付的人工智能计划,在网络,电话和桌面上登录到你的应用程序.

如何安装 @byokit/dictation?

在项目目录运行 npm install @byokit/dictation,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 byokit-dictation-wer,可以用 npx byokit-dictation-wer 直接运行。

@byokit/dictation 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@byokit/dictation 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@byokit/dictation 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22.18。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@byokit/dictation 可以商用吗?

@byokit/dictation 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@byokit/dictation 的下载量有多少?

根据 npm 官方下载统计,@byokit/dictation 在 2026/10/09 – 2026/11/07 这 30 天内被下载 1,989 次,日均约 66 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@byokit/dictation 还在维护吗?

最新版本 0.6.1 发布于 2026/10/25(14 天前);至今共发布 11 个版本,其中过去 12 个月发布了 11 个;首次发布于 2026/10/01。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。