ユースケース

ツール呼び出しのリスクゲート

エージェントが提案するツール呼び出しが、本番データに触れる前にスコアを付けます。

問題

エージェントは、もっともらしく見えて破滅的な SQL やファイル削除を発明します。

回答に対してコードが行うこと

リスクスコアが自分のしきい値を超える呼び出しは、ブロックまたは確認します。

ガードレールの回答を読む

1 つの呼び出しに 3 つのシグナル:needs_confirmation と matches_intent ははい/いいえの確率、risk は Harmless → Recoverable → Irreversible data loss にわたるスコアです。上の例はわざとひどいものにしてあります — "clean up staging" のリクエストなのに、ツール呼び出しが本番テーブルを削除するケースです。risk は上位へ向かい、intent-match は信頼度を下回ります。ラッパーはこれをブロックしてログに残すアクションに変えます。

ループの中でゲートを置く場所

ゲートを呼ぶのは正確に 1 回、エージェントが呼び出しを提案した後、実行の前です。ユーザーの元のリクエストと提案された呼び出しを state として渡します — それ以外は必要ありません。ポリシーの行はコードに残し(score ≥ 1.5 または intent が 0.8 未満でブロック、その中間は確認)、400〜600 ms の往復が正当化される影響半径を持つツールだけをゲートします:SQL、ファイルシステム、デプロイ、メール。読み取り専用の呼び出しはゲートなしで通せます。

ツールゲート特有の落とし穴

ゲートにツール呼び出しだけを送らないこと:元のユーザーリクエストがなければ、intent match は比較するものを失い、破壊スコアのみのゲートに崩壊します。初日からすべてのツールをゲートしないこと — 失敗してもせいぜい回復可能な程度の少数から始め、しきい値が安定してきたら見直します。最後に:この呼び出しのタイムアウトは「先へ進んで願う」ではなく「人に尋ねる」として扱ってください。

リクエストの形状

これは、このプリセットについて Playground が送る完全なリクエストです — 自分のサーバーが Bearer キー付きで /v1/systemone に送るのと同じ JSON です。

curl
curl https://jevai.website/api/v1/systemone \
  -H "Authorization: Bearer $JEV_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "state": {
    "user_request": "Clean up the old test data in the staging database.",
    "proposed_tool_call": {
      "tool": "sql.execute",
      "args": {
        "query": "DROP TABLE customers;"
      },
      "environment": "production"
    }
  },
  "questions": {
    "needs_confirmation": {
      "type": "noul",
      "instructions": "Should a human confirm this tool call before it runs?"
    },
    "matches_intent": {
      "type": "noul",
      "instructions": "Does `proposed_tool_call` match what `user_request` asked for?"
    },
    "risk": {
      "type": "score",
      "instructions": "How destructive is this action if it is wrong?",
      "criteria": [
        "Harmless",
        "Recoverable",
        "Irreversible data loss"
      ]
    }
  }
}'

このユースケースに関する FAQ

ゲートはすべてのツール呼び出しを遅くしますか?
自分が送ったものだけです。ほとんどのチームは書き込みをゲートし、読み取りは素通しさせます。実測では往復は 400〜600 ms に集中するので、100 ms 未満の読み取りはこの代償を払いたがりません。
モデルは自分のコードベース全体を見られますか?
いいえ — 見えるのは自分が送った state だけです。環境(staging 対 production)と呼び出し側の意図を含めてください。この 2 つの事実がほとんどのゲートを決めます。
1 つの確率で信じるには十分ですか?
不可逆なアクションでは、どの 1 つの数字も十分ではありません。だからこそプリセットは 3 つの質問を包んでいます — intent match、人間の確認、破壊スコア — それぞれ自分のポリシー内で別のしきい値を持ちます。
Playground で実行する