コンテンツにスキップ

モジュール XVI — voice とリアルタイムエージェント

モジュール XVI は会話型およびリアルタイムエージェントをガバナンスする。これは 観測・ガバナンスプレーンである。voice SDK(Realtime API、WebRTC、ASR、TTS)を 再実装することはなく、自らメディアストリームを開くことも決してない。本モジュールは 誰がどのモデルとプロバイダーで、どのポリシーの下で voice セッションを 開いてよいかを判断し、そのセッションのメタデータを追跡する — その内容は決して 追跡しない。

voice インターフェイスを開くことは、自由な操作ではなく特権アクションとして 扱われる。ポリシーはデフォルト DENY である。許可するポリシーのないセッションは 拒否される。open は二相であり、承認ゲートを通じて human-in-the-loop でゲートされる。これは plan_hash にバインドされるため、承認が より強力なモデルへ黙って格上げされることはなく(anti-TOCTOU)、実際の principal (決して system ではない)に対して監査され、追記専用で証跡が残される。本モジュール 自身はプロバイダーを決して呼び出さない — 作動は別個のディスパッチシームを通じて 出ていく。

もう半分は観測である。本モジュールはセッションのメタデータのみを追跡する — 派生状態(live/idle/ended、活動の新しさから read 時に算出され、ライフサイクルの カラムは保存しない)、ターン数、継続時間、レイテンシ(実サンプルからの正直な平均と 最大)、BCP-47 言語。ここからガバナンス finding を発火させる。テレメトリが いかなるポリシーも許可しないエージェント/モデル/プロバイダーを名指しした場合の ポリシー違反、レイテンシがポリシーの SLA を越えた場合の degraded-latency finding、 ゲートが配線されていない状態で open が試みられた場合の ungoverned-open finding — このギャップは表面化され、open は依然として拒否される。

本モジュールは共有データモデルに 3 つのエンティティを宣言する。

エンティティ変更可能性目的
session変更可能(upsert)セッションメタデータ。内容ゼロ
policy変更可能ガバナンス宣言 — 誰がどのモデル/プロバイダーで open してよいか(デフォルト DENY)
decision追記専用open/close 決定の不変台帳

ポリシーはエージェント、許可モデル、許可プロバイダー(それぞれ特定値または ワイルドカード)でマッチし、オプションのセッション分数と latency-SLA の境界を持つ。 マッチするポリシーがなければ DENY。 decision 台帳は各 open_requestopenclose を、そのポリシー判定、ゲートステータス、結果ステータスとともに記録する。read アクセスは viewer ロール以上である。ポリシーの宣言とセッションの open は管理操作で あり、テナントスコープかつ監査対象である。これらのモジュールルートは、 安定コア契約ではなく、別の beta module-route リファレンス で公開されている — それらのフィールドレベルの 形状は製品の型付きインターフェイス内に存在する。金額はここにはなく、コストは FinOps(モジュール XI)が担う。

本モジュールは deny-closed の取り込みシーム — 独自の voice.telemetry.observed イベント — を所有し、これを通じてインプロセスのプローブがセッションメタデータを 供給しうる。ワイヤーは構造的に最小データである。テレメトリパーサーは許可リストを 持ち、禁止されたキーを見つけるとイベント全体を拒否するので、音声、トランスクリプト テキスト、ASR/TTS テキスト、プロンプト/レスポンスの内容、話者の PII が永続化される ことは決してない。保持される唯一のトランスクリプトシグナルは、外部トランスクリプトの ロケーターの一方向ハッシュである — トランスクリプトが存在することの証明であって、 トランスクリプトそのものではない。ガバナンス finding は commit 後に、ハッシュ化された 詳細を伴って finding.reported として発行される。

ガバナンス下の open はライブでディスパッチする。オペレーターが voice ディスパッチャーをプロビジョニングすると、承認された open はサーバーサイドの 一時クレデンシャルを発行し、そのクレデンシャルと接続座標のみを返す — モデル、voice、 ツール、ターン検出はクライアントからではなくポリシーから固定され、プロバイダーの マスターキーがサーバーを離れることは決してない。そのプロビジョニングがない場合、 ディスパッチシームは deny-closed である。承認された open は偽装されるのではなく、 正直に「declared, not opened(宣言済み、未 open)」として記録される。