跳转到内容

模块 XVI —— 语音与实时 agent

模块 XVI 治理对话式与实时 agent。它是一个观察与治理平面:它重新实现语音 SDK (Realtime API、WebRTC、ASR 或 TTS),也从不自己开启媒体流。它决定可以开启一个语音会话、 使用哪个模型和提供方、在哪条策略下,并跟踪该会话的元数据——绝不跟踪其内容。

开启一个语音接口被视为一个特权操作,而非一项自由操作。策略是默认 DENY: 一个没有任何允许策略的会话会被拒绝。一次开启是两阶段的,并通过 审批门进行 human-in-the-loop 门控;它绑定到一个 plan_hash, 因此一次审批不能被静默升级为一个更强的模型(anti-TOCTOU),归属于真实主体审计 (绝非 system),并以仅追加方式留存证据。模块本身从不调用提供方—— 执行经由一个单独的分发接缝离开。

另一半是观察:本模块只跟踪会话元数据——派生状态(live/idle/ended,在读取时由活动新近度计算, 不存储生命周期列)、轮次计数、时长、延迟(来自真实样本的诚实平均值与最大值),以及 BCP-47 语言。 据此它提出治理 finding:当遥测命名了一个没有任何策略允许的 agent/模型/提供方时提出一条策略违规, 当延迟越过某条策略 SLA 时提出一条延迟降级 finding,以及当尝试开启而没有配置任何门时提出一条 未治理开启 finding——该缺口被暴露,且该开启仍被拒绝。

本模块在共享数据模型中声明了三个实体:

实体可变性用途
session可变(upsert)会话元数据;零内容
policy可变治理声明——谁可以用哪个模型/提供方开启(默认 DENY)
decision仅追加开启/关闭决策的不可变 ledger

一条策略按 agent、允许的模型和允许的提供方匹配(各项可为具体值或通配符),并带有可选的 会话分钟数与延迟 SLA 边界。没有匹配策略即表示 DENY。 decision ledger 记录每个 open_requestopenclose,连同其策略裁决、门状态和结果状态。读取访问需要 viewer 角色及以上; 声明一条策略和开启一个会话是管理性的、租户级的、受审计的操作。这些模块路由发布在 独立的 beta 模块路由参考中,而非稳定核心契约中—— 它们的字段级形状存在于产品的类型化接口中。 此处没有金额;FinOps(模块 XI)拥有成本。

本模块拥有一个 deny-closed 的摄取接缝——它自己的 voice.telemetry.observed 事件—— 一个进程内探针将通过它馈送会话元数据。该传输层在构造上即为最小数据:遥测解析器携带一份 允许列表,并在看到一个被禁止的键时拒绝整个事件,因此任何音频、文字记录文本、ASR/TTS 文本、 prompt/响应内容或说话者 PII 都绝不会被持久化。唯一保留的文字记录信号是一个外部文字记录定位符的 单向哈希——证明文字记录存在,而绝非文字记录本身。治理 finding 以 finding.reported 的形式在提交之后带着哈希化的细节发出。

一次受治理的开启实时分发:一旦运营方置备了语音分发器,一次获批的开启就铸造一个 服务端临时凭据,并只返回该凭据加上连接坐标——模型、语音、工具和轮次检测从策略固定, 绝不来自客户端,而提供方的主密钥绝不离开服务器。没有该置备,分发接缝就处于 deny-closed: 一次获批的开启会被诚实地记录为“已声明,未开启”,而非被伪造。