モジュール 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 は依然として拒否される。
契約とエンティティ
Section titled “契約とエンティティ”本モジュールは共有データモデルに 3 つのエンティティを宣言する。
| エンティティ | 変更可能性 | 目的 |
|---|---|---|
| session | 変更可能(upsert) | セッションメタデータ。内容ゼロ |
| policy | 変更可能 | ガバナンス宣言 — 誰がどのモデル/プロバイダーで open してよいか(デフォルト DENY) |
| decision | 追記専用 | open/close 決定の不変台帳 |
ポリシーはエージェント、許可モデル、許可プロバイダー(それぞれ特定値または
ワイルドカード)でマッチし、オプションのセッション分数と latency-SLA の境界を持つ。
マッチするポリシーがなければ DENY。 decision 台帳は各 open_request、open、
close を、そのポリシー判定、ゲートステータス、結果ステータスとともに記録する。read
アクセスは viewer ロール以上である。ポリシーの宣言とセッションの open は管理操作で
あり、テナントスコープかつ監査対象である。これらのモジュールルートは、
安定コア契約ではなく、別の beta
module-route リファレンス で公開されている — それらのフィールドレベルの
形状は製品の型付きインターフェイス内に存在する。金額はここにはなく、コストは
FinOps(モジュール XI)が担う。
消費するものと生成するもの
Section titled “消費するものと生成するもの”本モジュールは deny-closed の取り込みシーム — 独自の voice.telemetry.observed
イベント — を所有し、これを通じてインプロセスのプローブがセッションメタデータを
供給しうる。ワイヤーは構造的に最小データである。テレメトリパーサーは許可リストを
持ち、禁止されたキーを見つけるとイベント全体を拒否するので、音声、トランスクリプト
テキスト、ASR/TTS テキスト、プロンプト/レスポンスの内容、話者の PII が永続化される
ことは決してない。保持される唯一のトランスクリプトシグナルは、外部トランスクリプトの
ロケーターの一方向ハッシュである — トランスクリプトが存在することの証明であって、
トランスクリプトそのものではない。ガバナンス finding は commit 後に、ハッシュ化された
詳細を伴って finding.reported として発行される。
Actuate ステータス
Section titled “Actuate ステータス”ガバナンス下の open はライブでディスパッチする。オペレーターが voice ディスパッチャーをプロビジョニングすると、承認された open はサーバーサイドの 一時クレデンシャルを発行し、そのクレデンシャルと接続座標のみを返す — モデル、voice、 ツール、ターン検出はクライアントからではなくポリシーから固定され、プロバイダーの マスターキーがサーバーを離れることは決してない。そのプロビジョニングがない場合、 ディスパッチシームは deny-closed である。承認された open は偽装されるのではなく、 正直に「declared, not opened(宣言済み、未 open)」として記録される。
- モジュールカタログ — モジュール XVI の位置づけとその actuate ステータス。
- イベントバスリファレンス —
finding.reportedが voice の finding を運ぶ。 - モジュール IV — オーケストレーション — 姉妹となるディスパッチシーム(ライブ実行)。
- モジュール X — モデル&プロバイダールーティング — ポリシーがどのモデルを許可してよいか。
- Govern and approve — 実践における二相の open ゲート。
- 正直さと限界 — observe/govern/actuate の区分。