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

検索結果 Ad
Ad コミュニティ
1つのキーワードが1つのコミュニティです。
コミュニティ作成
アカウント
見つかりません
Ad を含む検索結果
# 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#
もっと見る
[AD]ForAVer No.141台灣攝影會:河合あすな(河合明日菜)參加辦法+報名開始 . 馬上來報名河合あすな(河合明日菜)的攝影會! . 這是河合あすな(河合明日菜)第一次在台灣舉辦攝影會,從疫情後等到現在,我們終於等到她了—10月9到11號,在台灣的雙十假期河合あすな(河合明日菜)要來舉辦攝影會了,活動內容如下: . ①10月9日,一對一棚閃攝影會兩場,分別是14:00-17:00,,18:00-21:00,每場各10人。 . ②10月10-11日,各兩場團體攝影會,每一場30人,時間分別是11:00-15:00,15:30-19:30。 . ③餐會將會在10月10日星期六晚間舉行,限8位,團體場全報就能參加,免費。 . 我們最可愛的小編已經把活動流程以及報名的格式整理成簡單好讀的圖卡,請大家現在就參照置頂文,照格式寄信來foraver0826@gmail.com 報名,神乳等你! . #河合あすな# #河合明日菜# #KawaiAsuna# #Foraver女優商演經紀# . Model @kawai_asuna
もっと見る
# ADK 2.0の便利だけど知られていない機能 🌍 AIエージェントが外部APIの一時的な障害で止まってしまい、手動で再実行した経験はありませんか? ADK 2.0のRetryConfigは、エージェントの失敗時に自動リトライを行うフレームワークレベルの機能です。手動のtry-catchを書かずに、宣言的にリトライ戦略を定義できます。 📌 タイトル:自動リトライ (RetryConfig) 🔗 URL: 🧩 概要 RetryConfigは、エージェントやツールの実行中に発生した一時的なエラーに対して、フレームワークが自動的にリトライを管理する仕組みです。max_attemptsでリトライ回数を指定するだけで、ネットワークタイムアウトやAPIのレート制限など、一過性の障害からの復旧を自動化できます。開発者がリトライロジックを個別に実装する必要がなくなり、エージェントの堅牢性が大幅に向上します。 🛠 使い方 RetryConfigをエージェントに設定するだけで、自動リトライが有効になります。 ```python from adk import Agent, RetryConfig agent = Agent( name="api_caller", model="gemini-2.0-flash", instruction="外部APIからデータを取得してください", retry_config=RetryConfig(max_attempts=3), ) ``` フレームワークがエラーを検知すると、指定回数まで自動的にリトライを実行します。手動でのtry-exceptブロックは不要です。 🏗 本番システムへの組み込み方 ・外部API呼び出しを含むエージェントには必ずRetryConfigを設定する ・max_attemptsは対象APIのレート制限やSLAに合わせて適切に設定する ・リトライでは回復できない永続的なエラーと一時的なエラーを区別して設計する ・リトライ回数やエラー内容のログを監視し、根本原因の特定に活用する 💡 ユースケース 🌐 外部APIのレート制限やタイムアウトからの自動回復 🗄️ データベース接続の一時的な切断への対応 ☁️ クラウドサービスの瞬断に対する耐障害性の確保 🔄 マルチステップワークフローの中間ステップでの安定性向上 ⚠️ 注意点 広範な`except Exception:`ブロックでエラーを捕捉すると、フレームワークのリトライ機構が正しく動作しなくなります。また、`BaseException`を捕捉すると、HITL(Human-in-the-Loop)で使用されるNodeInterruptedErrorまでトラップしてしまい、人間の介入フローが壊れます。リトライで回復が見込めないエラー(認証エラーなど)に対しては、リトライを無駄に繰り返さないよう注意が必要です。 ✨ RetryConfigを活用することで、手動のエラーハンドリングから解放され、本番環境でも安定して動作する堅牢なエージェントを構築できます。 #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#
もっと見る
Ado、初の日産スタジアム公演 Leminoで同時視聴会開催決定✨ 🎤Ado STADIUM LIVE 2026「Ao」 9/27(日)19:00~開始予定
Ado「モンストロ」ブルーロック 原作バージョンSPECIAL MVが公開⚽️ 主人公・潔世一を演じる高橋文哉さんの録りおろし生ボイスが吹き込まれた没入感たっぷりの特別仕上げに😌⚡️ 是非ご覧ください👀 @BLUELOCK_WM × @ado1024imokenp
もっと見る
# 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#
もっと見る
# ADKの便利で実践的な使い方 ## 🧠 長いセッションでもコストを抑える!ADKのContext Compaction機能 エージェントとの長い対話、コンテキストが膨らんでコストもレイテンシも増加していませんか?ADKの **Context Compaction** を使えば、古いイベントを自動要約して常にスリムなコンテキストを維持できます!🎯 ## 📌 タイトル Context Compaction(コンテキスト圧縮) ## 🔗 URL ## 🧩 概要 Context Compactionは、セッション中に蓄積されるワークフローイベントデータを自動的に要約し、処理オーバーヘッドを削減する機能です。スライディングウィンドウ方式で、最新のイベントはそのまま保持しつつ、古いイベントを圧縮することで、コストとレイテンシを最適化します。 `EventsCompactionConfig` を使って、圧縮間隔(`compaction_interval`)とオーバーラップサイズ(`overlap_size`)を設定するだけで有効になります。 ## 🛠 使い方 Appレベルで `EventsCompactionConfig` を設定します。 ` から `App` と `EventsCompactionConfig` をインポートします。`App` の `events_compaction_config` パラメータに `EventsCompactionConfig(compaction_interval=3, overlap_size=1)` を渡すことで、3イベントごとに圧縮が実行され、前回の圧縮から1イベント分を重複保持する設定になります。 TypeScriptでは `TokenBasedContextCompactor` でトークン閾値ベースの圧縮も可能です。 ```typescript const agent = new LlmAgent({ name: 'my-agent', model: 'gemini-flash-latest', contextCompactors: [ new TokenBasedContextCompactor({ tokenThreshold: 1000, eventRetentionSize: 1, summarizer: new LlmSummarizer({ llm: new Gemini({model: 'gemini-flash-latest'}) }) }) ] }); ``` ## 🏗 実践的な使い方 **カスタマーサポートボットでの活用例:** 長時間の問い合わせ対応では、対話履歴が数十ターンに達することがあります。Context Compactionを導入することで: 1. **コスト削減**:古い対話内容を自動要約し、毎回のLLM呼び出しで送信するトークン数を大幅に削減 2. **レスポンス改善**:コンテキストが小さくなることで、LLMの応答速度が向上 3. **精度維持**:直近のやり取りはそのまま保持するため、文脈を失わずに対話を継続 `compaction_interval=5, overlap_size=2` のような設定で、5ターンごとに圧縮しつつ、直前2ターン分の文脈を次の圧縮に引き継げます。 **カスタムサマライザーの活用:** デフォルトの要約モデルではなく、ドメイン特化の要約プロンプトを使うことで、業務固有の重要情報(注文番号、顧客IDなど)を確実に保持できます。 ## 💡 ユースケース - 📞 **カスタマーサポート**:長時間の問い合わせ対話でコンテキスト爆発を防止 - 📝 **ドキュメント作成支援**:長い執筆セッションで過去の議論を要約しつつ最新の方針を保持 - 🔍 **データ分析エージェント**:多段階の分析プロセスで中間結果を圧縮 - 🎮 **ゲームNPC**:長時間のプレイセッションで過去のイベントを要約して記憶 ## ⚠️ 注意点 - 圧縮は不可逆です。要約された情報の細部は失われる可能性があります - `overlap_size` が小さすぎると文脈の断絶が起きやすくなります - カスタムサマライザーを使う場合、要約モデル自体のコストも考慮が必要です - 圧縮間隔が短すぎると、頻繁な要約処理でオーバーヘッドが増加します ## ✨ まとめ Context Compactionは「長いセッション=高コスト」という常識を覆す機能です。設定一つで古いイベントを自動要約し、最新の文脈を保ちながらコストとレイテンシを最適化できます。長時間対話が発生するエージェントには、ぜひ導入を検討してみてください! #ADK# #AIAgent#
もっと見る
# 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#
もっと見る
# ADKの便利で実践的な使い方 同じシステムプロンプトやツール定義を何度も送信していませんか?Context Cachingで繰り返しのトークンコストを大幅に削減しましょう💰 📌 **タイトル**: Context Caching 🔗 **URL**: ## 🧩 概要 Context Cachingは、LLMに送信するコンテキスト(システムインストラクションやツール定義など)の静的な部分をキャッシュし、繰り返しのトークンコストを削減する機能です。 `ContextCacheConfig` を設定することで、毎回のリクエストで同じプレフィックストークンを再送信する代わりに、キャッシュされたコンテキストを参照するようになります。 特にマルチユーザー環境で同じエージェント(同じプロンプト・ツール定義)を多くのユーザーが利用する場合、コスト最適化の効果が顕著です。 ## 🛠 使い方 `google.adk` から `Agent` を、`google.adk.agents` から `ContextCacheConfig` をインポートします。`ContextCacheConfig(max_entries=100, ttl_seconds=3600)` でキャッシュエントリの上限と有効期間(秒)を設定します。この `cache_config` を `Agent` の `context_cache_config` パラメータに渡すことで、`instruction` に記述した長いシステムプロンプトや `tools` に指定したツール定義(`search_kb`、`create_ticket`、`escalate` など)の静的部分がキャッシュされ、繰り返しのトークンコストが削減されます。 ## 🏗 実践的な使い方 **大規模カスタマーサポートの最適化:** カスタマーサポートエージェントでは、以下の要素が全ユーザーで共通です。 - システムインストラクション(対応ガイドライン、トーン、禁止事項) - ツール定義(ナレッジベース検索、チケット作成、エスカレーション) - Few-shotの例示 これらの静的なコンテキストは毎リクエストで数千トークンになることがあります。1日1万リクエストのサポートボットなら、Context Cachingにより膨大なトークン削減が見込めます。 **RAGパイプラインでの活用:** ツール定義にナレッジベースのスキーマや検索パラメータの説明が含まれる場合、これらをキャッシュすることで各クエリのコストを最適化できます。 **マルチテナントSaaS:** 同一のエージェント定義を複数テナントで共有する場合、テナント固有の情報のみが動的部分となり、共通のプロンプトとツール定義はキャッシュで共有されます。 ## 💡 ユースケース - 💰 コスト削減: 長いシステムプロンプトの繰り返し送信コストを削減 - 🚀 レイテンシ改善: キャッシュヒット時のプリフィル処理が高速化 - 👥 マルチユーザー最適化: 同じプロンプトを使う複数ユーザーでキャッシュを共有 - 🏢 マルチテナント: テナント共通部分のコンテキストを効率的にキャッシュ - 📚 大規模ツール定義: 多数のツールを持つエージェントのツール定義コストを最適化 ## ⚠️ 注意点 - Context Cachingはモデルプロバイダーのサポートに依存します。利用可能なモデルを事前に確認してください - キャッシュのTTL(有効期限)が短すぎるとヒット率が下がり、長すぎるとメモリを消費します。アクセスパターンに応じて調整してください - システムプロンプトやツール定義を頻繁に変更する場合、キャッシュの恩恵は限定的です - キャッシュのコスト自体も発生する場合があります。プロバイダーの料金体系を確認し、トータルコストで判断してください - 動的なコンテキスト(ユーザー固有の情報など)はキャッシュ対象外です。静的部分と動的部分を明確に分離して設計しましょう ✨ Context Cachingは「同じことを何度も言わない」をインフラレベルで実現します。マルチユーザー環境でのコスト最適化に大きな効果を発揮します! #ADK# #AIAgent#
もっと見る