User Guide · 用户说明书

Open-RealtimeASR-UI 用户说明书

本文档同步自 GitHub 仓库 docs/ 目录,内容与仓库保持一致。

简体中文 | English

1. 简介

1.1 软件概述

Open-RealtimeASR-UI(简称 ORI)是一款面向中文用户的 Windows 桌面语音听写工具,定位为 Windows 11 原生 Win+H 语音输入的开源替代方案:按下全局热键开始说话,语音经云端或本地识别引擎实时转写为文字,直接注入当前光标所在位置。

  • 五大识别引擎,右键热切换——四家云端厂商(阿里云百炼 / 腾讯云 / 讯飞 / 火山引擎豆包)密钥自备 + 本地 FunASR 完全离线,切换无需重启;
  • 听写链路的每个环节可调——注入方式、断句节奏、逐字上屏、打断方式、底噪校准全部可配,并为游戏、管理员权限窗口等场景做了专门适配;
  • AI 能力——AI 修正、语音命令、端到端语音对话均为可选功能,默认关闭,开启后只连接您自行配置的服务。

1.2 适用环境与兼容性

项目 要求
操作系统 Windows 10 / 11(桌面端)
运行环境 打包版(exe)直接运行;源码版需 Python 3.10+
音频输入 任意可用麦克风(建议耳机麦克风,屏蔽扬声器干扰)
网络 云端引擎需可访问对应厂商服务;本地 FunASR 引擎完全离线

说明:

  • 不同引擎的可用性取决于密钥配置与网络连通性,未配置密钥的引擎默认从菜单中隐藏
  • 打包版(exe)不含本地 FunASR 引擎(funasr + torch 体积过大未打包),如需离线识别请自行安装。

1.3 部署形态与使用方式

ORI 支持两种启动方式:

  • 打包版(zip):下载 Release 的 zip 解压后双击 ORI.exe 即用(_internal\ 目录须与 exe 同在)。
  • 源码版:pip install -r requirements.txt 后通过 python -m asr_voice.main 或 start.bat 启动。

1.4 功能体系概览

核心特性 一句话说明 详见
实时听写 全局热键启停、逐字上屏、不吞首字(预热 + 预滚缓冲 + 建连补发);VAD 自动断句与底噪校准;删除键 / 左键打断反悔;可选长按说话 第 5 章
五大识别引擎 阿里云百炼(默认)/ 腾讯云 / 讯飞 / 火山引擎豆包四家云端 BYOK + 本地 FunASR 离线;右键热切换,各档模型绑定与菜单显隐可配 第 6 章
文本注入 逐字模拟按键 / 剪贴板粘贴双通道,剪贴板自动恢复;游戏模式 + 提权突破 UIPI;录音时自动暂停媒体 / 全局静音 5.4、5.8 节
AI 修正(可选) 同音错别字、标点、口癖清理;兼容 OpenAI 协议的任意 LLM,自定义提示词、批量修正省 API 第 7 章
语音命令(可选) 「听我说」触发:本地命令零 API 调用,「帮我…」AI 处理选中文本,自定义短语 第 8 章
实时语音对话(可选) 端到端语音大模型(豆包 S2S / 阿里云 Qwen-Audio / 自建 Hermes),全双工插话打断、气泡字幕、对话专属识别引擎 第 9 章
界面与主题 一条置顶悬浮条即整个界面,不抢焦点;3 套内置主题 + 主题包扩展、自定义字体;历史记录右键速取与独立搜索窗口 第 4、11 章

2. 使用前说明

2.1 运行环境要求

在使用 ORI 前,建议确认当前环境满足以下基本条件:

  • 操作系统为 Windows 10 / 11(桌面端)
  • 具备可用的麦克风设备,且系统麦克风权限已放行
  • 使用云端引擎时,具备访问对应厂商服务(阿里云 / 腾讯云 / 讯飞 / 火山引擎)的网络条件
  • 使用打包版时无需 Python 环境;使用源码版时需 Python 3.10+

建议的使用环境如下:

  • 安静或中等噪声环境,佩戴耳机进行听写,以屏蔽扬声器播放声音的干扰,避免误识别
  • 使用全局热键的场景下,避免与系统或其他软件的全局热键冲突
  • 使用 AI 修正、语音命令等依赖 LLM 的功能时,具备访问对应 API 地址的网络条件

说明:

  • 不同引擎的识别精度、延迟与费用各不相同,详见第 6 章
  • 部分功能需要先配置密钥或开启对应开关后方可使用

2.2 使用前准备

为保证安装与首次使用过程顺利,建议在安装前完成以下准备工作:

  1. 确认系统与麦克风
    确认 Windows 版本、麦克风可用性,并在 系统 → 隐私 → 麦克风 中确认桌面应用麦克风权限已开启。
  2. 准备识别引擎密钥(云端引擎)
    云端引擎需在各厂商控制台自费开通对应服务并获取密钥,各厂商基本都有一定的体验或免费额度: - 阿里云百炼:api_key(sk- 开头),从 阿里云百炼控制台 获取 - 腾讯云:secret_id + secret_key + app_id,从 腾讯云控制台 获取 - 讯飞:讯飞开放平台-实时语音转写大模型版app_id + api_key + api_secret;讯飞开放平台-实时语音转写标准版 std_app_id + std_api_key - 火山引擎:新版 api_key;旧版 app_id + access_token 火山方舟控制台
  3. 准备耳机(推荐)
    扬声器外放会与麦克风形成回声干扰,建议使用耳机收听设备声音,没有也无所谓。
  4. 备份重要配置
    在修改 config.yaml前,建议备份当前配置文件,便于出现问题后快速恢复。

2.3 风险提示

  • 云端引擎:使用阿里云百炼 / 腾讯云 / 讯飞 / 火山引擎等云端引擎时,费用由对应厂商按各自计费规则收取;使用前请确认已开通并了解计费标准
  • 剪贴板操作:开启「保留剪贴」时,识别结果会覆盖剪贴板中的图片 / 文件等内容;关闭时程序会尽量恢复剪贴板原内容,但图片 / 文件无法安全还原,会自动降级为逐字输入;「游戏模式」开启时直接覆盖剪贴板且不恢复原内容
  • 逐字输入模拟键盘:simulate_keys 方式会模拟键盘按键,在部分程序(如游戏、安全软件保护的应用)中可能失效或被拦截
  • 全局热键:ORI 依赖全局热键监听,部分安全软件可能拦截;热键被其他程序占用时需更换
  • 麦克风常驻预热:开启 audio.warmup_capture 后,程序会持续占用麦克风(任务栏麦克风图标常亮),系统其他录音应用可能受到影响
  • AI 修正 / 语音命令:会把识别文本发送到所配置的 LLM 服务(OpenAI 兼容接口),请自行评估隐私与合规风险

3. 安装与首次使用

3.1 源码方式运行

操作流程:

  1. 克隆仓库并进入项目目录
  2. 安装依赖:pip install -r requirements.txt
  3. 启动程序:python -m asr_voice.main,或双击 start.bat

说明:

  • start.bat 会自动按 python.local.bat → .venv\Scripts\python.exe → py -3 → python 的顺序查找 Python 解释器,找不到时会给出安装指引
  • python.local.bat 可配置本机 Python 绝对路径(gitignored,不会提交)
  • 首次运行会自动在 config\config.yaml 生成配置文件(基于 config\config.example.yaml 模板)

3.2 打包版(zip)运行

操作流程:

  1. 获取 Release 的 zip(或自行构建,见下文),解压到任意目录
  2. 双击解压目录中的 ORI.exe 启动(_internal\ 目录须与 exe 同在)
  3. 首次启动会在 exe 同目录自动生成 config.yaml(目录不可写时退到 ~/.asr_voice\config.yaml)

自行构建方式:

build.bat  

注意:打包版目前不含本地 FunASR 引擎

3.3 本地 FunASR 引擎安装(可选)

# CPU
pip install funasr torch torchaudio

# GPU(CUDA 11.8 示例)
pip install torch torchaudio --index-url https://download.pytorch.org/whl/cu118
pip install funasr

说明:

  • 模型首次使用时自动从 ModelScope 下载到 ~/.cache/modelscope/
  • 程序启动即后台预热(CPU 约 3~8 秒 / GPU 约 1~3 秒),就绪后悬浮条提示
  • 离线使用请提前下载 paraformer-zh-streaming 模型放入该缓存目录
  • 本地引擎仅在源码版可用
  • 仓库不内置、不分发模型权重 需要用户自行下载,三种方式: 1. 自动下载:留空 funasr.local_dir,首次使用时程序自动从所选渠道下载 2. 本地目录:自行下载权重后,把 funasr.local_dir 填为权重目录绝对路径(直接本地加载,不联网)

3.4 首次启动与初始化

首次启动时,建议重点确认以下内容:

  • 程序正常启动,悬浮条正常显示(静默启动参数 --hidden 除外)
  • 首次运行自动生成 config.yaml,位置见 12.1 节
  • 未配置密钥时,程序会正常启动并提示配置密钥
  • 录音热键(默认 Ctrl+G)注册成功

首次启动后通常需要进行以下基础操作:

  1. 配置识别引擎密钥
    默认引擎为阿里云百炼,至少填入一个引擎的密钥(或切换到本地 FunASR)。

  2. 确认麦克风设备
    在 设置 → 录音检测 中选择正确的麦克风设备(默认使用系统默认输入设备)。

  3. 验证一次录音
    按下 Ctrl+G 说话,再按一次停止,确认文字成功注入目标输入框。

3.5 配置识别引擎密钥

ORI 的云端引擎密钥可通过设置界面或直接编辑配置文件两种方式写入。

方式一:设置界面(推荐)

  1. 悬浮条右键 → 设置
  2. 进入「引擎密钥」页
  3. 展开对应引擎卡片,填入密钥
  4. 点击保存

方式二:直接编辑 config.yaml

  1. 设置界面右上角点击「打开配置文件」胶囊按钮(用系统默认编辑器打开)
  2. 填入密钥字段并保存,程序会自动热加载

说明:

  • 未配置密钥的引擎组默认从右键菜单隐藏(当前使用中的引擎组除外)
  • 各引擎密钥字段与获取方式见 6.3 ~ 6.6 节

3.6 验证首次录音

首次成功配置后,建议按以下步骤完整验证一次听写流程:

  1. 打开任意可输入文字的窗口(如记事本)并聚焦
  2. 按 Ctrl+G 开始录音,悬浮条出现,状态点变为聆听/识别态
  3. 正常语速说几句话,观察悬浮条文字预览与输入框中文字的实时上屏
  4. 再按 Ctrl+G 停止,确认最终文本完整注入
  5. 检查悬浮条无错误提示(橙色状态点 + 错误信息)

若过程中出现问题,请参考第 13 章故障排查。

4. 主界面说明

4.1 悬浮条布局

悬浮条由以下部分组成:

区域 内容
启停按钮 左侧圆形按钮(▶/■),点击开始/停止录音
状态点 待机=主题色暗点;聆听/识别=红点呼吸光晕;错误=橙色
文字预览 中间结果半透明显示,最终结果全亮显示;也用于显示临时提示与错误信息(错误约 5 秒)
关闭按钮 右侧 ✕,点击最小化到托盘(程序仍在后台)

悬浮条交互:

  • 左键拖动:移动窗口位置(持久化,重启后保持)
  • 右下角拖动手柄:调整窗口大小(持久化)
  • 右键:弹出完整功能菜单
  • 极简主题:正方形悬浮窗 + 中央声纹波形 + 上方气泡文本,整窗即启停按钮

4.2 状态提示

悬浮条通过状态点与文字预览反馈程序状态:

状态 表现
待机(idle) 状态点为主题色暗点
聆听/识别中 红点呼吸光晕,文字预览实时滚动显示中间结果
错误(error) 橙色状态点,文字预览显示错误信息约 5 秒
临时提示 文字预览显示短暂提示(如 AI 修正结果、引擎切换成功等,1~2 秒后消失)

开启 AI 修正后,每句话修正完成会出现三态提示(详见 7.6 节)。

4.3 右键菜单

右键菜单是 ORI 的主要操作入口,悬浮条与托盘共用同一份菜单。

菜单结构自上而下:

分类 内容
录音 开始录音 / 停止录音(按当前状态动态变名)
语音模式 勾选项:进入/退出实时语音对话(受 dialog.enable 总开关控制,关闭时此项隐藏;见 9.3 节)
识别引擎 按自定义顺序分组的引擎分类列表(腾讯云 3 档 / 阿里云 2 档 / 讯飞 2 档 / 火山 2 档 / FunASR 本地,各档实际模型与显隐见 6.2 节)
主题颜色 全部可用主题(内置 + 主题包)
注入逻辑 剪贴输入 / 逐字输入(互斥单选)、保留剪贴、逐字同步、AI 修正、语音命令(勾选项)
历史记录 打开窗口(完整浏览、搜索、双击复制全部记录)、开启历史记录、最近记录列表(最多 15 条,点击复制)、清空历史记录
字体 选择字体文件(.ttf/.otf)、恢复默认字体
设置 打开设置对话框
程序行为 自动隐藏 / 永远置顶 / 开机自启 / 暂停播放(录音时暂停后台媒体播放)/ 程序提权(一次性以管理员身份重启接管,已是管理员时置灰)(多选)
打断方式 左键打断 / 删除键打断(多选)
其他 退出(彻底退出程序)

说明:

  • 引擎菜单分组顺序可在 设置 → 通用设置 → 引擎排序 调整
  • 未配置密钥的引擎组默认隐藏,当前引擎组始终可见

4.4 系统托盘

操作 效果
托盘单击 悬浮条隐藏时显示悬浮条;可见时切换录音
托盘双击 显示 / 隐藏悬浮条
托盘右键 弹出完整菜单(与悬浮条右键一致)

4.5 设置界面概览

设置界面共 8 个页面:

页面 内容
通用设置 热键、输出(粘贴延迟)、界面(自动隐藏、不透明度、设置界面主题)、引擎排序
引擎密钥 各云端引擎密钥折叠卡(腾讯 / 阿里 / 讯飞大模型版与标准版 / 火山新版与旧版)+ 通用 AI 接口卡(API 地址、密钥、模型、连通性检测),当前引擎默认展开,本地 FunASR 无密钥无卡片
引擎参数 各引擎识别参数折叠卡(腾讯分类调用模型与过滤、阿里断句与语气词、讯飞两版参数、火山计费与顺滑、FunASR 模型与设备)
AI 修正 启用开关、修正后上屏、附带历史上下文、请求超时、关闭思考、批量修正、自定义提示词
语音命令 触发词、命令热键、AI 前缀、AI 命令思考模式、AI 提示词、自定义短语词表、待命超时、命令参考
录音检测 录音(麦克风常驻预热、设备选择、静音自动停止、单次最长)、语音检测 VAD(能量阈值、静音时长、最短语音)
语音模式 对话提供商切换(豆包 / 阿里云 Qwen / Hermes 自建)、对话热键、密钥与测试连接、模型与人设、音色与播报、判停与半双工、会话行为、对话专属识别(详见第 9 章)
关于 关于本应用、开源组件、联系方式、日志与排障

细节说明:

  • 标题栏「打开配置文件」按钮用系统默认编辑器打开 config.yaml,保存后自动热加载
  • 标题栏「还原默认」按钮把 config.yaml 恢复为出厂默认(历史记录、自定义短语与提示词版本不受影响),确认后热加载生效并关闭设置窗口
  • 部分设置(如热键、主题)需重启程序后生效,界面有对应提示
  • 保存机制为逐字段行级写回(保留注释),写后回读校验,失败自动回滚

5. 语音输入基础使用

5.1 开始与停止录音

按下全局热键(默认 Ctrl+G)开始录音,再按一次停止,最终文本注入当前光标位置。

一次完整的听写流程:

  1. 聚焦目标输入位置(任意可输入文字的程序)
  2. 按 Ctrl+G → 悬浮条出现,开始录音
  3. 正常语速说话 → 中间结果逐字实时上屏
  4. 再按 Ctrl+G(或静音超时 / 录音时长上限)→ 停止录音,最终文本注入

补充说明:

  • 热键可在 设置 → 通用设置 → 热键 修改(需重启生效),避免与系统/其他软件冲突
  • 无语音超过设定秒数自动停止(默认 10 秒,可配,0=不自动停止)
  • 单次录音默认最长 60 秒强制收尾,可在 设置 → 录音检测 → 录音时长上限 修改(0=不限时)
  • ASR 建连瞬时失败会自动重试 3 次(间隔 2 秒)

5.2 长按说话

默认关闭。开启方式:右键悬浮条 → 程序行为 → 长按录音,或 设置 → 通用设置 → 热键 → 长按说话。

  • 录音:按住录音热键说话,松手立即停止并上屏。按住期间不会因静默自动停止 (只有 60 秒硬上限仍在)。
  • 语音模式:按住对话热键才开麦克风,松手关闭。没按住时麦克风完全不上行 (Hermes 例外,见下),所以外放时 AI 的声音不会被自己的麦克风收进去, 也无需再开「半双工」。AI 正在说话时按下热键会打断它(豆包 / 阿里云支持打断; Hermes 是「说完才提交」,不适用)。
  • 轻点不算录音:按下时间短于阈值(默认 300 毫秒,可在设置页调整)的轻点被 完全丢弃——不连接服务端、不上屏,因此误触不会产生任何费用。
  • 悬浮条会显示「准备中」→「录音中」,可据此判断是否按上。内置主题(浅色/深色/极简) 用状态点表示,暗红=准备中、正红=录音中。
  • Hermes 对话下松手后可能多等几百毫秒才出结果(本地判停需要一点静音时间)。 Hermes 的识别在本机进行,所以按住期间照常逐字上屏;只是这一句要等你松手之后 才会发给 AI。
  • 开启长按后,「半双工」开关不再生效(职责已被长按闸门覆盖)。

5.3 实时上屏与逐字同步

「说到哪,字就到哪」是 ORI 的核心体验:中间结果逐字实时写入输入框,新增内容直接追加,ASR 回头修正才退格重打。

相关配置项:

项 默认 说明
recording.live_intermediate true 逐字同步:中间结果实时上屏;false=断句后一次性上屏
逐字同步(右键菜单) 开 勾选项,与配置字段同步

逻辑锁说明:AI 修正启用、注入方式为剪贴输入、游戏模式启用、或语音命令启用时,「逐字同步」会被强制视为关闭(对应锁解除后自动恢复)。原因:

  • 剪贴输入每次注入都覆盖剪贴板,无法支持中间结果增量追加
  • AI 修正需要对完整句子做后台修正,中间结果上屏会造成退格重打的跳动
  • 语音命令句的中间帧可能因同音误识别残留在输入框
  • 游戏模式强制整段粘贴注入,与中间结果增量追加不兼容

5.4 文本注入方式

ORI 提供两种把识别结果送进目标程序的方式,右键菜单「注入逻辑」切换。

方式 配置值 特点
剪贴输入 clipboard_paste 结果写入剪贴板后 Ctrl+V 粘贴,速度快
逐字输入 simulate_keys 逐字符模拟键盘按键,兼容禁止粘贴的程序(默认)

相关行为:

  • 游戏模式:右键菜单「注入逻辑 ▸ 游戏模式」开启后,识别结果强制经剪贴板粘贴注入,不做任何降级、粘贴后不恢复剪贴板——用于逐字输入无效的游戏等自绘输入框(此类输入框不读无扫描码的合成键击)。开启期间「注入方式」锁定为剪贴输入、「逐字同步」锁定关闭(关闭游戏模式后自动恢复原状态);对连粘贴都不支持的目标程序无效。若目标游戏以管理员运行(常见于带反作弊的客户端),本程序也需以管理员运行才能注入,否则合成按键会被 Windows 静默丢弃——检测到时悬浮条会自动提示;开启游戏模式时若当前不是管理员,还会主动询问是否以管理员身份重启程序(选「立即提权」即弹 UAC,确认后由提权实例接管,游戏模式保持开启;选「暂不」或 15 秒不理会则仅收起询问)。游戏模式会随配置保留到下次启动,而提权只活一个进程生命周期——故重启后若游戏模式仍开且本次未提权,启动时会再问一次同样的询问(静默启动不弹);不想每次被问可在设置「通用设置」开「永久以管理员身份启动」
  • 保留剪贴 = 开:识别结果留在剪贴板,Ctrl+V 可随时重复粘贴;但会覆盖剪贴板中的图片 / 文件
  • 保留剪贴 = 关(默认):粘贴后自动恢复剪贴板原内容;剪贴板里是图片 / 文件(无法安全还原)时自动降级为逐字输入
  • 粘贴延迟:写入剪贴板后等待多久再模拟粘贴(默认 50ms,10~1000ms 可调),部分程序响应慢可适当加大

5.5 打断与取消

说错了可以反悔:录音中触发打断操作,本次未上屏的内容全部丢弃。

两种打断方式(右键菜单「打断方式」,可同时开启):

方式 默认 行为
删除键打断 开 录音中按 Backspace / Delete 打断本次识别
左键打断 关 点击悬浮条任意位置打断本次识别

5.6 VAD 语音检测与底噪校准

ORI 使用能量检测(VAD)自动断句:说话停顿超过设定时长算一句结束;不说话超过设定秒数自动停止录音。

VAD 相关参数(设置 → 录音检测 → 语音检测):

参数 默认 说明
语音判定阈值 500 能量低于此值视为静音(按麦克风灵敏度调)
断句等待 600ms 连续静音超过此时长判定一句话结束
最短语音 300ms 短于此值的语音片段丢弃(避免噪声误触发)

底噪自动校准:每次录音开头约 1 秒自动校准环境底噪,底噪高时自动上调静音阈值,避免 VAD 卡死——在嘈杂环境下尤其有用,无需手动反复调阈值。

5.7 麦克风常驻预热

开启麦克风常驻后,麦克风一直"热着"——按下热键前约 400ms 的声音也会被带上,开口的第一个字不会被吞掉。

相关机制:

  • 麦克风常驻预热(audio.warmup_capture,默认关):后台预开采集流 + 预滚缓冲(保留按下热键前约 400ms 音频)
  • ASR 后台建连:握手期间的音频先存着,连上后补发
  • 代价:任务栏麦克风图标常亮(程序在持续占用麦克风);关闭更省电,但可能吞首字

5.8 暂停播放与全局静音

录音期间可以自动中断后台音频,防止麦克风拾入背景声、干扰说话,停止录音自动恢复。两个开关均默认关闭,可单独或同时使用。

  • 暂停播放:右键菜单「程序行为 ▸ 暂停播放」或设置页「录音检测」开启。录音开始时真暂停正在播放的媒体(停在当前进度),停止录音后从断点续播。覆盖带媒体控制的应用(浏览器、主流音乐/视频播放器);游戏等无媒体控制的应用无法暂停,这是系统限制。
  • 全局静音:仅设置页「录音检测」提供。录音期间静音全部后台声音(含游戏本体),停止录音后恢复。可单独使用,也可与「暂停播放」叠加(暂停管断点续播、静音管彻底无声);游戏内录音建议配合「游戏模式」使用。注意:录音的几秒内完全听不到任何背景声(游戏里突然静音可能影响听声辨位);程序若在录音中被强制结束(杀进程),静音状态可能残留,重新打开程序录一次音或手动调回相应程序音量即可恢复。另可勾选「仅游戏模式下静音」:开启后全局静音只在游戏模式也开着时执行,避免日常录音(写作/聊天)误静音音乐和视频;暂停播放不受此限制。

两个开关在每次录音开始时按当前状态生效;录音中途切换不影响当前会话,停止时仍会恢复本次会话实际做过的动作。

6. 识别引擎

6.1 引擎总览

引擎 模型 / 版本 密钥 说明
阿里云百炼(默认) paraformer-realtime-v2(默认)/ qwen-audio-3.0-asr-flash-streaming(Qwen Audio 大模型,更准) api_key 默认 Paraformer v2;Qwen Audio 大模型识别更准,支持去语气词
腾讯云 Hy-ASR-3.0-preview / 16k_zh / 16k_zh_en / 16k_zh_dialect 等 secret_id + secret_key + app_id 实时流式,WebSocket 签名直连
讯飞 大模型版(autodialect/autominor)/ 标准版(中英) 大模型版 app_id+api_key+api_secret;标准版 std_app_id+std_api_key edition 切换两套独立密钥
火山引擎 豆包流式 1.0(bigasr)/ 2.0(seedasr),计费独立配置 新版 api_key;旧版 app_id+access_token 二进制流式协议,支持二遍识别 + 语义顺滑(DDC)
本地 FunASR paraformer-zh-streaming 无需密钥 完全离线,CPU/GPU,启动后台预热,首次自动下载模型

云端引擎需在各厂商控制台自费开通对应服务;本地 FunASR 引擎完全免费离线。

打包版(exe)目前不含本地 FunASR 引擎,选 FunASR 会提示改用云端引擎或源码方式运行。

6.2 引擎切换

切换方式:悬浮条右键 → 识别引擎 → 选择目标分类,即点即换。

云引擎在菜单里按分类档渲染(每组以灰色禁用项作分组标题,组顺序跟随 ui.engine_order):

厂商 菜单分类档 各档实际调用的模型
腾讯云 大模型2.0 / 大模型1.0 / 通用引擎 三档各绑定一个模型,默认 16k_zh_en_2.0 / 16k_zh_en / 16k_zh,可在 设置 → 引擎参数 → 腾讯云 逐档改选(候选见下表)
阿里云百炼 大模型版 / 通用引擎 大模型版=qwen-audio-3.0-asr-flash-streaming;通用引擎=paraformer-realtime-v2
讯飞 实时语音转写大模型 / 实时语音转写标准版 大模型版=autodialect;标准版跟随 xfyun.std_lang(cn/en)
火山引擎 豆包大模型 2.0 / 豆包大模型 1.0 2.0=seedasr;1.0=bigasr(计费方式各自独立配置)
FunASR 本地 平铺单项「Paraformer-ZH 流式」 唯一模型,无分类档

相关说明:

  • 分类名后带当前绑定的模型:阿里云用中文短名(如「大模型版 · Qwen Audio」),腾讯云用英文模型 ID(如「大模型2.0 · 16k_zh_en_2.0」)
  • 未配置密钥的引擎组默认隐藏(当前引擎组除外);FunASR 无密钥概念,按依赖是否安装显示「(需安装)」
  • 显隐三级控制(设置 → 通用设置 → 引擎排序):ui.engine_show_<provider> 按厂商整组隐藏;ui.engine_hidden_models 按模型 ID 逐项隐藏(逗号分隔,空=全部显示);密钥未配置的组照旧隐藏
  • 引擎分组顺序与显隐可在 设置 → 通用设置 → 引擎排序 调整(每组可展开逐模型开关)

模型 ID 中英对照(腾讯云三档候选可在设置页「引擎参数」下拉选择;阿里云两档为固定映射):

厂商 模型 ID 中文名
阿里云 qwen-audio-3.0-asr-flash-streaming Qwen Audio · 大模型(更准)
阿里云 paraformer-realtime-v2 Paraformer v2 · 通用(中英日韩+方言,支持语气词过滤,默认)
腾讯云 16k_zh_en_2.0 中英大模型 2.0 · 中英+31 方言
腾讯云 16k_zh_en_speaker_2.0 中英大模型 2.0 · 说话人分离
腾讯云 Hy-ASR-3.0-preview Hy-ASR 3.0 预览 · 内测·客户端断句
腾讯云 16k_zh_en 中英大模型 1.0 · 中英+31 方言
腾讯云 16k_multi_lang 多语种大模型 · 15 语种
腾讯云 16k_en_large 英文大模型
腾讯云 16k_zh 中文通用 · 中英
腾讯云 16k_zh-TW 中文繁体
腾讯云 16k_zh_edu 中文教育
腾讯云 16k_zh_medical 中文医疗
腾讯云 16k_yue 粤语
腾讯云 16k_zh_dialect 多方言 · 23 种

讯飞/火山的菜单分类名即档位(见上表),无需另对照。

6.3 阿里云百炼

默认引擎。相关配置(config.yaml → aliyun):

字段 默认 说明
api_key 空 百炼 API Key(sk- 开头),从 https://bailian.console.aliyun.com 获取
model paraformer-realtime-v2 Paraformer v2(中文含方言 + 多语种,默认);备选 qwen-audio-3.0-asr-flash-streaming(Qwen Audio 大模型,更准)
disfluency_removal true 过滤语气词(啊、嗯等口癖)
max_sentence_silence 800 断句静音阈值(毫秒,200~6000)
vocabulary_id 空 热词列表 ID(可选,百炼控制台创建)
language_hints 空 语种提示(可选),如 zh / zh,en;留空自动检测

6.4 腾讯云

相关配置(config.yaml → tencent):

字段 默认 说明
secret_id / secret_key 空 从 https://console.cloud.tencent.com/cam/capi 获取
app_id 空 从 https://console.cloud.tencent.com/asr 获取
engine_model_type Hy-ASR-3.0-preview 右键菜单「通用引擎」以外的直接调用模型:默认 Hy-ASR 3.0(大模型·中英+方言,内测版服务端无断句,客户端按说话停顿切句,切句节奏受 vad.silence_duration_ms 影响;停止录音时会把最后一句直接上屏,短句如两个字也不会丢);候选见 6.2 节模型对照表
menu_model_large_2_0 16k_zh_en_2.0 右键菜单「大模型2.0」档实际调用的模型(设置页「引擎参数」下拉可改)
menu_model_large_1_0 16k_zh_en 右键菜单「大模型1.0」档实际调用的模型
menu_model_general 16k_zh 右键菜单「通用引擎」档实际调用的模型
filter_punc 1 标点过滤:0 不过滤 / 1 过滤句末标点 / 2 过滤所有标点
convert_num_mode 1 数字转换:0 中文数字 / 1 智能转阿拉伯数字
filter_dirty 0 脏词过滤:0 不过滤 / 1 过滤 / 2 替换为 *
filter_modal 2 语气词过滤:0 不过滤 / 1 部分 / 2 严格过滤全部
hotword_id / customization_id 空 热词表 / 自学习模型 ID(可选)

6.5 讯飞

讯飞开放平台 提供两套独立版本与密钥(config.yaml → xfyun):

字段 说明
edition llm=实时语音转写大模型 / std=实时语音转写标准版;由右键菜单两个分类切换(自动写入),一般无需手改
app_id / api_key / api_secret 大模型版密钥,开通"实时语音转写大模型"后领取
std_app_id / std_api_key 标准版密钥,开通"实时语音转写"(标准版)后领取,与大模型版互不通用
lang 大模型版语种:autodialect=中英+202 方言 / autominor=37 语种(需工单开通)
std_lang 标准版语种:cn=中文/中英混合 / en=英文
pd 标准版垂直领域:court / edu / finance / medical / tech;留空通用
std_punc 标准版过滤标点(punc=0)
filter_modal / std_filter_modal 两版各自独立的语气词过滤(客户端丢弃 wp=s 顺滑语气词)

6.6 火山引擎豆包

火山方舟控制台 获取密钥,火山引擎豆包流式 ASR 有 1.0(bigasr)与 2.0(seedasr)两代,两代各自独立配置计费方式(config.yaml → volcengine):

字段 说明
api_key 新版鉴权 API Key(X-Api-Key);旧版用户留空
access_token + app_id 旧版鉴权(X-Api-Access-Key + X-Api-App-Key);新版用户留空
bigasr_billing 豆包 1.0 计费方式:duration(按时长)/ concurrent(按并发)
seedasr_billing 豆包 2.0 计费方式,同上
resource_id 程序自动合成(volc.{版本}.sauc.{计费}),一般无需手工修改
enable_ddc 语义顺滑(去语气词/重复词),默认开
enable_nonstream 二遍识别:静音约 800ms 出更准的 final,默认开

说明:计费方式须分别与控制台购买的资源包一致;右键菜单切换版本时会自动套用对应版本的计费方式。

6.7 本地 FunASR

完全离线、无需密钥的本地引擎。识别全在本机完成,适合无网络、涉密或不想付费的场景。

相关配置(config.yaml → funasr):

字段 默认 说明
model paraformer-zh-streaming 流式模型,支持逐字同步上屏
device cuda auto / cuda / cpu(有 GPU 用 cuda 更快)
chunk_preset 默认 识别窗口预设:默认 600ms / 低延迟 480ms / 高准确 720ms(改动后自动重新预热)
hotword 空 热词,空格分隔
preheat true 启动时后台预热模型(false=首次录音才加载)
local_dir 空 本地模型目录(用户自行下载的权重绝对路径);非空时直接本地加载,不联网下载
model_hub ms 下载渠道:ms=ModelScope / hf=HuggingFace(仅自动下载时生效)
model_revision 空 锁定模型版本(如 apache-2.0-20260804);留空用最新

注意事项:

  • 安装依赖:pip install funasr torch torchaudio(GPU 版本见 3.3 节)
  • 模型首次使用自动从 ModelScope 下载到 ~/.cache/modelscope/,离线使用需提前下载
  • 打包版不含此引擎,需源码方式运行

7. AI 修正

7.1 功能简介

AI 修正(默认关闭)在识别完成后调用大模型对文本进行润色:修正同音错别字、补全标点、去除口癖。

兼容 OpenAI 协议——OpenAI / DeepSeek / Moonshot / 智谱 / 通义 / 本地 Ollama / vLLM 等,改个 base_url 就能接入。

推荐 DeepSeek ,根据文档直接获取端点和 API 密钥。

7.2 开启与接入

开启方式:

  1. 右键菜单 → 注入逻辑 → 勾选「AI 修正」
  2. 或 设置 → AI 修正 → 启用 AI 修正 → 保存

接入配置(设置 → 引擎密钥 → 通用 AI 接口,或 config.yaml → llm):

字段 默认 说明
llm.enable false 总开关(默认关,opt-in)
llm.base_url https://api.deepseek.com/v1 OpenAI 兼容接口地址;OpenAI: https://api.openai.com/v1;Ollama: http://localhost:11434/v1
llm.api_key 空 Bearer 认证密钥(本地 Ollama 可填任意值)
llm.model deepseek-flash 修正模型
llm.timeout_ms 3000 超时直接用原文,不阻塞
llm.disable_thinking true 关闭思考模式(DeepSeek V4/智谱/Qwen3/OpenAI o 系支持;旧版 R1 不支持需换模型)

7.3 两种上屏方式

方式 行为 特点
默认(llm.wait_for_correction=false) 先上原文,后台 LLM 润色完成后原地退格替换 实时,但会有退格重打的视觉跳动
修正后上屏(true) final 不立即上屏,等修正版好后直接注入 无跳动、从根本消除吞句;每句延迟 1~3 秒

建议:日常聊天用默认方式;写文档等看重成稿质量、不那么赶的场景开启「修正后上屏」。

7.4 批量修正

攒几句一起送修,省 API 调用次数。

字段 默认 说明
llm.batch_sentences 3 累积句数:1=每句即时修正;2+=攒 N 句一次送修(省 API)
llm.batch_idle_ms 1000 累积模式下距上句静音超过此时长也触发修正

机制说明:

  • 静音触发与无语音超时独立工作:静音触发管 LLM 批次送修时机,无语音超时管录音会话何时停止
  • 录音停止(含无语音超时)时,累积队列中未送修的句子会强制送修(flush_pending),不丢句
  • 批量修正时程序会在 prompt 末尾自动追加"逐句逐行返回"要求,并校验返回行数与句数一致;LLM 合并/吞句时整批放弃替换保留原文——宁可不修、不丢句
  • batch_idle_ms 只在累积模式(batch_sentences ≥ 2)下起作用;中文口语句间自然停顿约 0.3~1 秒,推荐 1~2 秒

7.5 自定义提示词

  • 必须包含 {text} 占位符——否则 LLM 收不到待修正文本,会返回"请提供需要修正的文本"
  • 设置界面只能填单行;想用多行需手动编辑 config.yaml,用 YAML 块标量 |:
llm:
  prompt: |
    你是语音识别文本修正器。
    - 修正同音错别字
    - 补全标点
    文本:
    {text}
  • 留空则使用内置模板(已含 {text} 占位符)
  • 设置界面支持自定义提示词版本管理(版本下拉 + 新增/保存/删除),内置方案不可改

7.6 如何确认 AI 修正已生效

开启后每说一句话,悬浮条会出现三态提示(1~2 秒后消失):

悬浮条提示 含义
AI 已修正 N->M字 调用成功、有修正、文本已替换
AI 修正:原文已正确 调用成功、原文没问题没改(证明 AI 确实在跑)
AI 修正失败(保留原文) 调用失败(key 错 / 超时 / 网络),用原文兜底

什么都没提示 = AI 修正未真正启用,检查 llm.enable 开关和 api_key 是否已填。

8. 语音命令

8.1 功能简介

语音命令(默认关闭)让你"动口不动手":录音中句首说触发词(默认「听我说」)即进入命令态——这句话不上屏、不进历史、不送 AI 修正,直接当指令执行。

开启方式:右键菜单「注入逻辑 ▸ 语音命令」。

8.2 触发方式

方式 操作 说明
连说 「听我说 发送」 触发词 + 命令一步到位
单说待命 「听我说」 进入待命态(默认 8 秒),下一句话就是命令,超时自动取消
命令热键 Ctrl+Shift+G(默认,可改) 按下立即开始录音并进入待命态,免说触发词;留空=不启用

容错机制:开着 AI 修正时,触发词被识别成同音字(如"之嘛开们")会先进修正管道,修正版拼回触发词后二次检测命令,照样执行。

8.3 本地命令参考

本地命令识别快、不花钱,中英文变体均可说,不区分大小写。完整命令参考表在 设置 → 语音命令 → 命令参考(可展开收起)。

分类 说法(示例变体) 效果
编辑类 删除那句 / 删掉那句 / 删除刚听写 / delete that 删除刚听写的文本
编辑类 全选 / 选择全部 / select all 全选当前输入框文字(配合"帮我"处理整段)
编辑类 撤销 / 恢复上一步 / undo 撤销上一步
编辑类 退格 / 删一个字 / backspace 退格删一个字
发送类 发送 / 回车 / press enter 按回车(发送消息)
发送类 停止录音 / 停止 / 停止听写 / stop listening 停止录音
切换类 逐字输入 / 切逐字 切换为逐字输入
切换类 剪贴输入 / 剪贴板输入 / 切剪贴 切换为剪贴输入
开关类 保留剪贴(+关/停用/取消=关闭) 结果留在剪贴板开关
开关类 逐字同步(+关/停用/取消=关闭) 逐字同步开关
开关类 AI 修正 / 智能修正(+关/停用/取消=关闭) AI 自动修正开关
开关类 删除打断 / 删除键打断(+关/停用/取消=关闭) 删除键打断开关

匹配优先级:本地命令表 > 自定义短语 > AI 命令。未命中时提示:"没听懂。按键/设置直接说,AI 处理说\"帮我\"+指令"。

8.4 AI 命令

AI 命令(需配置 llm.api_key):「听我说 帮我 + 指令」处理当前选中的文字——读取选区 → 大模型变换 → 原地替换,选中文本和剪贴板都会被妥善还原。

说法 效果
帮我润色 / 帮我改通顺 AI 润色
帮我加标点 自动补全标点
帮我翻译成英文(中文/日文…) 翻译
帮我扩写 / 帮我缩写 扩写 / 精简
帮我改正式 / 改口语 / 改客气 调整语气
帮我居中 / 帮我加粗 / 转Markdown 套格式标记
任意指令 自由透传(模板含 {selection}/{command} 占位符,要求模型直接输出结果正文)

相关配置(config.yaml → commands):

字段 默认 说明
ai_prefix 帮我 AI 命令前缀
ai_thinking true 思考模式(默认开,慢但更准;与 AI 修正的 disable_thinking 独立)
ai_prompt_template 空 自定义提示词模板;留空=内置默认透传模板;自定义时用 {selection}/{command} 占位符

8.5 自定义短语

说「触发词 + 短语名」(如"听我说 我的邮箱")插入预设文本。

  • 需开启 设置 → 语音命令 → 自定义短语 开关
  • 词表两列表格(短语名/短语内容)+ 添加/删除,存于状态目录 phrases.json
  • 精确匹配、无拼音容错;查表优先于短语

8.6 与「逐字同步」的互斥关系

命令句的中间帧可能因同音误识别残留在输入框(顶掉你选中的文字),因此语音命令与「逐字同步」不能同时开启:开启任一个会询问后自动关闭另一个(记住了原偏好,关掉时自动恢复)。

9. 实时语音对话

9.1 功能简介

按 Ctrl+Shift+H 直接和 AI 语音聊天:豆包与 Qwen 由端到端语音大模型直接理解并语音回复,AI 播报中随时开口即可打断(barge-in);Hermes 由本机识别、文字回复(见 9.10 节)。均为多轮连续对话。

语音对话支持三家服务提供商,三选一(dialog.provider,设置 → 语音模式 → 对话提供商):

提供商 配置值 说明
豆包 S2S(默认) doubao 火山引擎豆包端到端语音大模型(一条 WebSocket 包办断句/识别/合成),接入与使用见 9.2~9.8 节
阿里云 Qwen-Audio aliyun 阿里云百炼 Qwen-Audio Realtime 端到端语音大模型,接入与使用见 9.9 节
Hermes Agent(自建) hermes 用户自建的 hermes-agent API server:纯文本 agent,断句与识别由本机完成(对话专属 ASR),回复为文字(无语音播报),接入与使用见 9.10 节

三家互斥:切换提供商后设置页「语音模式」字段组随之显隐;共用 enable / output_device / half_duplex / auto_reconnect 四项配置(Hermes 半双工恒开、自动重连不适用,见 9.10 节)。

与听写模式(第 5 章)的定位区别:

听写模式 语音对话
用途 把语音转成文字注入输入框 与 AI 连续问答聊天
链路 ASR 识别 →(可选 AI 修正)→ 上屏 豆包/Qwen:端到端语音大模型(识别、理解、回复一体);Hermes:本机 ASR 识别 → Hermes 文本回复
回复 无 豆包/Qwen 为 AI 语音播报;Hermes 为纯文本回复(架构预留 TTS,暂未接入)
打断 Esc / 删除键 直接开口说话即打断 AI 播报
  • 对话内容显示在悬浮条气泡卡片中,用「你 / AI」角色色带区分双方(青绿=你、紫=AI);AI 回复流式逐行更新、说完定稿,点击气泡可展开/收起全文
  • 对话与录音互斥:录音中按对话热键会被忽略并提示;对话中按录音热键同样忽略并提示,两侧都不抢占
  • 计费遵循服务端规则:一次完整对话(进入到退出)计一次 query——豆包以火山控制台账单为准,Qwen 以阿里云百炼账单为准;Hermes 为自建服务,无计费

9.2 开通与密钥

本节为豆包提供商的接入说明;使用阿里云 Qwen-Audio Realtime(dialog.provider: "aliyun")见 9.9 节。

  1. 在火山引擎语音控制台(console.volcengine.com/speech)开通「豆包端到端实时语音大模型」
  2. 密钥两种鉴权方式(与识别引擎的火山密钥同源通用): - 新版单密钥:api_key(控制台「API Key 管理」生成) - 旧版双密钥:app_id + access_token(应用详情页,须来自同一应用)
  3. 三个密钥字段留空 = 自动复用「引擎密钥」页的火山配置——已配好火山识别的用户开箱即用,不用填两遍

设置 → 语音模式 → 接入 组内有「测试连接」按钮:用当前填写的密钥完成一次完整握手(开会话后立即收尾),成功时显示报障必备的 X-Tt-Logid,失败时给出具体原因(未开通 / 密钥无效 / 网络不通)。

9.3 进入与退出

进入对话(任一入口):

  • 按对话热键,默认 Ctrl+Shift+H(设置 → 语音模式 → 对话热键 可改;留空 = 只不注册该热键,菜单与悬浮条入口仍在;修改需重启生效)
  • 悬浮条右键菜单勾选「语音模式」

退出对话(任一方式):

  • 再按一次对话热键
  • 右键菜单取消勾选「语音模式」
  • 对 AI 说「退出」或「再见」(可在会话行为关闭;Hermes 为本机 ASR 识别后匹配,同样生效)
  • 点击悬浮条启停按钮(对话中按钮图标变为停止符号,即「退出对话」)
  • Hermes 专属:思考中(AI 生成回复期间)按一次热键 = 取消本轮并回到聆听(服务端经 /stop 真正停住,不会后台继续跑),连按两次 = 退出对话

整体关闭语音对话:设置 → 语音模式 → 接入 → 启用语音模式(或 config.yaml 的 dialog.enable: false)。关闭后右键菜单「语音模式」项、对话热键与悬浮条对话入口全部下线,等于这个功能不存在;本设置页保留,随时可重新开启。改动立即生效(菜单每次右键重建、热键随配置热加载重注册),无需重启。

与「对话热键留空」的区别:留空只关掉热键这一个入口,菜单和悬浮条仍可进入对话;总开关是整体下线。

对话进行中关掉总开关不会把人困住:启停按钮与热键仍能正常退出当前对话,只是退出后不能再进入。

9.4 对话状态与打断

悬浮条状态点四种对话态,思考与播报刻意分色(同色会让人以为卡住了):

状态 状态点色 视觉 含义
连接中 蓝 旋转 spinner 正在与服务端建会话
你说话 青绿 声纹随电平跳动 麦克风收音中
思考中 蓝 旋转 spinner AI 理解并生成回复
AI 播报 紫 呼吸脉冲 AI 正在语音回复

打断(barge-in):默认全双工——AI 播报中直接开口说话即可打断并接管对话,无需等它说完。

配置 默认 说明
dialog.end_smooth_window_ms 800 判停窗口:静音多久算一句话说完。越小 AI 接话越快,但太短会把句中停顿误判为说完(设置滑杆 500~5000,更大值可手改 config.yaml,上限 50000)
dialog.half_duplex false 半双工:AI 播报时暂停收音。外放音箱用户建议开启(防麦克风拾到外放声自我打断);戴耳机保持关闭即可享受全双工

Hermes 无语音回复,故不会出现「AI 播报」态:思考完成、回复文本定稿后直接回到聆听(状态机制豆包/Qwen 四态通用,Hermes 只走其中三态)。

§9.5~§9.7 为豆包 S2S 专属字段;阿里云 Qwen 的对应字段见 §9.9,Hermes 见 §9.10。

9.5 模型与人设

模型 版本号 适合
O2.0 通用对话 1.2.1.1 日常闲聊问答(默认)
SC2.0 角色扮演 2.2.0.0 拟人角色扮演,支持克隆音色与动作表情描述

人设字段按版本二选一生效:

  • O2.0:bot_name(AI 自称,≤20 字符)、system_role(角色/职责/口吻描述)、speaking_style(语气偏好,如「轻松幽默,多用短句」)
  • SC2.0:character_manifest(角色描述,如「你是古风书童,说话半文半白」,可含动作与表情描述),与上面三个互斥

9.6 音色与播报

  • 音色(dialog.speaker):下拉含 7 个官方音色(vv / 小何 / 云舟 / 小天 4 个中文,Tim / Dacey / Stokie 3 个英文);SC2.0 克隆音色(saturn_ 或 S_ 开头)直接在输入框手填名称
  • 语速 / 音量(dialog.speech_rate / dialog.loudness_rate):范围 [-50, 100],正值加快/增亮,仅 2.0 版本模型生效
  • 播放设备(dialog.output_device):AI 语音从哪个设备播出,默认跟随系统输出;下拉展开时自动刷新(支持热插拔)

9.7 会话行为

配置 默认 说明
dialog.enable_user_query_exit true 说「退出/再见」自动结束对话
dialog.keep_context true 下次进入对话续接最近 20 轮上下文(服务端按 dialog_id 记忆)
dialog.auto_reconnect true 长时间空闲或服务出错时自动重建会话,每次对话最多重连 1 次
dialog.strict_audit true 服务端安全审核等级(火山文档默认值)

9.8 常见问题

  • 进入对话提示「请先填写语音模式密钥」:三密钥留空且「引擎密钥」页也没有可用火山密钥;到设置 → 语音模式 填写,或先配好火山识别密钥
  • 提示「录音中,请先停止录音」/「对话中,请先退出对话」:两模式互斥的正常表现,先退出当前模式
  • AI 总是被「自己打断」:外放拾音导致,开半双工或改用耳机(见 9.4 节)
  • AI 接话太快/太慢:调判停窗口 end_smooth_window_ms(见 9.4 节)
  • 连接失败/频繁报错:先用「测试连接」自查并记下 logid;对照错误提示(如「对话配置有误」检查模型与人设,「长时间无交互」属正常释放,自动重连会接管)
  • 换音色/改人设不生效:部分参数在建会话时下发,退出对话重新进入即可
  • 切换提供商后设置项对不上:provider 切换后设置页「语音模式」字段组随之显隐(豆包组 / Qwen 组 / Hermes 组互斥),属正常现象;部分参数在建会话时下发,重新进入对话生效
  • Qwen 上下文没续上:Qwen 无跨连接续接(重连即新会话),跨次记忆仅豆包支持(keep_context);单会话内历史轮数由 max_history_turns 控制
  • Hermes 进入对话提示未配置:dialog.hermes.base_url / api_key 未填(api_key 即服务器 ~/.hermes/.env 的 API_SERVER_KEY);鉴权失败提示「Hermes 鉴权失败:请检查 API Key」
  • Hermes 没有声音:属正常现象——Hermes 不提供音频(audio_api=false),回复以文字显示在悬浮条气泡;TTS 为后续预留
  • Hermes 回答慢:自建服务器的模型生成耗时(实测纯文本单轮 5.5~7.9 秒),可调 turn_timeout_ms,但别调太小;思考中想反悔按一次对话热键取消本轮
  • Hermes 服务端会话越来越多:Hermes 会话只在服务端累积、客户端不关闭删除(每轮进入新建会话,标题自动加唯一后缀避免重复),属服务端特性,可在 Hermes 侧自行清理

9.9 阿里云 Qwen-Audio Realtime(提供商二)

语音对话的第二家提供商:阿里云百炼 Qwen-Audio Realtime 端到端语音大模型。在 设置 → 语音模式 → 对话提供商 切换为「阿里云」即可(dialog.provider: "aliyun"),设置页下方字段组随之切换为 Qwen 专属配置。

开通与密钥

  1. 在 阿里云百炼控制台 开通「Qwen-Audio Realtime」服务
  2. API Key(dialog.qwen.api_key):填百炼 API Key(sk- 开头);留空自动复用「引擎密钥」页的阿里云配置——与阿里云识别共用同一把钥匙,已配好阿里云识别的用户开箱即用
  3. 接入区域(dialog.qwen.region,设置 → 语音模式 → Qwen 接入 → 接入区域): - legacy(默认):旧域名公共端点,免 WorkspaceId - beijing / singapore:新域名独享端点,必须填写 WorkspaceId(百炼控制台右上角「业务空间」查看)
  4. 「测试连接」:用当前填写的密钥完成一次完整握手,成功显示 session=<id>(对应豆包的 X-Tt-Logid,报障时使用),失败给出具体原因

模型与人设

配置 默认 说明
dialog.qwen.model qwen-audio-3.0-realtime-plus plus=能力更强 / flash=更快更省
dialog.qwen.voice longanqian 5 个官方龙系音色:longanqian / longanlingxin / longanlingxi / longanxiaoxin / longanlufeng
dialog.qwen.instructions 空 系统指令(人设/风格/职责,对应豆包的人设描述),留空用服务端默认

收音与判停

配置 默认 说明
dialog.qwen.turn_detection server_vad server_vad=服务端 VAD 判停(可调参);smart_turn=模型自动判停(更自然,不可调参,且可能撤回有效语音,客户端已处理不卡住)
dialog.qwen.vad_threshold 0.5 [-1.0, 1.0],越大越不易触发(仅 server_vad)
dialog.qwen.silence_duration_ms 800 静音多久算一句话说完,200~6000ms(仅 server_vad)

会话行为

配置 默认 说明
dialog.qwen.enable_speech_emotion true 识别用户语音中的情绪并影响回复
dialog.qwen.max_history_turns 20 单次会话内携带的历史对话轮数(1~50),越大越连贯但 token 消耗越高
dialog.qwen.enable_search false 回复时联网检索(仅 plus/flash 模型生效)

与豆包的关键差异

项 豆包 S2S 阿里云 Qwen
密钥回退 复用「引擎密钥」页火山配置 复用「引擎密钥」页阿里云配置
判停 客户端静音判定(end_smooth_window_ms) 服务端 VAD / 模型自动判停(turn_detection)
跨次记忆 keep_context 按 dialog_id 续接 20 轮 无跨连接续接:重连即新会话;历史轮数仅限单会话内
人设 豆包字段组(O / SC 版本二选一) 单个「系统指令」字段
音色 7 个官方音色 + SC2.0 克隆音色 5 个官方龙系音色
测试连接 显示 logid=<值> 显示 session=<id>
计费 一次完整对话计一次 query(以火山台账单为准) 以百炼控制台账单为准

三家共用 dialog.enable 总开关;豆包与 Qwen 共用 output_device / half_duplex / auto_reconnect;Hermes 半双工恒开、无音频输出、自动重连不适用。对话状态四态与打断行为(9.4 节)对三家同样适用(Hermes 无「AI 播报」态)。

9.10 Hermes Agent(提供商三)

语音对话的第三家提供商:用户自建的 hermes-agent API server(NousResearch 开源 agent,OpenAI 兼容 HTTP)。与前两家性质不同——Hermes 是纯文本 agent(带完整工具集、记忆、人格),不提供任何音频能力(实测 capabilities audio_api=false / realtime_voice=false),所以断句与识别由 ORI 在本机补齐:本地 VAD 断句 + 对话专属 ASR 识别 → 文本发给 Hermes → 文字回复。自建自用,无任何计费。

开通与密钥

  1. 在服务器上部署 hermes-agent 并启动 API server(见其官方文档)
  2. 设置 → 语音模式 → 对话提供商 切换为「Hermes Agent(自建)」(dialog.provider: "hermes")
  3. 填写配置(dialog.hermes,设置 → 语音模式 → Hermes 接入): - base_url:服务地址,如 http://192.168.1.10:8642(不含 /v1,误填会自动剥掉) - api_key:即服务器 ~/.hermes/.env 里的 API_SERVER_KEY(无鉴权的自建服务可留空)
  4. 「测试连接」对 Hermes 不适用(按钮只给中性提示):请直接按对话热键实连一次验证

对话专属识别

Hermes 的输入文字来自 ORI 自己的 ASR 引擎,「对话专属识别」(dialog.asr,设置 → 语音模式 → 对话专属识别)可以给对话单独指定引擎,不影响听写:

配置 默认 说明
dialog.asr.engine 空 留空 = 跟随顶层「识别引擎」;可选 tencent / aliyun(其余引擎暂不支持,选错会明确报错并提示改回)
dialog.asr.model 空 留空 = 该引擎默认档;腾讯可填 16k_zh_en_2.0 / 16k_multi_lang
dialog.asr.lang 空 语种提示,如 zh,en;留空 = 引擎默认
dialog.asr.hotword 空 热词:腾讯填热词表 ID,阿里云填百炼控制台热词表 ID

典型用法:听写用中文引擎、对话用中英混说引擎,两者互不牺牲。

会话行为

项 行为
会话 每次进入对话在服务端新建会话(标题 = session_title + 唯一后缀,规避服务端「标题已占用」400);对话记录在 Hermes 侧可见,可与控制台 / CLI 共享同一份会话记录
轮次 按轮串行:请求在途期间不收音(「半双工」开关对 Hermes 不生效,恒开);回复文字流式显示在悬浮条气泡,定稿后回到聆听
取消 思考中按一次对话热键取消当前轮(服务端经 /stop 真正停住,不会后台继续跑),连按两次退出对话
容错 system_hint 随每轮声明「输入来自语音识别、可能有同音错别字或缺少标点」,交给 LLM 自己容错——比再加一层 AI 修正省一次往返
超时 connect_timeout_ms(健康检查与建会话,默认 5000ms)/ turn_timeout_ms(单轮回答上限,默认 60000ms;agent 可能跑工具,实测纯文本轮也要 5.5~7.9 秒,别调太小)
记忆 同一会话内多轮连续(服务端按会话记忆);退出后会话不再复用,跨次记忆(豆包的 keep_context)不适用

10. 设置界面说明

10.1 通用设置

分组 设置项 说明
程序行为 永久以管理员身份启动 页顶置顶动作按钮(UAC 盾牌图标):建登录计划任务实现开机无 UAC 管理员启动
热键 录音热键 默认 Ctrl+G,热键捕获框录制(Esc 取消、Backspace 清空),修改需重启生效
输出 粘贴延迟 10~1000 毫秒,默认 50
界面 自动隐藏时长 0~3600 秒,0=不隐藏
界面 悬浮条不透明度 0~100%,0=跟随主题默认,实时预览
界面 设置界面主题 卡片选择:极简暗色 / 流畅浅色,选中即时预览
引擎排序 显示开关 + ↑↓ 排序 5 组(腾讯云/阿里云百炼/讯飞/火山引擎/FunASR 本地),每组可展开逐模型开关(按厂商整组隐藏或按模型单隐藏);影响右键引擎菜单分组顺序与显隐

10.2 引擎密钥

手风琴卡片布局,当前引擎卡片默认展开,顺序随引擎排序设置:

  • 腾讯云:SecretId / SecretKey / AppID(密码框)
  • 阿里云百炼:API Key(sk- 开头)
  • 讯飞(大模型版 / 标准版两小节):大模型版 AppID / APIKey / APISecret;标准版 AppID / APIKey
  • 火山引擎(新版 / 旧版鉴权两小节):新版 API Key;旧版 App ID / Access Token
  • 通用 AI 接口(排在厂商卡之后):API 地址 / API Key / 模型,语音 AI 功能共用(语音命令「帮我」与 AI 修正都读这里);「检测连通性」用当前填写的地址/密钥/模型发最小请求,成功/失败即时提示原因

10.3 引擎参数

手风琴卡片布局,顺序随引擎排序设置:

  • 腾讯云:三档分类调用模型(大模型2.0 / 大模型1.0 / 通用引擎 各自下拉选模型)、语气词过滤(不过滤/部分/全部)、标点过滤(不过滤/句末/所有)、数字格式(中文数字/阿拉伯数字)、敏感词过滤(不过滤/过滤/替换为 *)、热词表、自学习模型
  • 阿里云百炼:语气词过滤(开关)、断句静音时长(200~6000ms)、热词表、语言提示(如 zh / zh,en)
  • 讯飞(大模型版 / 标准版):引擎版本切换;大模型版语气词过滤;标准版识别语言(中文/中英混合、英文)、标点过滤、语气词过滤、垂直领域(court/edu/finance/medical/tech)
  • 火山引擎(豆包 1.0 / 2.0):两代各自计费方式(按时长/按并发)、口语顺滑、二次识别
  • FunASR 本地:模型、运行设备(自动/CPU/GPU CUDA)、识别窗口(默认 600ms/低延迟 480ms/高准确 720ms)、热词、本地模型目录(用户自行下载的权重路径;高级项 funasr.model_hub / funasr.model_revision 仅配置文件可用)

打包版(exe)不含本地引擎依赖,此卡片仅显示一句不可用说明;本地识别请以源码方式运行。

10.4 AI 修正

设置项 说明
启用 AI 修正 总开关
修正后上屏 wait_for_correction,见 7.3 节
附带历史上下文 修正时把最近 15 条历史记录一并发给 AI 作语境参考
请求超时 1000~10000 毫秒,默认 3000
关闭思考模式 disable_thinking
批量修正句数 1~10,默认 3
批量静音触发 500~10000 毫秒,默认 1000
自定义提示词 版本下拉 + 多行编辑 + 新增/保存/删除版本,内置方案不可改

接口地址 / 密钥 / 模型与连通性检测在「引擎密钥 → 通用 AI 接口」配置(与语音命令「帮我」共用),本页只管修正行为。

10.5 语音命令

分组 设置项 说明
触发与命令 触发词 默认「听我说」
触发与命令 命令热键 默认 Ctrl+Shift+G,留空停用
触发与命令 AI 命令前缀 默认「帮我」
触发与命令 AI 命令思考模式 ai_thinking
触发与命令 AI 命令提示词 多行编辑,{selection}/{command} 占位符
触发与命令 自定义短语 开关,控制词表编辑器显隐
触发与命令 待命超时 3~30 秒,默认 8
命令参考 可展开收起 说法/效果对照表(自动从命令表生成,与匹配逻辑同步)
自定义短语词表 表格 + 添加/删除 短语名/短语内容

10.6 录音检测

分组 设置项 说明
录音 麦克风常驻 audio.warmup_capture 开关,防吞首字
录音 麦克风设备 下拉实时枚举 WASAPI 设备,支持热插拔,"系统默认"置顶
录音 自动停止 0~300 秒,默认 10(0=不自动停止)
录音 录音时长上限 0~3600 秒,默认 60(0=不限时)
语音检测 语音判定阈值 50~5000,默认 500
语音检测 断句等待 200~3000 毫秒,默认 600
语音检测 最短语音 100~2000 毫秒,默认 300

10.7 语音模式

分组设置项(详细用法与示例见第 9 章)。默认提供商为豆包 S2S;切换「对话提供商」后下方字段组整体切换(豆包 / Qwen / Hermes 互斥显隐):

分组 设置项 说明
接入 启用语音模式 总开关:关闭后菜单项、对话热键与悬浮条对话入口全部下线(本页保留可重开),立即生效
接入 对话提供商 豆包 S2S(默认)/ 阿里云百炼 Qwen-Audio / Hermes Agent(自建);切换后下方字段组随之显隐
接入 对话热键 默认 Ctrl+Shift+H,留空=只不注册该热键(菜单与悬浮条入口仍在),需重启生效
接入 API Key / App ID / Access Token 豆包:留空自动复用「引擎密钥」页的火山配置
接入 测试连接 一次完整握手验证开通与密钥;豆包成功显示 logid=<值>、Qwen 成功显示 session=<id>、Hermes 只给中性提示(诊断脚本见 9.10 节)
模型与人设 模型版本 O2.0 通用对话 / SC2.0 角色扮演(豆包)
模型与人设 机器人昵称 / 人设描述 / 说话风格 仅 O 版本生效(豆包)
模型与人设 角色描述 仅 SC 版本生效(与上面三个互斥),多行编辑(豆包)
音色与播报 音色 7 个官方音色下拉,克隆音色可直接手填(豆包)
音色与播报 语速 / 音量 [-50,100],仅 2.0 版本生效(豆包)
音色与播报 播放设备 下拉实时枚举输出设备(AI 语音从哪个设备播出),豆包/Qwen 共用
收音与判停 判停窗口 500~5000 毫秒,默认 800(更大值可手改配置文件)(豆包)
收音与判停 半双工模式 AI 播报时暂停收音(外放防自我打断),豆包/Qwen 共用(Hermes 恒半双工)
会话行为 语音退出 / 跨次记忆 / 自动重连 / 严格审核 4 个开关,默认全开(跨次记忆仅豆包生效)

provider = 阿里云(Qwen)时的字段组(dialog.qwen,与上方豆包组互斥显隐):

  • Qwen 接入:接入区域(legacy 公共端点 / beijing / singapore 独享端点)、WorkspaceId(新域名必填)、API Key(留空自动复用「引擎密钥」页阿里云配置)
  • Qwen 模型与人设:模型(Plus / Flash)、音色(5 个官方龙系音色)、系统指令(人设/风格)
  • Qwen 收音与判停:判停方式(server_vad 可调阈值与静音时长 / smart_turn 模型自动判停)、VAD 阈值(-1.0~1.0)、判停静音(200~6000ms)
  • Qwen 会话行为:语音情感、历史轮数(1~50)、联网搜索(仅 Plus/Flash)

provider = Hermes(自建)时的字段组(dialog.hermes + dialog.asr,与上方两组互斥显隐):

  • Hermes 接入:服务地址(http://host:port,误填 /v1 自动剥掉)、API Key(服务器 ~/.hermes/.env 的 API_SERVER_KEY)、模型名(保留字段,当前版本不随请求发出)、会话标题(留空=服务端无标题)、识别容错提示(system_hint)、连接超时、单轮超时
  • 对话专属识别:对话识别引擎(留空=跟随顶层「识别引擎」;可选腾讯云/阿里云)、对话模型档、语种、热词(字段含义见 9.10 节)

10.8 关于

  • 头部卡:圆角图标 + "Open-RealtimeASR-UI" + 版本号
  • 折叠卡:
  • 关于本应用:定位与流程说明
  • 开源组件:CPython / PySide6 / sounddevice / PortAudio / CFFI / numpy / keyboard / pyperclip / websockets / PyYAML / FunASR / PyTorch 及许可证
  • 联系方式:哔哩哔哩空间动态(打开链接)
  • 日志与排障:日志保留天数(1~365)、打开日志目录、清空日志

11. 主题与个性化

11.1 内置主题

主题 配色 特点
浅色 bg #f7f7f8、text #1d1d1f、accent #007aff 明亮简洁
深色 bg #1c1c20、text #eeeeee、accent #5696e8 深色配色
极简 — 正方形悬浮窗 + 中央声纹波形 + 上方气泡文本,整窗即启停按钮(默认)

切换方式:右键菜单 → 主题颜色,或 config.yaml → ui.theme_name(重启生效)。

11.2 扩展主题包

内置主题之外,支持外部主题包扩展:把主题包放入 themes/ 目录即可,重启后生效,无需改代码。

主题包 特点
赛博朋克风 深紫黑底 #0d0d1a、霓虹青字 #00f0ff、警红 accent #ff2a5f、明黄顶线,细霓虹边 + 左下切角
凯尔特风格 黑底白字,启停按钮为凯尔特结图(录音中旋转动画)、链纹边框

主题包机制:

  • 结构:themes/<包名>/theme.yaml(必填 bg/text/accent),投放即生效
  • 特性模块缺失时自动跳过该主题,不影响程序启动
  • 主题名与内置重名时跳过
  • 打包版主题目录在 exe 同目录,源码版在项目根目录
  • 精简构建(build.bat lite)物理排除 DLC 主题

11.3 字体设置

字体三选一(优先级从高到低,运行时也可通过右键菜单「选择字体文件」即时切换):

  1. font_file:任意 .ttf / .otf 文件绝对路径(推荐非系统安装字体)
  2. font_family:系统已装字体的 family 名(如 Microsoft YaHei UI)
  3. 都不填:使用内置默认字体(阿里巴巴普惠体 3.0 Medium;字体文件缺失时退回 Qt 默认字体)

11.4 悬浮条外观调整

项 说明
位置与大小 左键拖动移动、右下角手柄缩放,持久化(存状态目录 state.json,不写 config.yaml)
不透明度 ui.bar_opacity:0=主题默认(浅色 82%/深色 92%),1~100=百分比,设置页滑块实时预览
永远置顶 ui.always_on_top,默认开;关闭则允许其他窗口遮挡
跟随光标 ui.follow_cursor,默认关
自动隐藏 空闲超时(ui.auto_hide_seconds)隐藏到托盘,默认 0=不隐藏
文字大小 ui.font_size_bar(悬浮条)/ ui.font_size_app(菜单等应用默认)

12. 配置说明

12.1 配置文件查找顺序

配置文件为 YAML 格式,查找顺序:

打包版(frozen):

  1. exe 同目录 config.yaml
  2. exe 同目录 config/config.yaml

源码版:

  1. 项目根 config/config.yaml
  2. 项目根 config.yaml

共同兜底:

  1. 当前工作目录 config/config.yaml
  2. 当前工作目录 config.yaml
  3. 用户主目录 ~/.asr_voice/config.yaml

首次运行自动生成:无配置文件时复制内置模板——打包版优先生成到 exe 同目录(不可写时退 ~/.asr_voice/config.yaml),源码版生成到 config/config.yaml(已 gitignore)。

加载合并:默认值(defaults.py)← config.yaml(深合并 + 类型归一化)。

状态目录(paths.state_dir):打包版 <exe 目录>/.asr_voice/,源码版 ~/.asr_voice/——存放 history.json、state.json、phrases.json、prompts.json、menu_icons/。打包版与源码版状态互不共享。

12.2 常用配置字段

完整字段及注释见 config/config.example.yaml。常用配置:

字段 默认值 说明
engine aliyun 当前引擎:aliyun / tencent / xfyun / volcengine / funasr
aliyun.model paraformer-realtime-v2 通用引擎档(默认);「大模型版」档固定 qwen-audio-3.0-asr-flash-streaming(更准,右键菜单切换)
funasr.chunk_preset 默认 本地识别窗口:默认 600ms / 低延迟 480ms / 高准确 720ms
funasr.local_dir 空 本地模型目录(用户自行下载的权重路径);非空时直接本地加载,不联网下载
funasr.model_hub ms 下载渠道:ms=ModelScope / hf=HuggingFace(仅自动下载时生效)
funasr.model_revision 空 锁定模型版本(如 apache-2.0-20260804);留空用最新
audio.sample_rate 16000 采样率,各引擎通用要求 16kHz
audio.warmup_capture false 麦克风常驻预热:防吞首字(任务栏麦克风图标常亮)
audio.input_device 空 麦克风设备名(sounddevice 子串匹配);空=系统默认输入设备
vad.energy_threshold 500 能量阈值,低于此值视为静音
vad.silence_duration_ms 600 连续静音超过此时长判定一句话结束
hotkey.toggle ctrl+g 全局开录音热键
recording.auto_stop_seconds 10 无语音自动停止(0=不停止)
recording.max_session_seconds 60 单次录音硬超时(0=不限时)
recording.live_intermediate true 中间结果实时上屏(逻辑锁见 5.3 节)
injection.method simulate_keys 注入方式:simulate_keys(逐字)/ clipboard_paste(剪贴)
injection.keep_clipboard false true=识别结果保留在剪贴板;false=粘贴后恢复剪贴板原内容
injection.game_mode false 游戏模式:强制剪贴板粘贴注入(不降级逐字、粘贴后不恢复剪贴板)
ui.theme_name 极简 内置浅色 / 深色 / 极简;扩展主题见 themes/ 主题包
ui.engine_order aliyun,volcengine,xfyun,tencent,funasr 右键引擎菜单分组顺序(设置界面可调)
ui.auto_hide_seconds 0 空闲多久自动隐藏到托盘(0=不自动隐藏)
history.enable true 历史对话剪贴板开关
llm.enable false AI 修正开关(默认关,opt-in)
llm.wait_for_correction false true=等 LLM 修正后直接上屏修正版(无跳动,每句延迟 1~3 秒)
commands.enable false 语音命令总开关(与「逐字同步」互斥)
commands.prefix 听我说 触发词
commands.standby_seconds 8 单说触发词后的待命秒数
dialog.enable true 语音对话总开关:关闭后菜单项、对话热键与悬浮条对话入口全部下线(设置页保留可重开)
dialog.provider doubao 语音对话提供商:doubao=豆包 S2S / aliyun=阿里云百炼 Qwen-Audio Realtime / hermes= Hermes Agent(纯文本,见 9.10 节)
hotkey.dialog ctrl+shift+h 进入/退出语音对话热键(空=只不注册该热键,整体关闭用 dialog.enable)
dialog.model 1.2.1.1 对话模型(豆包):O2.0 通用对话(默认)/ 2.2.0.0 SC2.0 角色扮演
dialog.speaker zh_female_vv_jupiter_bigtts AI 播报音色(豆包);SC2.0 克隆音色直接填名称
dialog.end_smooth_window_ms 800 判停窗口(豆包):静音多久算一句话说完(见 9.4 节)
dialog.half_duplex false 半双工:AI 播报时暂停收音(外放防自我打断),豆包/Qwen 共用(Hermes 恒半双工)
dialog.qwen.model qwen-audio-3.0-realtime-plus Qwen 对话模型:plus(更强)/ flash(更快)
dialog.qwen.turn_detection server_vad Qwen 判停方式:server_vad(可调阈值/静音)/ smart_turn(模型自动判停)
dialog.qwen.enable_search false Qwen 联网搜索(仅 plus/flash 模型生效)
dialog.hermes.base_url 空 自建 Hermes API server 地址(如 http://192.168.1.10:8642,不含 /v1)
dialog.hermes.api_key 空 即服务器 ~/.hermes/.env 的 API_SERVER_KEY
dialog.asr.engine 空 对话专属识别引擎:留空=跟随顶层 engine;可选 tencent / aliyun(仅 Hermes 对话路径消费)
ui.engine_show_* true 按厂商控制右键识别引擎菜单整组显隐(如 engine_show_tencent: false 隐藏腾讯云整组)
ui.engine_hidden_models 空 逗号分隔的引擎 ID,逐模型从右键菜单隐藏(空=全部显示)
logging.retention_days 30 日志保留天数(按天滚动,启动时清理)

热键实现:含修饰键的组合(Ctrl/Alt/Shift/Win + 主键)走 Windows 原生 RegisterHotKey,不挂钩子、不改动修饰键状态,因此不会出现"按过一次 Shift 之后系统一直认为 Shift 按着"的修饰键滞留;组合已被其他程序占用时会注册失败并提示换组合。只有单个普通键(删除键打断用的 Backspace/Delete)走键盘钩子,且只监听不拦截。

13. 常见问题与故障排查

13.1 程序无法启动

可能原因与排查:

  • 源码版缺依赖:确认已 pip install -r requirements.txt,Python 版本 ≥ 3.10
  • 配置文件损坏:删除/备份 config.yaml 后重新启动自动生成;打包版会在启动时弹窗提示配置加载失败(退出码 3)
  • 核心模块导入失败:源码版确认 asr_voice 包结构完整(退出码 4)
  • 双击 exe 无反应:查看 exe 同目录 logs/ 下日志;确认 exe 所在目录可写(不可写时配置会退到 ~/.asr_voice/config.yaml)
  • 安全软件拦截:部分安全软件会拦截键盘钩子与托盘程序,添加信任后重试

13.2 热键无效或冲突

  • 含修饰键的热键由 Windows 原生 RegisterHotKey 注册,不需要管理员权限(含 Win 键的组合同样可用)
  • 热键被其他程序(含系统)占用时注册失败并提示更换热键;按提示换一个组合即可(录音热键失败会弹窗并以退出码 3 结束)
  • 修改热键后需重启程序生效
  • 建议避免与系统 / 常用软件全局热键冲突(如系统 Win+H 本身)

13.3 识别没有文字输出

按以下顺序排查:

  1. 密钥:确认当前引擎密钥已正确填入(设置 → 引擎密钥),密钥错误时悬浮条会显示错误信息
  2. 网络:确认可访问对应厂商服务(公司网络/防火墙可能拦截)
  3. 麦克风:设置 → 录音检测 选择正确设备;确认系统麦克风权限已放行;观察录音时状态点是否变红(未变红说明没有采到声音)
  4. VAD 阈值:说话声低于判定阈值会被当静音,适当调低「语音判定阈值」
  5. 引擎版本:切换其他引擎验证是引擎问题还是通用问题
  6. 日志:查看 logs/asr_voice.log 中报错信息(打包版在 exe 同目录 logs/,源码版在项目根 logs/)

13.4 首字被吞 / 漏字

  • 确认「麦克风常驻」(audio.warmup_capture)已开启——预滚缓冲保留按下热键前约 400ms 音频
  • 若关闭了麦克风常驻,按下热键后稍顿再开口可缓解
  • 逐字输入在部分程序中会丢字,可切换为剪贴输入(微信/企业微信已自动切换)
  • 讯飞 / 阿里等引擎的断句参数影响中间结果节奏,可按需调整「断句静音时长」

13.5 AI 修正没有反应

  • 先确认是否真的启用:开启后每句话应有悬浮条三态提示(见 7.6 节);什么提示都没有 = 未启用,检查 llm.enable 与 api_key
  • 提示「AI 修正失败(保留原文)」:检查 base_url / model / api_key / 网络;超时(默认 3 秒)可适当调大 timeout_ms
  • 自定义 prompt 必须包含 {text} 占位符,否则 LLM 收不到待修正文本
  • 本地 Ollama 用户:确认 Ollama 服务已启动,base_url 为 http://localhost:11434/v1

13.6 语音命令不生效

  • 确认「语音命令」已在右键菜单勾选(commands.enable=true)
  • 触发词需在句首;连说方式为「触发词 + 命令」一步到位
  • 触发词被识别成同音字时,需要开着 AI 修正才能二次修正检测;否则说慢一点、发音清晰一些
  • 与「逐字同步」互斥:开启语音命令会自动关闭逐字同步,属正常现象
  • AI 命令("帮我"类)需配置 llm.api_key

13.7 剪贴板被覆盖

  • 「保留剪贴」默认关:粘贴后自动恢复剪贴板原内容
  • 开启「保留剪贴」后识别结果会占用剪贴板(覆盖图片/文件),Ctrl+V 可随时重复粘贴
  • 复制图片后立即语音输入导致图片丢失:多为开启了「保留剪贴」,右键菜单关闭即可避免

13.8 FunASR 相关异常

  • 打包版选不了 FunASR:打包版不含本地引擎,需源码方式运行(见 3.3 节)
  • 依赖未安装:右键菜单显示"(需安装)",执行 pip install funasr torch torchaudio
  • 首次识别慢:模型首次使用自动下载(~/.cache/modelscope/),离线环境请提前下载
  • 启动变慢:preheat=true 启动即预热模型(CPU 3~8 秒),可关闭改为首次录音才加载
  • GPU 环境:device 设为 cuda 更快;无 GPU 时设为 cpu
  • 本地引擎识别能力与云端大模型有差距(设置 → 关于 → 本地离线引擎 有说明)

13.9 游戏内无法输入文字

逐字输入基于无扫描码的合成键击(KEYEVENTF_UNICODE),游戏等自绘输入框的输入管道(Raw Input / DirectInput / 扫描码)不读取这类事件——日志可见「注入开始/完成」且无失败记录,但游戏内不出字。

  • 右键菜单「注入逻辑 ▸ 游戏模式」开启后强制走剪贴板粘贴;聊天框支持粘贴的游戏即可上屏
  • 目标游戏以管理员运行(常见于带反作弊的客户端):Windows 的 UIPI 权限隔离会静默丢弃普通权限进程发出的合成输入,手动按键不受影响。程序内三种提权方式:① 开启「游戏模式」时按悬浮条询问选「立即提权」(游戏模式随重启保留时,启动后也会再问一次);② 右键菜单「程序行为 ▸ 程序提权」(一次性,弹 UAC 后由提权实例接管);③ 设置「通用设置」顶部的「永久以管理员身份启动」(建登录计划任务,之后每次启动都是管理员且不弹 UAC)。也可在资源管理器右键 exe 选「以管理员身份运行」。可在任务管理器「详细信息」页查看目标进程的「已提升」列确认;日志「游戏模式发送 Ctrl+V」行的「权限差」字段同刻取证(True=目标高权限、合成输入必被丢弃)
  • 若粘贴也无效,说明目标输入框连剪贴板粘贴都不支持,暂无通用解法
  • 注意:游戏内退格同样无效,游戏模式下 AI 修正替换不可用

14. 附录

14.1 常见术语说明

术语 说明
ASR Automatic Speech Recognition,自动语音识别
VAD Voice Activity Detection,语音活动检测(判断有声音/静音)
逐字同步 中间(未断句)结果实时写入输入框的机制
注入 将识别文本写入目标输入框的过程
LLM Large Language Model,大语言模型(用于 AI 修正与 AI 命令)
OpenAI 兼容协议 一套通用的 LLM HTTP 接口约定,OpenAI / DeepSeek / Ollama 等均支持
DDC 语义顺滑(火山引擎),去语气词/重复词
二遍识别 火山引擎 nonstream:静音约 800ms 出更准的 final
热词 预设的专有名词表,提高特定词汇识别准确率
预热 程序启动时后台加载模型,缩短首次识别延迟
托盘 Windows 任务栏右侧通知区域
S2S Speech-to-Speech,端到端语音对话(说话→AI 理解→语音回复)
barge-in 插话打断:AI 播报中开口说话即打断并接管对话
提供商(provider) 语音对话的服务后端,三选一:豆包 S2S / 阿里云 Qwen-Audio / 自建 Hermes Agent

14.2 默认值速查

项 默认值
默认引擎 阿里云百炼(Paraformer v2)
录音热键 Ctrl+G
长按说话 / 轻点阈值 关 / 300 毫秒(见 5.2 节)
命令热键 Ctrl+Shift+G
对话热键 Ctrl+Shift+H
语音命令触发词 听我说
AI 命令前缀 帮我
注入方式 逐字输入(不保留剪贴)
无语音自动停止 10 秒
录音时长上限 60 秒(0=不限时)
待命超时 8 秒
对话判停窗口 / 半双工 800 毫秒 / 关
对话提供商 / 对话模型 豆包 S2S / O2.0 通用对话(1.2.1.1)
VAD 阈值 / 断句 / 最短语音 500 / 600ms / 300ms
历史记录 开,500 条
AI 修正 关(默认 LLM:DeepSeek)
主题 极简
日志保留 30 天
麦克风常驻预热 关
后台端口/口令 无(本程序为纯桌面应用,不提供 Web 后台)

14.3 退出码说明

退出码 含义
0 正常退出
1 未捕获异常
2 用法错误(命令行参数)
3 配置加载失败 / 热键注册失败
4 核心模块导入失败
5 运行时异常

命令行参数:--config <路径>(指定配置文件)、--hidden(静默启动仅托盘)、--replace(接管模式:提权重启/自启切换时通知旧实例退出,待单实例锁释放后接管)。

14.4 参考链接

  • 项目仓库:见 README.md
  • 配置模板:config/config.example.yaml
  • 阿里云百炼控制台:https://bailian.console.aliyun.com
  • 阿里云 Qwen-Audio Realtime 文档:https://help.aliyun.com/zh/model-studio/qwen-asr-realtime-interaction-process
  • 腾讯云密钥管理:https://console.cloud.tencent.com/cam/capi
  • 腾讯云 ASR 控制台:https://console.cloud.tencent.com/asr
  • 讯飞实时语音转写:https://console.xfyun.cn
  • 火山引擎语音控制台:https://console.volcengine.com/speech

License 与免责声明

本项目以 Apache License 2.0 开源。

  • 云端识别引擎(阿里云百炼 / 腾讯云 / 讯飞 / 火山引擎豆包)均为各厂商官方服务,使用前需自备密钥并按各厂商计费规则自费开通,产生的费用与合规责任由使用者自行承担。
  • 本地 FunASR 引擎完全离线免费:工具包代码为 MIT,paraformer-zh-streaming 模型权重为 Apache-2.0(以官方模型卡为准),版权归 FunASR / ModelScope 相关方所有。本仓库不内置、不分发模型权重,由用户自行下载;如需商用分发权重,请锁定 funasr.model_revision 并按 Apache-2.0 履约。
  • 本项目通过官方接口调用上述服务;厂商接口变动可能导致对应引擎暂时不可用,请以各厂商最新文档为准。
  • 第三方组件(PySide6 / sounddevice / FunASR 等)的完整许可清单、版权署名与商用合规说明见仓库 THIRD_PARTY_NOTICES.md。