T3 Code 非官方中文翻译不是官方产品,也不是 T3 Tools 官方文档。源提交 d2c25950b4d9英文原文GitHub 源文件
Skip to content

语音输入 ​

转录修改的是 Composer(编写器)草稿。它不会提交一次智能体回合(turn)。音频是临时的客户端(client)输入,只有按正常方式提交消息,才会把得到的文本发给智能体。移动端默认使用设备端转录。要把音频送出设备,必须有一份显式授权,授权中要指明一个环境(environment);如果是云端转录,还要指明一个提供方(provider)。

共享控制器拥有这一操作,采集和转录则由客户端提供。准备阶段会为整段录音绑定转录器,以及已经解析好的区域设置。录音开始前会记下草稿的归属、文本和修订,插入前再核对一次,因此迟到的转录不能覆盖一份已经被编辑或已经被换掉的草稿。转录器可以提供一个流式会话;在这种情况下,音频会在采集过程中就送出,finish 会取代基于文件的 transcribe。

音频可以去往哪里 ​

在移动端,设备端转录不需要音频授权。环境转录和云端转录共用一个录音器,并且只上传已经录完的内容。客户端把授权放在与设备绑定的安全存储里,不放进偏好设置备份,并在原生解码之后、上传之前重新核对这份授权。

Web 授权位于偏好设置快照之外,因此另一个窗口在保存无关设置时,不能让一份已撤销的授权复活。每一次新的选择都会得到一份不同的授权,即使这个目的地以前曾经被选中过。Web 钩子把控制器绑定到这份授权,以及所选环境的连接上。要使用该环境的模型,需要 voiceTranscription;要把音频转发到所选提供方,需要 cloudVoiceTranscription。一旦更改授权,或者失去连接、权限或所需能力,就会同时丢弃正在进行的录音,以及为重试而保留的任何录音。它从不会自行改选一个回退目的地。设置页上的转录测试使用同一个钩子。麦克风回环测试另行采集,只供本地播放,什么也不发送。传输层拒绝重定向,这样凭据和音频就不能跟着一次重定向去到另一台主机。

转录清理需要自己单独的授权,默认是关闭的。它发送的是文本,从来不是音频,接收方是这份草稿自己所属环境的文本生成模型,因为凭据就存放在那个环境里。

云端目的地会同时绑定负责转发的环境,以及被点名的提供方。它使用一个独立的、只做批量的端点:更换服务器密钥并不能把一份环境本地授权升级上去;云端录音也从不会使用流式套接字,也不会回退到另一个提供方,或回退到该环境的原生模型。

OpenRouter 会路由到许多上游,因此它的授权还会指明确切的模型,并且每次上传都把该模型作为查询参数一并带上。服务器只接受出现在 OpenRouter 公开的、符合 ZDR 条件的转录目录中的 id。成功读取之后,这份目录会缓存十分钟;openrouter/auto 或 :nitro 这样的路由别名会在那之前就通不过模式校验。请求会设置 provider.zdr,并且不携带 models 回退列表。OpenRouter 在选择端点时,会应用该账户的安全保留策略。目录里不保存凭据或同意状态,因此它可以缓存;而密钥是否存在,则在每次请求时重新读取。

服务器侧 ​

语音服务在子进程里运行 transcribe-cpp,这样一次卡住的原生调用可以被杀掉,而不会拖垮服务器;打包上的约束(Node SEA、Electron ASAR)见 native.ts。同一时间只运行一个原生请求。批量上传把选项放在 shared/speech.ts 所定义的正文分帧里;流式传输则在套接字的第一条命令中发送这些选项。模型文件、所选模型、硬件放置位置和卸载超时,都是服务器设置里的环境状态。来自其他应用的模型文件,只有在其 SHA-256 与某条目录条目匹配之后,才会以符号链接的形式安装,这样存储就绝不会加载目录没有钉住的文件,删除一个模型时也绝不会删掉不是 T3 Code 下载的文件。

Silero 静音检测器是可选的。如果它下载失败,录音会在重试冷却期间使用原始音频,这样检测器出故障就不会挡住听写。显式安装一个语音模型时,也会不等待就重试该检测器。

取消与资源所有权 ​

取消会立刻让结果失效,但在底层工作落定之前,资源仍由该项工作持有。Apple 的原生转录调用一旦开始就不能被中断。如果在中止信号触发时就释放会话或删除它的录音,就会与这项工作发生竞态。转录契约因此要求各个实现只在自己的工作已经停止之后才落定;Apple 绑定会在各次原生调用之间检查取消,并丢弃迟到的结果。在服务器上,中断一次批量请求改为杀掉工作进程;下一次请求会重新加载模型。

非官方译文 · 源提交 d2c25950b4d9 · 不代表 T3 Tools