Skip to content

[Feature] 为桌面端和 WebUI 增加统一的“语音输入”功能 #536

Description

@loto585

Affected area

Desktop UI (agent-gui / React)

Problem statement (what should this solve)

目前桌面端和 Gateway WebUI 缺少一致、完整的语音输入能力,用户无法像使用文本输入一样直接通过麦克风进行实时语音转写, 这个问题影响桌面端和 WebUI 用户使用麦克风快速输入消息。

Proposed behavior

实现桌面端和 WebUI 统一的实时语音输入能力,具体要求如下:

  • 桌面端和 WebUI 聊天输入框始终显示麦克风按钮;
  • 麦克风按钮不依赖配置测试结果,配置成功、失败或尚未测试时都应显示;
  • 用户点击麦克风后,再依次执行麦克风权限检查、录音初始化、语音识别服务连接和音频传输;
  • 权限申请、服务连接或识别过程失败时,在用户点击麦克风后提示具体错误;
  • 支持以下实时语音识别供应商,并保持统一顺序:
    1. 腾讯云实时语音识别
    2. 火山引擎实时语音识别
    3. 阿里云 DashScope
    4. 百度智能云实时语音识别
  • 桌面端语音识别配置通过 Gateway 安全同步到 WebUI;
  • 敏感凭据不进入公开设置广播,使用受保护的私有同步数据传递;
  • 增加桌面端麦克风权限声明、音频采集、实时音频分片、服务连接、识别结果回写和会话清理能力;
  • 增加 Gateway 端供应商管理、WebSocket 音频传输、配置同步和敏感字段隔离能力;
  • 增加桌面端、WebUI、Gateway 和协议层的自动化测试及验收文档。

Estimated change scope

  • crates/agent-ui/src/pages/chat/
    • 聊天输入框麦克风按钮
    • 语音输入会话生命周期
    • 音频采集和识别结果回写
  • crates/agent-ui/src/pages/settings/
    • 语音输入供应商配置页面
    • 供应商切换、掩码字段、保存和清空秘钥行为
  • crates/agent-ui/src/lib/stt/
    • WebUI 与桌面端共用的音频和 STT 类型
  • crates/agent-ui/src/lib/settings/
    • STT 配置模型、默认值、规范化及同步逻辑
  • crates/agent-ui/src/i18n/translations/
    • “语音输入”侧边栏和页面文案
  • crates/agent-gui/src/lib/stt/
    • 桌面端 STT 配置服务和实时传输
  • crates/agent-gui/src-tauri/src/services/stt/
    • 腾讯云、火山引擎 v3、阿里云 DashScope、百度智能云供应商实现
  • crates/agent-gui/src-tauri/src/commands/config/settings/
    • 桌面端配置读写、敏感字段和 Gateway 同步
  • crates/agent-gui/src-tauri/src/services/gateway/
    • 桌面端设置同步和私有秘钥 sidecar
  • crates/agent-gui/src-tauri/Info.plist
  • crates/agent-gui/src-tauri/Entitlements.plist
    • macOS 麦克风权限声明
  • crates/agent-gateway/internal/stt/
    • Gateway STT 管理器、供应商实现、连接和音频处理
  • crates/agent-gateway/internal/session/
    • Gateway 设置同步和 STT 状态管理
  • crates/agent-gateway/proto/v2/gateway_ws.proto
    • Gateway 与客户端之间的 STT 协议扩展
  • crates/agent-gateway/web/src/lib/stt/
    • WebUI STT 配置服务和实时音频传输
  • crates/agent-gateway/web/src/app/
    • WebUI 设置初始化和 Gateway 状态同步
  • crates/agent-gateway/test/webui/
  • crates/agent-gui/test/chat/
  • crates/agent-gui/test/settings/
    • 语音输入、配置同步、密码掩码和会话生命周期测试
  • docs/stt-mvp-acceptance.md
    • 语音输入功能验收标准和测试说明

Alternatives considered

  • 使用浏览器内置 Web Speech API
    未采用。不同浏览器、移动端和桌面端的支持情况及识别效果不一致,无法保证与桌面端使用相同的供应商、模型和配置。

  • 仅在语音识别连接测试成功后显示麦克风按钮
    未采用。连接测试失败不代表用户没有配置其他可用供应商,也不应阻止用户主动点击麦克风并获得明确错误提示。

  • 桌面端和 WebUI 分别维护独立的语音识别配置
    未采用。独立配置会导致供应商、模型和秘钥状态不一致,增加重复配置和凭据暴露风险。

  • 在 WebUI 中显示真实秘钥内容
    未采用。WebUI 仅需要知道字段是否已配置,不应向浏览器暴露桌面端或 Gateway 托管的真实秘钥。

Pre-submit checklist

  • I searched existing issues and pull requests and found no duplicates.
  • This proposal is focused on a single feature or improvement.
  • I understand a PR should come after this issue is confirmed by maintainers, otherwise it will be converted to draft.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions