Skip to content

20. 宿主语音 ​

翻译说明: 本页是与 英文源规格 一一对应的机器辅助翻译。代码、协议字段和标识符保持原文;如翻译与英文源事实有歧义,以英文版本为准。

事实来源:packages/shared/src/types/speech.ts、 packages/agent-runtime/src/speech/、 apps/desktop/electron/main/services/speech-service.ts。 ADR:0281-host-speech-capability。

1. 能力 ​

独立于聊天流和模型选择器:

transcribe({ sessionId, path, mimeType?, language? }) → { text }
synthesize({ sessionId, text, voice?, format? }) → { path, mimeType, dataUrl? }

输入是 session scratch 文件路径。输出音频写入该 session 的 scratch。 渲染器不接收 provider 密钥。TTS dataUrl 在文件大于8 MiB 时省略。 输入上限25 MiB(SPEECH_INPUT_TOO_LARGE)。

2. 绑定 ​

AppSettings.speech 为可选字段,不升 schema:

{
  transcribe?: { providerId, modelId, protocol, voice?, format?, path?, extra? }
  synthesize?: { providerId, modelId, protocol, voice?, format?, path?, extra? }
}

协议 id 匹配 ^[a-z][a-z0-9._-]{0,63}$。speech 为空或缺省即未配置状态;应用界面 不再读取该绑定,调用方只有插件与显式 IPC 调用(ADR 0291)。

3. 内置协议 ​

idtranscribesynthesize
openai_audioPOST {baseUrl}/audio/transcriptions multipartPOST {baseUrl}/audio/speech JSON
openai_chat_audio不支持POST {baseUrl}/chat/completions + audio:{format,voice};读取 choices.0.message.audio.data

本地 OpenAI-Audio 兼容服务器使用 openai_compatible provider + openai_audio。推荐模型:OpenAI whisper-1 / tts-1、Groq whisper-large-v3、小米 mimo-v2.5-tts。

4. IPC ​

pi-desktop/speech/getStatus → SpeechStatus(无密钥)
pi-desktop/speech/transcribe
pi-desktop/speech/synthesize

错误码:SPEECH_NOT_CONFIGURED、SPEECH_PROTOCOL_UNSUPPORTED、 SPEECH_INPUT_TOO_LARGE。网络/认证复用 NETWORK_ERROR / PROVIDER_UNAUTHORIZED。provider 缺失或禁用返回 NOT_FOUND。

5. 插件适配器 ​

pi.speech.registerAdapter({ protocol, label, roles, handle }) 需要 speech.adapter.register(高风险)。handle 留在插件进程内。 宿主仅存元数据并调用 speech.handle。handle 可返回 { kind: "text" }、{ kind: "audio", mimeType, data } 或 { kind: "http", call } 由宿主用绑定密钥代发。HTTP URL 必须保持在 provider origin。内置协议 id 受保留。卸载时注销。

6. 产品 ​

设置页面不再提供语音入口(ADR 0291)。绑定由调用方通过宿主设置接口写入, 消费方只有插件与 speech/* IPC,渲染器没有任何转写或朗读控件。 Whisper / TTS 模型不得出现在聊天模型选择器中。

v1 不实现麦克风采集、Realtime 和 agent 工具。

本地优先 · 模型可替换 · 插件可扩展。 AIUO.NET