注册并分享邀请链接,可获得视频播放与邀请奖励。

cv usk
@cv_usk
AI / Software Research Notes AI Agent, LLMOps, MLOps, Software Architecture 投稿は個人の意見です。
加入 May 2026
279 正在关注    408 粉丝
# ADK 2.0の便利だけど知られていない機能 🌍 エージェントの実行フロー全体にフックを仕掛けて、監視・介入・拡張できたら便利だと思いませんか? ADK 2.0のプラグイン機能は、`BasePlugin` を拡張してRunnerに登録することで、エージェントのライフサイクル全体にわたるコールバックをグローバルに適用できる仕組みです。個別エージェントのコールバックとは異なり、全エージェントに横断的に作用します。 📌 タイトル:プラグイン (Plugins) 🔗 URL: 🧩 概要 プラグインは `BasePlugin` を継承して作成し、Runnerに登録します。エージェント個別のコールバックとは異なり、グローバルスコープで全エージェントに適用されます。ライフサイクルフックは多岐にわたり、ユーザーメッセージの受信、Runner開始、エージェント実行、モデル呼び出し、ツール実行、イベント処理、Runner終了の各タイミングに介入できます。動作モードは3種類あり、Observe(監視のみ)、Intervene(処理を変更・中断)、Amend(結果を後から修正)です。プラグインのコールバックはエージェントのコールバックよりも先に実行されます。 🛠 使い方 `BasePlugin` を継承し、必要なライフサイクルフックをオーバーライドします。 ```python from adk.plugins import BasePlugin class LoggingPlugin(BasePlugin): def __init__(self): super().__init__(name="logging_plugin") async def on_before_model_call(self, callback_context, llm_request): print(f"Model call: {llm_request.model}") return None # Noneを返すと通常の処理が続行 async def on_after_tool_call(self, tool_context, tool_response): print(f"Tool executed: {tool_context.tool_name}") return None # Runnerに登録 runner = Runner( agent=my_agent, plugins=[LoggingPlugin()] ) ``` Interveneモードではコールバックから値を返すことで処理を置き換え、Amendモードではイベント処理後に結果を修正できます。 🏗 本番システムへの組み込み方 ・ログ収集やメトリクス記録をObserveモードのプラグインとして実装し、エージェントコードを汚さない ・ガードレールやコンテンツフィルタリングをInterveneモードで実装し、不適切な入出力をブロックする ・分析用データの収集をAmendモードで後処理として組み込む ・プリビルトプラグイン(Reflect/Retry、BigQuery Analytics、Context Filtering、Global Instructions等)を活用して開発を効率化する 💡 ユースケース 📊 全エージェントのモデル呼び出しとツール実行をBigQueryに記録する 🛡 入力内容のガードレールをプラグインで一元管理し、有害なリクエストをブロックする 🔄 モデル呼び出し失敗時のリトライロジックをReflect/Retryプラグインで実装する 📋 グローバルな指示(コンプライアンスルール等)をGlobal Instructionsプラグインで全エージェントに適用する ⚠️ 注意点 プラグインのコールバックはエージェントのコールバックよりも先に実行されるため、プラグインで処理をブロックするとエージェントのコールバックは呼ばれません。Interveneモードで不適切な値を返すとエージェントの動作が壊れる可能性があるため、返り値の型と意味を正確に理解してから使用してください。また、プラグインの実行順序はRunnerへの登録順に依存します。 ✨ プラグインを活用することで、横断的な関心事(ログ、セキュリティ、分析)をエージェントのコアロジックから分離でき、保守性の高いシステムを構築できます。 #ADK# #AIAgent#
显示更多