Grok Botの仕組み講座(講師のためのエンジニア水準)

区分5 組織で動かす層★★

No.12 推論フック(モデルに入る前の検問)

ボットの発言ではなく「モデルに入る前の入力」を、会社の検問所で調べる仕組みの単元です。会社(か契約したセキュリティ会社)が検問用のサーバーを用意して使う機能なので、個人で使う利用者には関係ありません。Enterprise の beta で使う人は多くありませんが、「うちのデータ流出対策と合うか」と聞かれた時の根拠になります。表と図を押さえて、ふつうの深さで読みます。
目次
  1. 第0章 前提知識
  2. 第1章 要求の流れと署名
  3. 第2章 3つのモードと止まり方
  4. 第3章 フレームの中身と、何が対象外か
  5. 確認問題

第0章 前提知識

① 推論フックとは、モデルを呼ぶ前の検問 必ず覚える

Grok Bot は、会話のたびにモデルへ「ここまでの会話」を送って、次の一手を考えさせます。 この1回ぶんの会話全体を詰めた荷物を、この講座では「フレーム」と呼びます。

推論フックは、モデルへ送る直前に、同じフレームを検問用サーバーへ送って通してよいかを聞く仕組みです。 検問用サーバーは、会社が用意する AI セキュリティのサーバーです。サーバーが allow と答えればモデルへ進み、deny と答えれば止まります。 Enterprise プランの管理者だけが使える beta 機能です。

調べる対象は「モデルに入る入力」で、行動ではありません。 行動を止めるのは No.08 の Auto Review と、No.11 の網の制御です。推論フックの検問は、その2つの代わりにはなりません。

② 2つの言葉

この単元は、検問用サーバーが検問所で、荷物を運ぶのが Cursor と考えると読みやすくなります。

第1章 要求の流れと署名

① 1回の検問の流れ 必ず覚える

Cursorのサーバー
   │ ①モデルを呼ぶ直前に、フレーム(会話全体)を署名つきで POST
   ▼
検問用サーバー(検問所)
   │ ②署名を確かめて、中身を調べる
   │ ③ allow か deny を JSON で返す(HTTP 200)
   ▼
Cursorのサーバー
   ├─ allow → モデルへ送る
   └─ deny  → 止める。そのターンは終わり、送った本人にブロックの通知

1ターンの中でモデルを何回も呼ぶ時は、呼ぶたびに1つのフレームが送られます。 たとえば、道具を呼んだ結果を受けて、次にモデルを呼ぶ時にもです。

② 署名の確かめ方 さらっと

すべての要求に、Standard Webhooks という共通の決まりの3つのヘッダーが付きます。

ヘッダー 中身
webhook-id フレームの request_id
webhook-timestamp Unix 時間(秒)
webhook-signature v1, に続く署名の値。{webhook-id}.{webhook-timestamp}.{生の本文} を HMAC-SHA256 で署名し、base64 にした物

署名の鍵は、最初に保存した時に1度だけ表示される whsec_ で始まる秘密です。 検問用サーバーはこれで署名を検算して、Cursor が送った物以外を捨てます。 User-Agent や送信元 IP には頼らない、と公式は書いています(原文は rely しない)。IP 範囲の許可リストは、署名の確認に加える補助として併用できます。

鍵の入れ替えは Rotate Secret で行います。新しい鍵になるまで約1分あるので、その間は古い鍵も受け付けます。

③ タイムアウトと再試行 さらっと

判定を待つ時間(Verdict Timeout)は 1〜10,000 ms で、初期値は 5,000 ms です。 接続・TLS・要求・応答の全部がこの時間に含まれます。

接続に失敗した時だけ、同じ時間の中で1回やり直します。同じ webhook-id と署名で送るので、サーバー側は webhook-id で重複を見分けられます。サーバーが一度でも返事をしたら、再試行はしません。

第2章 3つのモードと止まり方

① モード 必ず覚える

モード deny の時 検問が失敗した時
Shadow Mode(初期値) 通す 通す
Allow the Request 止める 検問せずに通す(fail open)
Block the Request 止める 止める(fail closed)

Shadow は、同じフレームを同じタイミングで送ります。ただし裏で非同期に送るので、誰も待たず、メンバーには何も見えません。deny と失敗は監査ログに残るだけです。ただし負荷が高い時は Cursor が Shadow の検問を飛ばすことがあり、飛ばした分は監査ログに行が残りません。 fail open は「壊れたら門を開ける」、fail closed は「壊れたら門を閉める」と言うと伝わります。

検問の失敗は deny と数えません。 失敗はモードに従って通るか止まるかが決まります。 失敗は、タイムアウト・200 以外の状態・JSON でない返事・allow か deny 以外の action・接続できない場合などです。

② 立ち上げる時の3つの安全弁 さらっと

第3章 フレームの中身と、何が対象外か

① 送られるフレーム 必ず覚える

フレームは、モデルに送る「ここまでの会話」そのものです。

だから、text だけを調べる方針では漏れます。 公式は、全部のブロックの種類を調べるよう勧めています。

② 対象外 必ず覚える

次の物は、推論フックでは見られません。

③ 利用者に見える物と、監査ログ さらっと

deny されると、送った本人に Blocked by your organization's policy と出て、Edit と Reset のボタンが付きます。 Edit はブロックされたメッセージを取り戻して打ち直せます。Reset は会話を空にします。

注意があります。ブロックされたメッセージは、取り戻すか Reset するまで会話に残り、以降の要求のたびに再び送られます。 会話の全文を調べる方針だと、その会話は止まり続けます。最新の発言だけを調べる方針なら、別の発言を送れば続けられます。

監査ログの event_type は6つです。許可された要求は何も書きません。

event_type 起きた時
inference_hooks_config_updated 設定の保存、circuit breaker の Reset・自動回復
inference_hooks_signing_secret_generated 署名の秘密の生成・入れ替え
inference_hooks_request_denied deny
inference_hooks_request_failed_open 検問なしで通った
inference_hooks_request_failed_closed Block モードで失敗して止まった
inference_hooks_circuit_breaker_tripped circuit breaker が作動した

○ よくある勘違い 「推論フックがあれば、ボットの行動も止まる」→ 止まりません。見るのは入力で、行動は Auto Review と網の制御です
○ よくある勘違い 「検問が失敗したら deny になる」→ なりません。モードで通る・止まるが決まります
○ 補足:Cursor は送ったフレームの中身を保存せず、判定が返ったら捨てます
○ 関係する単元:No.08(Auto Review)/No.10(秘密の値は入らない)/No.11(網の制御)/No.13(記録)

推論フックは、モデルに入る前の入力を、署名つきで会社のサーバーに見せて allow か deny をもらう検問。行動は見ない。失敗は deny ではなく、モードで通るか止まるかが決まる。

確認問題

問1 受講生が「推論フックを入れれば、ボットが勝手にメールを送るのも止められますか」と聞いてきました。答えは?

問2 Block the Request モードで、検問用サーバーが応答せずにタイムアウトしました。何が起きますか?

問3 一度 deny された会話で、その後どんなメッセージを送っても止まり続けます。方針が会話の全文を調べている場合、何をすればよいですか?

出典:https://docs.x.ai/grok-bot/inference-hooks / https://docs.x.ai/grok-bot/security / https://docs.x.ai/grok-bot/teams-and-enterprises