Grok Bot は、会話のたびにモデルへ「ここまでの会話」を送って、次の一手を考えさせます。 この1回ぶんの会話全体を詰めた荷物を、この講座では「フレーム」と呼びます。
推論フックは、モデルへ送る直前に、同じフレームを検問用サーバーへ送って通してよいかを聞く仕組みです。 検問用サーバーは、会社が用意する AI セキュリティのサーバーです。サーバーが allow と答えればモデルへ進み、deny と答えれば止まります。 Enterprise プランの管理者だけが使える beta 機能です。
調べる対象は「モデルに入る入力」で、行動ではありません。 行動を止めるのは No.08 の Auto Review と、No.11 の網の制御です。推論フックの検問は、その2つの代わりにはなりません。
この単元は、検問用サーバーが検問所で、荷物を運ぶのが Cursor と考えると読みやすくなります。
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 で重複を見分けられます。サーバーが一度でも返事をしたら、再試行はしません。
| モード | 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・接続できない場合などです。
フレームは、モデルに送る「ここまでの会話」そのものです。
だから、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