Claude APIの設計と運用

Claudeのツール引数を検証する:型・対象・権限の三つの境界

ツールの引数が正しい型で生成されても、その操作が許可されているとは限りません。ユーザーが別人の注文IDを入力できるなら、形式上正しい要求であっても不正な更新につながります。権限はモデルの文章から導かず、信頼できる実行環境で検証します。

編集・運営:株式会社ノースネスト · AI支援の学習解説

公開: · 約3分(目安)

この記事の目的

正しい形の引数と、実行してよい操作を区別できる。

こんな方へ

Claudeから更新系APIを呼び出す仕組みを作る方。

利用者の識別情報を生成させない

誰の権限で操作するかは、ログイン情報やサーバー側のセッションから決めます。モデルにuser_idを自由に選ばせて、その値だけで認可する設計は避けます。対象IDを引数として受け取る場合も、その利用者の範囲に属するかを実行前に調べます。

スキーマによる型検証は有用ですが、認可の代替ではありません。日付の前後関係や注文状態による制約など、業務データを参照しなければ判断できない条件もあります。

危険な操作を一つの万能ツールへ集めない

任意のURLやSQLを受け取る万能な窓口より、必要な操作と対象を限定する方が検証しやすくなります。読み取りと更新、試算と確定を分けると、どの段階で確認が必要かも明確になります。

ツール名を細かく増やせば良いわけでもありません。同じ目的の操作が大量にあると選択を難しくするため、業務上の責任の境界に合わせて設計します。

実行直前に状態を照合する

モデルが読み取った時点から、注文の状態が変わることがあります。確認済みの取消候補でも、発送済みに変わっていれば実行条件は異なります。対象の版や状態を確認し、古い前提で書き込まないようにします。

認可と状態の確認を実行直前にも行う

読み取り時に更新可能だった対象が、操作の直前に別の状態へ変わることがあります。引数の検証を一度通しただけで、古い状態のまま書き込まないようにします。対象の所有範囲、状態、版を更新条件へ含めるなど、保存先の機能に合わせて競合を検出します。これはモデルの注意力に期待する問題ではなく、業務処理の境界として扱います。

拒否した理由を利用者へ返すときも、詳細な対象情報を公開してよいかを確認します。他人の対象が存在すること自体を明かしたくない用途では、内部の診断情報と外部の案内を分けます。安全な失敗とは単に更新しないことだけでなく、拒否の説明から不要な情報が漏れないことも含みます。正常な利用者の復旧経路も併せて設計します。

具体例で考える

架空の注文取消候補が正しいJSONで返りましたが、別の利用者の注文を指しています。

説明用の入力・判断例
入力検証:order_idの形式は正しい。
対象検証:注文は存在する。
認可検証:現在の利用者の注文ではない。
結論:取消を実行しない。

最初の二段階を通っても安全とは言えません。エラーの返し方でも、他人の注文の詳細を漏らさないようにします。認可失敗をモデルへ詳細説明することより、処理を確実に拒否することが優先されます。

確認課題と合格の目安

一つの更新操作に、型は正しいが拒否すべき入力と、状態変化で拒否すべきケースを作ってください。

  • 利用者を生成引数だけで識別しない。
  • 対象の所有範囲を検証できる。
  • 読取時点と実行時点の状態差を扱える。