登録して招待リンクを共有すると、動画再生報酬と紹介報酬を獲得できます。

検索結果 LLMセキュリティ
LLMセキュリティ コミュニティ
1つのキーワードが1つのコミュニティです。
コミュニティ作成
アカウント
見つかりません
LLMセキュリティ を含む検索結果
🛡 TL;DR: 「LLM版のペネトレーションテスト」を謳うオープンソースのレッドチーミングフレームワークです。 タイトル: confident-ai/deepteam URL: 📌 ポイント 🎯 50種類以上の脆弱性をデータ漏洩・バイアス・認可バイパス・エージェント固有リスクなど6カテゴリで網羅 ⚔️ プロンプトインジェクションやマルチターンのジェイルブレイクなど20種類以上の攻撃手法を用意 📋 OWASP Top 10 for LLMs/Agents、NIST AI RMF、MITRE ATLASなど業界標準フレームワークに準拠 🔒 評価はすべてローカル実行でデータを外部送信しない設計 🚦 本番運用向けにToxicityGuardなど7種類のリアルタイムガードレールも搭載 ⭐ GitHubで2.8kスター、1,187件超のコミットで活発に開発中 `pip install`してコールバック関数を渡すだけで始められる手軽さも、実運用で導入しやすいポイントだと思います。 #LLMセキュリティ# #レッドチーミング#
もっと見る
LLMエージェントに「脆弱性を探して」と頼むだけでは誤検知が多くなりがちです。Cloudflareはそこに対立的検証という発想を持ち込みました。 タイトル: cloudflare/security-audit-skill URL: 🔍 概要 コーディングエージェントを自動セキュリティ監査ツールとして機能させ、独立した検証と機械可読な脆弱性報告を実現するスキルです。npxコマンド1つでClaude Codeなどに導入できます。 🧭 解決する課題 単純にAIへ脆弱性探索を任せると根拠の薄い誤検知や見落としが発生しがちです。それに対し、探索と検証を別エージェントに分離することで信頼性を高めています。 ⚙️ 方法論・提案手法 偵察→カバレッジ主導の探索→候補検証→構造化出力→独立記録検証→中立的な報告、という6フェーズのパイプラインを構成。新規の独立エージェントが候補と最終クレームをそれぞれ再検証する「対立的検証」が特徴です。 🛠️ ユースケース ・security audit this codebaseのような自然言語指示で起動 ・LLM・プロンプトインジェクションからクラウド・サプライチェーンまで12種類の攻撃クラスに対応 ・validate-findings.cjs等の検証ツールも同梱 📊 実験結果 テストでは単一実行で約50%の脆弱性を検出し、複数回の実行を重ねることでカバレッジが積み上がる設計です。GitHubでは16.3kスター・894フォークを獲得しています。 #セキュリティ# #AIエージェント#
もっと見る
LLMが使われた結果、Chromeの脆弱性の発見から修正までの速度が爆上がりしている。 ・2026年初頭にはGeminiを使ったエージェントを投入 ・その結果、コードベースに13年間潜んでいた脆弱性を発見した ・なお、モデルの暴走を防ぐため、ネットワークを遮断した環境でスキャンしている ・バグのトリアージも自動化され、ノイズ除去やバグの再現を行っている ・これにより、毎月数百時間もの開発者の時間を節約できているらしい ・バグの修正も複数のAIエージェントが連携して提案や評価を行っている ・直近の2回のリリースでは、合計1,072個ものセキュリティバグを修正 ・これは過去23回のリリースにおける合計修正数を上回る圧倒的なペース ・さらに、コードがマージされる前のCI上でもAIが脆弱性を検知 ・5月だけで20以上の脆弱性が本番環境に出るのを未然に防げている ・ただ、バグを修正してもユーザーにパッチが適用されなければ意味がない ・そこでブラウザ全体を再起動せずに動的にパッチを当てる仕組みを開発している
もっと見る
# ADKの便利で実践的な使い方 ## 🔌 全エージェントに一括適用!ADKのPlugins機能 個別のエージェントにコールバックを設定するのは面倒…ADKの **Plugins** なら、Runnerレベルで全エージェント・全ツール・全LLM呼び出しに横断的な制御を一括適用できます!🎯 ## 📌 タイトル Plugins(プラグイン) ## 🔗 URL ## 🧩 概要 Pluginsは、Runnerレベルで動作するクロスエージェントモジュールです。エージェント個別のCallbacksとは異なり、**一度登録するだけで全エージェント・全ツール・全LLM呼び出しに適用**されます。セキュリティガードレール、ロギング、レート制限などの横断的関心事に最適です。 プラグインはエージェントレベルのコールバックよりも**先に実行される**ため、グローバルポリシーの適用に適しています。 ADKには組み込みプラグインも用意されています:Reflect and Retry Tools、BigQuery Analytics、Context Filter、Global Instruction、Logging Pluginなど。 ## 🛠 使い方 `BasePlugin` を `google.adk.plugins.base_plugin` からインポートし、`InMemoryRunner` を `google.adk.runners` からインポートします。`SecurityGuardPlugin` クラスを `BasePlugin` のサブクラスとして定義し、`__init__` で `super().__init__(name="security_guard")` を呼びます。`before_model_callback` メソッドでは `llm_request.contents[-1].parts[0].text` からユーザー入力を取得し、`detect_injection()` でインジェクションを検出した場合に拒否メッセージ入りの `LlmResponse` を返します。`before_tool_callback` メソッドでは `is_authorized( で権限チェックを行い、未認可ならエラー辞書を返します。いずれも問題なければ `None` を返して通常続行します。最後に `InMemoryRunner` を作成し、`plugins=[SecurityGuardPlugin()]` を渡すだけで全エージェントにこのセキュリティガードが適用されます。 ## 🏗 実践的な使い方 **「Gemini as a Judge」パターンでのインジェクション検出:** `InjectionDetectorPlugin` は `BasePlugin` を継承し、`name="injection_detector"` で初期化します。`self.judge_model = "gemini-flash-lite"` をジャッジモデルとして保持し、`before_model_callback` で `llm_request.contents[-1].parts[0].text` からユーザー入力を取得して `judge_with_flash_lite()` に渡します。判定結果が `"INJECTION"` であれば `audit_log()` で記録し、拒否メッセージ入りの `LlmResponse` を返してブロックします。問題なければ `None` を返します。 `RateLimitPlugin` は `BasePlugin` を継承し、`max_calls_per_minute` パラメータ(デフォルト60)で初期化します。` リストで呼び出し履歴を管理し、`before_model_callback` で直近60秒間の呼び出し回数をカウントします。上限に達していればレート制限メッセージ入りの `LlmResponse` を返し、そうでなければ現在時刻を `call_log` に追加して `None` を返します。 最後に `InMemoryRunner` の `plugins` パラメータに `InjectionDetectorPlugin()` と `RateLimitPlugin(max_calls_per_minute=30)` を渡して、複数プラグインを組み合わせて登録します。 ## 💡 ユースケース - 🛡️ **セキュリティガードレール**:全エージェントに対するインジェクション検出・PII保護を一元管理 - 📊 **統合ロギング**:BigQuery Analyticsプラグインで全エージェントの実行ログを集約 - ⏱️ **レート制限**:API呼び出し回数を制御してコスト爆発を防止 - 🔄 **自動リトライ**:Reflect and Retry Toolsプラグインでツール失敗時のインテリジェントなリトライ - 📝 **グローバルインストラクション**:全エージェントに共通のポリシーや指示を注入 ## ⚠️ 注意点 - プラグインはエージェントレベルのコールバックより**先に**実行されます(優先順位に注意) - プラグインで値を返すと、対応するエージェントレベルのコールバックも含めてスキップされます - 全エージェントに適用されるため、特定エージェントだけに適用したいロジックはCallbacksを使ってください - `on_model_error_callback` / `on_tool_error_callback` フックでエラーハンドリングも可能です - Python v1.7.0+、TypeScript v0.2.5+、Go v0.4.0+、Java v0.3.0+ で利用可能です ## ✨ まとめ Pluginsは「一度書けば全エージェントに適用」を実現する強力な仕組みです。セキュリティ、ロギング、レート制限などの横断的関心事はPluginsに任せ、エージェント固有のロジックはCallbacksに集中させましょう。この分離により、保守性とセキュリティの両方が向上します! #ADK# #AIAgent#
もっと見る
# ADKの便利で実践的な使い方 ## 🎛️ エージェントの振る舞いを自在に制御!ADKのCallbacks機能 LLM呼び出しの前にガードレールをかけたい、ツール実行前にバリデーションしたい…そんな要望、ADKの **Callbacks** なら全部叶います!🔧 ## 📌 タイトル Callbacks(コールバック) ## 🔗 URL ## 🧩 概要 Callbacksは、エージェントの実行フローの重要なポイントにフックを仕掛け、振る舞いを観察・カスタマイズ・制御するための仕組みです。フレームワークのコアを変更することなく、6種類のコールバックで柔軟な制御が可能です。 - **before_agent / after_agent**:エージェント実行の前後 - **before_model / after_model**:LLM呼び出しの前後 - **before_tool / after_tool**:ツール実行の前後 最大のポイントは **戻り値によるフロー制御**。`None` を返せば通常続行、特定のオブジェクトを返せばその先の処理をスキップできます。 ## 🛠 使い方 **LLM呼び出しをスキップする(入力ガードレール/キャッシュ):** `before_model_callback` を定義し、引数として `CallbackContext` と `LlmRequest` を受け取り、戻り値を `Optional[LlmResponse]` とします。`llm_request.contents[-1].parts[0].text` からユーザーの最後のメッセージを取得し、禁止ワードが含まれていれば `LlmResponse` に `Content(role="model")` と拒否メッセージを詰めて返すことでLLM呼び出しをスキップします。問題なければ `None` を返して通常のLLM呼び出しを続行します。 **ツール実行をスキップする(バリデーション/モック):** `before_tool_callback` を定義し、`context`、`tool`、`args` を受け取ります。戻り値は `Optional[Dict]` です。`validate_args(args)` で引数を検証し、不正であれば `{"error": "引数が不正です"}` という辞書を返してツール実行をスキップします。正常であれば `None` を返して通常実行を続行します。 **エージェント実行をスキップする:** `before_agent_callback` を定義し、`context` を受け取り、戻り値を `Optional[Content]` とします。`is_authorized(context)` で権限チェックを行い、権限がなければ `Content(role="model", parts=[Part(text="権限がありません")])` を返してエージェント実行をスキップします。認可済みであれば `None` を返して通常続行します。 ## 🏗 実践的な使い方 **入力ガードレール + レスポンスキャッシュの組み合わせ:** `smart_before_model` 関数を定義し、`ctx` と `req` を受け取り `Optional[LlmResponse]` を返します。まず Step 1 として `req.contents[-1].parts[0].text` からユーザー入力を取得し、`contains_pii()` で個人情報を検出した場合は拒否メッセージ入りの `LlmResponse` を返してLLM呼び出しをスキップします。次に Step 2 として `hash(user_input)` でキャッシュキーを生成し、`ctx.state.get(f"cache:{cache_key}")` でキャッシュを検索します。キャッシュがあればそのテキストを `LlmResponse` に詰めて返し、なければ `None` を返してLLM呼び出しに進みます。最後に `LlmAgent` を作成する際、`name="SecureAgent"`、`model="gemini-2.0-flash"` を指定し、`before_model_callback=smart_before_model` でこのコールバックを登録します。 ## 💡 ユースケース - 🛡️ **入力ガードレール**:不適切な入力やプロンプトインジェクションをLLM呼び出し前にブロック - 💾 **レスポンスキャッシュ**:同じ質問にはキャッシュから即座に応答しコスト削減 - 🔍 **デバッグ・ログ**:各実行ポイントでリクエスト/レスポンスを記録 - ✅ **ツールバリデーション**:ツール引数の事前検証でエラーを未然に防止 - 🧪 **テスト用モック**:本番ツールの代わりにモックレスポンスを返す ## ⚠️ 注意点 - コールバックは同期的に実行されるため、重い処理(外部API呼び出し等)は避けてください - `before_*` で値を返すと後続処理が完全にスキップされるため、意図しないスキップに注意 - セキュリティガードレールをエージェント横断で適用したい場合は、Callbacksよりも **Plugins** の利用を検討してください - エラーハンドリングは必ず try-except で囲み、コールバックのエラーがエージェント全体をクラッシュさせないようにしましょう ## ✨ まとめ ADKのCallbacksは、エージェントの実行フローに対する「外科手術的な制御」を可能にします。ガードレール、キャッシュ、ログ、バリデーション…あらゆるクロスカッティングな関心事を、コアロジックを汚さずに実装できます。まずは `before_model_callback` から始めてみましょう! #ADK# #AIAgent#
もっと見る
# AIエージェント開発の意思決定ポイント # シングルエージェント vs マルチエージェント 🤖 🎯 ポイント マルチエージェント、かっこよく見えますよね?でも「かっこよさ」で選ぶと痛い目に遭います。 1つのLLMにすべてを任せるか、複数の専門エージェントに分割するか。この判断は「専門性の分離の利益」が「調整コスト」を上回るかどうかで決まります。「少しだけマルチ」という中間は存在しません。調整インフラを入れるか入れないかの境界は非連続です。 📋 概要 シングルエージェントは1つのLLMインスタンスがすべてのツール・文脈・権限を持ち、タスク全体を処理します。制御フローは1つのループ内で完結し、エージェント間通信は存在しません。マルチエージェントは複数の専門Worker を調整役のSupervisorが束ねる構成です。各Workerは専門領域のツールと文脈だけを持ち、Supervisorがタスク分解・予算配分・結果集約を担います。 🔍 意思決定のポイント 判定軸は2つです。 1️⃣ **タスクの変動性(task_variability)** と専門性の分離度 - ツールセットが20個以下で1つのコンテキスト窓に収まる → シングル - 専門性の軸が2つ以上に明確に分かれ、1つのコンテキストに入れるとノイズになる → マルチ - 並列実行による時短がレイテンシ予算の達成に貢献する → マルチ 2️⃣ **コスト感度(cost_sensitivity)** - LLM呼び出し回数の増加が許容できない → シングル - 調整コスト(Supervisorのトークン消費、エラー伝播設計)が分割の利益を下回る → マルチ 💡 要点と詳細 🟢 **シングルの強み**は単純さとコスト効率です。デバッグは1つのコンテキスト窓で閉じ、テストも1つのエージェントの入出力で完結します。状態共有の問題がなく、合意形成も不要。コンテキスト窓に収まる限り、すべての情報が1つの推論に利用可能で情報伝達のロスがありません。マルチ構成ではSupervisorのタスク分解+各Workerの独立LLM呼び出し+結果集約で、トークン消費が3〜5倍に膨らむことも珍しくありません。 🟡 **マルチの強み**は専門性の分離・権限の最小化・並列実行の3つです。各Workerのコンテキスト窓には専門領域の情報だけが入るため推論精度が向上します。権限もWorker単位で最小権限を付与でき、あるWorkerが侵害されても被害は限定されます。独立したサブタスクを並列処理すればレイテンシを節約できます。 ⚖️ トレードオフ | 観点 | シングル | マルチ | |---|---|---| | デバッグ容易性 | 1コンテキストで完結 🟢 | 分散トレーシング必須 🔴 | | コスト | LLM呼び出し1ループ | 3〜5倍のトークン消費 | | 推論精度 | ツール20超で低下 | 専門化で向上 | | セキュリティ | 全権限が1箇所に集中 | Worker単位で権限分離 | | 並列処理 | 不可 | 独立サブタスクで可 | 🛠️ ユースケース 🔵 **シングルが向くケース**: ツール数が限られた情報検索・要約・分類タスク。コスト重視のプロジェクト。専門性の軸が1つで済むケース。 🔴 **マルチが向くケース**: コード生成+テスト実行+レビューのように専門性の軸が明確に分かれるケース。法務と技術など異なるドメイン知識が必要なケース。セキュリティ上、権限分離が必須のケース。 📌 **デフォルト戦略**: まずシングルエージェントで始めてください。マルチの調整コストは過小評価されがちです。コンテキスト溢れ・権限の粗さ・レイテンシのボトルネックが明確になった時点で、そのボトルネックを解消する最小限のWorkerを追加するのが安全な進め方です。Worker数は2〜5が目安で、それ以上は調整コストの増大を慎重に評価しましょう。 #AIエージェント# #ソフトウェアアーキテクチャ#
もっと見る
【AIエンジニアリング実践|カリキュラム刷新&受講生募集開始】 AIコーディングを前提とした開発を出発点に、要件定義からデータ・ログ設計、プロトタイプ構築、デプロイ、評価、改善、エージェント化までを扱う「AIエンジニアリング実践」。全7回だったカリキュラムを一から再設計し、全13回へと刷新しました。 全回演習・ハンズオン形式で、1つのAIアプリケーションをRAGによるプロトタイプ構築からクラウドへのデプロイ、LLM-as-a-Judgeによる評価設計、MLOpsによる継続的改善まで一気通貫で実装します。 ▼今期の新規拡充テーマ ・評価の深掘り(評価指標・LLM-as-a-Judge・回帰テスト) ・レイテンシとコストの最適化 ・セキュリティとプライバシー(ガバナンス・リスク・コンプライアンス) ・AIエージェントとワークフロー設計 ▼講座情報 ・全13回|毎週月曜 19:00〜20:45(第11回のみ火曜) ・完全オンライン(Zoom)・受講料無料 ・対象:学生(大学院生〜中学生)※学位取得可能な学校法人に在籍中、または入学予定であることの証明が必要 ・開講:10/19(月) ▼スケジュール ・ID登録締切:10/3(土) 10:00 ・申込締切:10/5(月) 10:00 ・選考結果:10/13(火)19:00までに全応募者へご連絡 ▼お申し込み
もっと見る
🚀 FastAPIを「最初のエンドポイント」から「本番でスケールするAIシステム」まで一気通貫で学べる電子書籍です。LLM/RAG serving まで踏み込み、各章末に面接問題が付くのが実用的です。 タイトル: FastAPI for AI Engineers: From First Endpoint to Production-Scale AI Systems URL: 🚀 概要 PythonでMLモデルやLLM/RAGを本番運用するAIエンジニア向けの実践書(初版・2026年、AI Engineering Insider)。全10章・計100問の面接問題に加え、実在の障害事例やコストモデルのコラムが織り込まれています。 ❓ 解決する課題 ・モデルは作れても、本番でスケールするAPIとして安全に配信するのは別スキル ・LLM/RAGの serving はストリーミング・ガードレール・コスト管理など固有の難しさがある 本書はFastAPIを「AI/MLの事実上の serving レイヤー」として体系化します。 💡 構成と扱う技術 ・基礎:ASGI/WSGI、Uvicorn、OpenAPI、Pydantic v2によるスキーマ分離と検証 ・実装:冪等性、適切なステータスコード、ページネーション、Router→Service→Repositoryのクリーンアーキテクチャ ・DB/セキュリティ:SQLAlchemy/SQLModel/Alembic、N+1、プールサイジング、JWT、BOLA対策、OWASP API Top 10 ・非同期:「イベントループを絶対にブロックしない」、def vs async defの使い分け、httpxのリトライ/サーキットブレーカー 🎯 核心(第9章 AI/RAG/LLM) ・lifespanで重みを一度だけロード、CPU推論はスレッドにオフロード ・LLMゲートウェイで認証・プロンプト・ガードレール・コスト計測を集約、SSEでトークンを逐次配信 ・埋め込み+ベクトルDB(pgvectorから開始)でRAGを構築し、出力はPydanticで検証→失敗なら差し戻して再試行 ・max_tokensを「支出上限」として型で強制 📊 注目ポイント ・実在の障害(Netflix、Stripe、GitLab、Optus、Air Canada)から学ぶ実践志向 ・第10章はGunicorn+Uvicorn、K8sのliveness/readiness、可観測性の3本柱(p99 vs p50)、SLOベースのアラートまでカバー #FastAPI# #AIエンジニアリング#
もっと見る
# ADKの便利で実践的な使い方 ## 🎨 実戦で使えるコールバックパターン集!ADKのCallback Design Patterns コールバックの基本は分かった、でも実際どう使うの?ADKの **Callback Design Patterns** で、ログ・キャッシュ・セキュリティなど実戦パターンをマスターしましょう!💪 ## 📌 タイトル Callback Patterns(コールバックデザインパターン) ## 🔗 URL ## 🧩 概要 ADKのコールバックには、実戦で繰り返し使われる定番パターンがあります。ロギング、キャッシュ、ステート管理、セキュリティガードレール、リクエスト/レスポンス変換、条件付きスキップ、アーティファクト処理などです。 さらに、これらのパターンを効果的に使うためのベストプラクティス(単一責任、パフォーマンス、冪等性、エラーハンドリング)も定義されています。 重要な判断基準として、**エージェント横断のセキュリティガードレールにはCallbacksよりもPluginsが推奨**されています。 ## 🛠 使い方 **パターン1: ロギング&モニタリング** `logging_before_tool(ctx, tool, args)` では `ctx.invocation_id`、` を ` で記録し、`None` を返してフローを変更しません。`logging_after_model(ctx, response)` では ` の長さを ` で記録し、同様に `None` を返して観察のみ行います。 **パターン2: キャッシュ戦略** `cache_before_tool(ctx, tool, args)` では、` と `hash(str(args))` からキャッシュキーを生成し、`ctx.state.get(cache_key)` でキャッシュを検索します。キャッシュヒットすればその値を返してツール実行をスキップし、ミスなら `None` を返して通常実行します。`cache_after_tool(ctx, tool, args, tool_ctx, result)` では、同じキャッシュキーで `ctx.state[cache_key] = result` として結果を保存し、`None` を返してフローを変更しません。 **パターン3: ステート管理** `state_aware_callback(ctx, req)` では、`ctx.state.get("user:tier", "free")` でユーザーティアを取得し、`"premium"` であれば `req.config.system_instruction` にプレミアム向けの追加指示を動的に付加します。`None` を返してフローはそのまま続行します。 ## 🏗 実践的な使い方 **本番環境での多層防御パターン:** セキュリティガードレール(本番ではPluginsを推奨)として `security_before_model(ctx, req)` を定義します。`req.contents[-1].parts[0].text` からユーザー入力を取得し、`detect_pii()` でPIIを検出した場合は `audit_log()` で監査記録を残し、拒否メッセージ入りの `LlmResponse` を返してLLM呼び出しをスキップします。続いて `detect_injection()` でプロンプトインジェクションを検出した場合も同様にブロックします。いずれにも該当しなければ `None` を返して続行します。ツール引数のサニタイズとして `sanitize_before_tool(ctx, tool, args)` を定義し、` が `"database_query"` の場合に `args.get("query", "")` に `"DROP"` が含まれていればエラー辞書を返してツール実行をブロックします。アーティファクト保存として `save_artifact_after_agent(ctx)` を定義し、`generate_report(ctx)` でレポートを生成して `"execution_report.json", report)` で保存し、`None` を返します。 ## 💡 ユースケース - 📊 **構造化ロギング**:全実行ポイントで invocation_id 付きの構造化ログを出力 - 💾 **APIコスト削減**:before/after パターンでツール結果をキャッシュし、同じ引数の再呼び出しを防止 - 🔐 **多層セキュリティ**:PII検出、インジェクション防止、SQLサニタイズを各レイヤーに配置 - 📦 **アーティファクト管理**:実行結果やレポートをアーティファクトとして自動保存 - 🎚️ **動的振る舞い制御**:ユーザーティアやステートに応じてインストラクションを動的変更 ## ⚠️ 注意点 - **単一責任の原則**:1つのコールバックに1つの目的を持たせてください(ロギングとバリデーションを混ぜない) - **パフォーマンス**:コールバックは同期実行されるため、ブロッキングI/Oや重い処理は避けましょう - **冪等性**:外部副作用を持つコールバックは、リトライ時に安全であるように設計してください - **エラーハンドリング**:必ず try-except で囲み、コールバックエラーがプロセス全体をクラッシュさせないようにしましょう - **Plugins推奨**:エージェント横断のセキュリティポリシーには、Callbacksよりも **Plugins** を検討してください ## ✨ まとめ コールバックパターンを知ることで、ADKエージェントの実践力が格段に上がります。ログ・キャッシュ・セキュリティ・ステート管理…定番パターンを組み合わせて、堅牢でコスト効率の良いエージェントを構築しましょう。ただし、横断的なセキュリティにはPluginsの利用もお忘れなく! #ADK# #AIAgent#
もっと見る
# ADK 2.0の便利だけど知られていない機能 🌍 エージェントの動作をピンポイントで制御したい場合、コールバックの種類と使い分けを理解していますか? ADK 2.0は、エージェントのライフサイクル、LLM呼び出し、ツール実行の3層にわたるコールバックを提供しています。各コールバックのBefore/Afterパターンを活用することで、バリデーション、ガードレール、ログ記録などを柔軟に組み込めます。 📌 タイトル:コールバックの種類とパターン 🔗 URL: 🧩 概要 ADK 2.0のコールバックは3つのカテゴリに分かれています。エージェントライフサイクルコールバック(`BeforeAgentCallback` / `AfterAgentCallback`)は、エージェントの実行前後に処理を挿入します。LLMコールバック(`BeforeModelCallback` / `AfterModelCallback`)は、モデル呼び出しの前後で入力の修正やガードレールの適用を行います。ツールコールバック(`BeforeToolCallback` / `AfterToolCallback`)は、ツール実行の前後でバリデーションや結果の加工を行います。 🛠 使い方 各コールバックはエージェントの定義時に指定します。Pythonでは正確なパラメータ名(`callback_context`、`llm_request`、`tool_context`)を使用する必要があります。 ```python from adk import Agent async def before_agent(callback_context) -> None: """エージェント実行前のバリデーション""" print(f"Agent starting: {callback_context.agent_name}") # Noneを返すと通常実行、値を返すとスキップ async def before_model(callback_context, llm_request): """モデル呼び出し前のガードレール""" # リクエストの検証や修正が可能 if contains_sensitive_info(llm_request): return block_response() # 値を返すとモデル呼び出しをスキップ return None # 通常のモデル呼び出しを続行 async def after_tool(callback_context, tool_context, tool_response): """ツール実行後のログ記録""" log_tool_usage(tool_context.tool_name, tool_response) return None agent = Agent( name="my_agent", model="gemini-3.5-flash", before_agent_callback=before_agent, before_model_callback=before_model, after_tool_callback=after_tool, ) ``` Beforeコールバックで値を返すとその後の処理がスキップされ、Noneを返すと通常の処理が続行されます。 🏗 本番システムへの組み込み方 ・`BeforeAgentCallback` で入力のバリデーションや認証チェックを実装し、不正なリクエストを早期に拒否する ・`BeforeModelCallback` でガードレール(PII検出、有害コンテンツフィルタ等)を適用する ・`AfterModelCallback` でモデルの出力を検証し、フォーマットやポリシーへの準拠を確認する ・`AfterToolCallback` でツールの実行結果をログに記録し、監査証跡を残す 💡 ユースケース 🛡 `BeforeModelCallback` で個人情報を含むプロンプトをブロックする 📝 `AfterAgentCallback` でエージェントの実行結果をデータベースに記録する ✅ `BeforeToolCallback` でツール呼び出しパラメータのバリデーションを行う 🔍 `AfterModelCallback` でモデル出力のJSON形式を検証して再試行を促す ⚠️ 注意点 Pythonではコールバック関数のパラメータ名が正確である必要があります。`callback_context`、`llm_request`、`tool_context` などの名前が一致しないと正しく動作しません。また、Beforeコールバックで意図せず値を返してしまうと、モデル呼び出しやツール実行がスキップされてしまうため注意してください。コールバックはプラグインの後に実行される点も考慮が必要です。 ✨ コールバックを適切に使い分けることで、エージェントの振る舞いをきめ細かく制御できます。セキュリティ、品質保証、監査の要件に応じて、各レイヤーのコールバックを組み合わせてください。 #ADK# #AIAgent#
もっと見る