# OpenAI Agent SDKの便利で実践的な使い方
🌍 ツールの入出力にもガードレールを設定して、セキュリティを強化しましょう!
ツール引数のチェックや出力のマスキングで、機密情報の漏洩や不正な操作を防止できます。
📌 タイトル:Guardrails – Tool guardrails
🔗 URL:
🧩 概要
Tool guardrailsは、ツールの実行前(引数チェック)と実行後(出力チェック)にガードレールを設定する仕組みです。APIキーの混入防止、機密データのマスキング、特定の操作のブロックなど、ツールレベルでのセキュリティ制御を実現します。マネージャーパターンやHandoff、委任を使う複雑なワークフローでも、個別のツールに対してきめ細かいチェックを適用できます。
🛠 使い方
`agents`から`Agent`, `function_tool`をインポートします。`
@function_tool`デコレータでツール関数`search_api(query: str) -> str`を定義し、`Agent(name="SecureAgent", tools=[search_api], tool_guardrails=[check_tool_args])`のように`tool_guardrails`にチェック関数を設定します。
🏗 実践的な使い方
**APIキーの混入をブロック(reject_content)**
ツール引数に`sk-`で始まるAPIキーが含まれていないかチェックし、検出時にツール実行をブロックします。
`re`と`GuardrailFunctionOutput`をインポートし、`reject_api_keys(context, agent, tool_call)`関数で` str(tool_call.arguments))`によりAPIキーの混入を検出します。`tripwire_triggered=has_api_key`で検出時にブロックし、`Agent(name="SecureAgent", tools=[search_api, call_external_service], tool_guardrails=[reject_api_keys])`として設定します。
**ツール出力の機密データマスキング**
ツール実行後の出力に含まれる機密情報(メールアドレス、電話番号など)を自動的にマスキングします。
`mask_sensitive_output(context, agent, tool_call, tool_output)`関数でツール出力に対して`re.sub(r'[\w.+-]+@[\w-]+\.[\w.]+', '[MASKED_EMAIL]', str(tool_output))`でメールアドレスを、`re.sub(r'\d{3}-\d{4}-\d{4}', '[MASKED_PHONE]', masked)`で電話番号をマスキングします。`GuardrailFunctionOutput(output_info={"masked": True}, tripwire_triggered=False, modified_output=masked)`で加工済み出力を返し、`Agent(name="DataAgent", tools=[query_customer_db], tool_guardrails=[mask_sensitive_output])`として設定します。
**複雑なワークフローでの個別ツールチェック**
マネージャーパターンやHandoff、委任を組み合わせた複雑なワークフローでも、特定のツールに対してきめ細かいガードレールを適用できます。
`check_delete_permission(context, agent, tool_call)`関数で` == "delete_record"`の場合に`context.get("user_role", "viewer")`で権限を確認し、`user_role not in ["admin", "editor"]`なら`tripwire_triggered=True`でブロックします。それ以外のツールは`tripwire_triggered=False`でスキップします。`Agent(name="Manager", tools=[query_db, update_record, delete_record], tool_guardrails=[check_delete_permission, reject_api_keys])`のように複数のガードレールを組み合わせて設定できます。
💡 ユースケース
🔑 ツール引数へのAPIキー・シークレット混入防止
🎭 ツール出力からのPII(個人情報)自動マスキング
🚫 権限に基づく特定ツール操作のブロック
🔒 複雑なマルチエージェントワークフローでのセキュリティ制御
⚠️ 注意点
- ツールガードレールはツールの実行ごとに呼び出されるため、パフォーマンスへの影響を考慮してください
- 正規表現によるチェックは完全ではありません。重要なセキュリティ要件には複数の防御層を設けてください
- マスキング処理は元のデータ型を変更する可能性があるため、後続の処理に影響がないか確認してください
- 複数のツールガードレールを設定した場合、すべてが順に実行されます
✨ ツールガードレールで、エージェントのツール操作をきめ細かく制御し、セキュリティを強化しましょう!
#
OpenAIAgentSDK# #
AIAgent#