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

検索結果 LLMAgents
LLMAgents コミュニティ
1つのキーワードが1つのコミュニティです。
コミュニティ作成
アカウント
見つかりません
LLMAgents を含む検索結果
LLMエージェントの「検索」を「推論」から切り離すと、精度はほぼ維持したまま検索コストを最大98%削減できました🔌 タイトル: Decoupling Search from Reasoning: A Vendor-Agnostic Grounding Architecture for LLM Agents URL: 🔌 概要 検索による根拠づけ(grounding)を、言語モデルの推論から切り離す手法DSGの提案です。Model Context Protocol(MCP)に準拠した独立ゲートウェイとして動作し、ベンダー非依存の中間層として機能します。 ❓ 解決する課題 本番のLLMエージェントでは、リアルタイム検索がモデルプロバイダーに密結合しています。 ・システムの検査・再構成・転用・移行が難しい ・検索が「Search-Induced Verbosity(検索起因の冗長化)」を招き、厳格な出力要件に違反することがある 検索と推論の一体化が、柔軟性とコストのボトルネックでした。 💡 方法論と提案手法 根拠づけを「モデルの中」ではなく「検索と生成の境界」に置きます。これまでモデルに埋め込まれていた要素を制御可能な第一級機能として公開します。 ・プロバイダールーティング(検索先の選択・切り替え) ・ソースを意識したコンテキストレンダリング ・設定可能なフォールバック機構 ・検索深度の管理 ・厳密キャッシュとセマンティックキャッシュの両方 📊 実験結果 ・SimpleQA:精度86.1%(ネイティブ検索87.7%)を保ちつつ検索コストを91%削減 ・キャッシュのウォームヒット率99.4%、レイテンシ68%削減 ・本番Eコマース:ネイティブ同等の精度で検索コストを98%以上削減 ・一方、新しさが重要なFreshQAではネイティブ検索が優位 #LLMエージェント# #検索#
もっと見る
🧠 「記憶は検索されるのではなく、再構成される」——LLMエージェントのメモリを、一度きりの検索から推論しながら掘り進む方式に作り変えた研究がICML 2026に採択されました。 タイトル: Memory is Reconstructed, Not Retrieved: Graph Memory for LLM Agents URL: 🧠 概要 提案手法MRAgentは、連想記憶グラフと「能動的再構成メカニズム」を組み合わせたLLMエージェントのメモリ手法です。LLMの推論をメモリアクセスそのものに組み込み、推論中に見えてきた証拠をもとに検索パスを反復的に探索していきます。 ❓ 解決する課題 既存のメモリ拡張エージェントの多くは「まず検索→次に推論」という固定パイプラインでした。 ・最初のクエリだけで一度きりに取り出すため、推論の途中で重要だと分かった手がかりを使い直せない ・長い対話履歴から多段で証拠をたどる質問に弱い 💡 方法論と提案手法 メモリをCue(手がかり)・Tag(意味的な橋渡し)・Content(内容)の3種ノードを持つグラフで表現します。 ・まず関連するTagを選び、次にCueとTagの両方を条件にContentを取得する2段階検索 ・「どの方向に探すか」と「何を取り出すか」を分離し、組合せ爆発を回避 ・推論中の状態を保持し、新たな手がかり(例:「7月」という時間軸)を発見して未到達の証拠まで辿れる 🎯 ユースケース 長期記憶が必要な対話エージェントや、複数セッションをまたいで事実を組み合わせるアシスタントに有効です。十分な証拠が集まったとLLM自身が判断して探索を打ち切るため、無駄な検索も抑えられます。 📊 実験結果 ・LoCoMoでGeminiのスコアが68.31%→84.21%(相対+23.3%)、Claudeで75.88%→90.19% ・LongMemEvalで53.01%→72.95%(相対+37.6%)。マルチホップや時間推論で特に強い ・トークン消費は118kとベースライン(245k〜3,268k)より大幅に少なく、性能と低コストを両立 #LLMエージェント# #メモリ#
もっと見る
# ADK 2.0の便利だけど知られていない機能 🌍 実行中のエージェントを途中で安全にキャンセルし、それまでの処理結果は保持できたら理想的だと思いませんか? ADK 2.0のキャンセル機能は、AbortController/AbortSignalを使ってエージェントの実行をグレースフルに中断する仕組みです。キャンセルシグナルはRunner、LlmAgent、Models、Toolsへと伝播し、コミット済みのイベントは保持されます。 📌 タイトル:エージェント実行のキャンセル 🔗 URL: 🧩 概要 エージェント実行のキャンセルは、AbortControllerとAbortSignalのパターンで実現されます。AbortControllerからシグナルを発行すると、Runner→LlmAgent→Models→Toolsの順にキャンセルが伝播します。重要な点として、キャンセル時点ですでにコミットされたイベントは保持され、例外をスローせずグレースフルに完了します。AbortSignal.timeout()を使えばタイムアウトベースの自動キャンセルも可能で、AbortSignal.any()で複数のシグナルを組み合わせることもできます。 🛠 使い方 AbortControllerを作成し、そのシグナルをRunnerに渡します。 ```python from adk import App, AbortController, AbortSignal app = App(agent=my_agent) # 手動キャンセル controller = AbortController() task = "long task", signal=controller.signal) # 必要なタイミングでキャンセル controller.abort() # タイムアウトベースの自動キャンセル(2秒) signal = AbortSignal.timeout(2000) result = await "time-limited task", signal=signal) # 複数シグナルの組み合わせ combined = AbortSignal.any([ AbortSignal.timeout(5000), user_cancel_signal ]) result = await "task", signal=combined) ``` 🏗 本番システムへの組み込み方 ・ユーザー操作(キャンセルボタン)と連動したAbortControllerを実装し、UIからのキャンセルを可能にする ・AbortSignal.timeout()でAPI呼び出しの最大実行時間を制限し、リソースの無駄遣いを防ぐ ・AbortSignal.any()でユーザーキャンセルとタイムアウトの両方に対応する ・キャンセル後のコミット済みイベントを活用し、部分的な結果を返却する設計にする 💡 ユースケース ⏱ LLM呼び出しにタイムアウトを設定し、応答が遅い場合に自動キャンセル 🖱 ユーザーがUIのキャンセルボタンを押した際にエージェント実行を即座に中断 🔀 複数のエージェントを並列実行し、最初に完了したもの以外をキャンセル 💰 コスト上限に達した時点でLLM呼び出しを打ち切る ⚠️ 注意点 キャンセルはグレースフルに完了するため、abort()を呼んだ瞬間に即座に停止するわけではありません。現在実行中のオペレーション(LLM推論やツール実行)が完了するまで若干の遅延が生じる場合があります。また、コミット済みのイベントは保持されるため、キャンセル後の状態が中途半端にならないよう、ワークフロー設計時にキャンセルポイントを意識することを推奨します。ツール内部でシグナルを監視して早期リターンする実装も有効です。 ✨ キャンセル機能により、エージェント実行のライフサイクルを安全にコントロールできます。タイムアウトと組み合わせることで、本番環境での予測可能性が大きく向上します。 #ADK# #AIAgent#
もっと見る
# ADKの便利で実践的な使い方 🔀 プロンプトだけでエージェントの実行フローを制御するのは不安定になりがちです。ADKのGraph Workflowsなら、ノードとエッジでワークフローを明示的に定義し、AIノードと関数ノードを自在に組み合わせられます! 📌 タイトル:Graph Workflows — ノードとエッジによる明示的なワークフロー定義 🔗 URL: 🧩 概要 Graph Workflowsは、`Workflow`クラスの`edges`パラメータでノードの接続関係を定義し、実行フローを構築する仕組みです。AIエージェントノード、関数ノード、ツールノード、ネストされたWorkflowを混在させることができます。ルーターノードが`Event(route=...)`を返すことで辞書ベースの条件分岐が可能になり、「プロンプトに頼らない予測可能な制御フロー」を実現します。 🛠 使い方 基本的なGraph Workflowの構成です。 `google.adk` から `Workflow` と `Event` をインポートします。ルーター関数 `process_message` は `node_input` の内容に応じて `Event(route="BUG")`、`Event(route="LOGISTICS")`、または `Event(route="CUSTOMER_SUPPORT")` を返します。各ルートに対応する関数(`response_bug`、`response_support`、`response_logistics`)はそれぞれ `Event(output=...)` で応答メッセージを返します。 `Workflow` の `name="support_router"` で、`edges` に2つのタプルを定義します。1つ目は `("START", process_message)` で開始ノードからルーターへ接続し、2つ目は `process_message` の出力を `{"BUG": response_bug, "CUSTOMER_SUPPORT": response_support, "LOGISTICS": response_logistics}` の辞書で各ハンドラーに振り分けます。 順次実行のシンプルなチェーンも定義できます。 `Workflow` の `edges` にタプル `("START", agent1, function1, agent2, function2)` を1つ渡すことで、ノードを順次接続するシンプルなチェーンを定義できます。 🏗 実践的な使い方 **AIフリー関数チェーン + AIノードの混在**: データの前処理や後処理はPython関数で行い、判断が必要な部分だけAIエージェントノードを使います。これによりLLMの呼び出し回数を最小限に抑え、コストと遅延を削減できます。 関数ノード `extract_data` は `json.loads(node_input)` でデータを解析し `Event(output=parsed["content"])` を返します(AI不要)。`LlmAgent` の `analyzer` がデータの分析と要約を行い、関数ノード `format_output` が `Event(output=f"## 分析結果\n{node_input}")` でフォーマットします(AI不要)。 `Workflow` の `name="hybrid_pipeline"` で `edges=[("START", extract_data, analysis_agent, format_output)]` と定義し、関数ノードとAIノードを混在させたハイブリッドパイプラインを構築します。 **カスタマーサポートの自動振り分け**: 問い合わせ内容をルーター関数で分類し、適切な対応エージェントに振り分けます。分類ロジックがコードで明示されているため、動作の予測と検証が容易です。 💡 ユースケース 📨 問い合わせの自動分類・振り分け(バグ/サポート/配送) 🔧 前処理(関数)→ 分析(AI)→ 後処理(関数)のハイブリッドパイプライン 🏭 ETLパイプラインのAI組み込み(抽出は関数、変換にAIを活用) 🔀 ルーティングロジックの明示化によるテスタビリティ向上 ⚠️ 注意点 - ライブストリーミング機能はGraph Workflowsと互換性がありません。 - 一部のサードパーティ連携はGraph Workflowsをサポートしていない場合があります。 - ルーターの辞書にないrouteキーが返された場合のエラーハンドリングを考慮してください。 - ノードは1回の実行で1つの`Event.output`のみを出力できます。 ✨ Graph Workflowsは、AIノードと関数ノードをノードとエッジで明示的に結合し、プロンプトだけに頼らない予測可能なエージェントパイプラインを構築します。コスト効率と信頼性を両立したい場面でぜひ活用してください! #ADK# #AIAgent#
もっと見る
# ADKの便利で実践的な使い方 🔧 標準ワークフローでは実現できない独自のオーケストレーションロジックが必要な場面、ありますよね。ADKのCustom Agentsなら、`BaseAgent`を継承して自由自在に制御フローを組み立てられます! 📌 タイトル:Custom Agents — BaseAgent継承による自由な制御フロー設計 🔗 URL: 🧩 概要 Custom Agentsは、`google.adk.agents.BaseAgent`を継承し、`_run_async_impl`メソッドを実装することで、任意のオーケストレーションロジックを構築できる仕組みです。SequentialAgentやParallelAgentなどの定型パターンでは対応できない、条件分岐・ループ・外部状態同期といった高度なワークフローを実現します。サブエージェントの呼び出し、セッション状態の共有、イベントの伝播がフレームワーク標準で管理されます。 🛠 使い方 Custom Agentの基本構造は以下のとおりです。 `google.adk.agents.BaseAgent` を継承して `MyCustomAgent` クラスを定義します。フィールドとして `story_generator`、`critic_agent`、`tone_checker` の3つの `LlmAgent` を宣言します。`_run_async_impl` メソッド内で、まず `self.story_generator.run_async(ctx)` でストーリーを生成し、次に `self.critic_agent.run_async(ctx)` を `for i in range(2)` で最大2回ループして批評・修正を行います。最後に `self.tone_checker.run_async(ctx)` でトーンを確認し、`ctx.session.state.get("tone_result")` が `"negative"` の場合は `self.story_generator.run_async(ctx)` で再生成する条件分岐を行います。各サブエージェントの実行は `async for event in ... yield event` パターンでイベントを伝播します。 サブエージェント間のデータ共有には`ctx.session.state`を使います。 エージェントAが `ctx.session.state["analysis_result"] = result` で結果を書き込み、エージェントBが `ctx.session.state.get("analysis_result")` でそれを読み取ります。 🏗 実践的な使い方 **レガシーステートマシンの再現**: 既存の状態遷移ロジックをCustom Agentに移植できます。`_run_async_impl`内でPythonの標準的な制御構文(if/elif/while/try-except)を使い、状態ごとに異なるサブエージェントを呼び分けます。 `_run_async_impl` 内で `state = "INIT"` から開始し、`while state != "DONE"` でステートマシンを実装します。`"INIT"` 状態では `self.init_agent.run_async(ctx)` を実行し、`ctx.session.state.get("next_state", "PROCESS")` で次の状態を決定します。`"PROCESS"` 状態では `self.process_agent.run_async(ctx)` を実行後 `"REVIEW"` に遷移します。`"REVIEW"` 状態では ` を実行し、`ctx.session.state.get("approved")` が真なら `"DONE"` に、偽なら `"PROCESS"` に戻ります。 **外部状態との同期**: データベースやAPIから取得した状態に基づいて実行パスを動的に切り替えられます。例えば、外部システムのステータスを確認してから次のエージェントを選択するパターンが実現可能です。 💡 ユースケース 🔄 レガシーシステムの状態遷移ロジックをAIエージェントとして再実装 🔀 中間結果に基づく条件分岐ワークフロー(品質チェック → 不合格なら再生成) 🔗 外部API/DBの状態に応じたエージェント選択 🔁 批評・修正の反復ループ(最大N回で打ち切り) ⚠️ 注意点 - `sub_agents`リストには、`_run_async_impl`内で直接呼び出すすべてのサブエージェントを含める必要があります。含めないとフレームワークのライフサイクル管理が正しく動作しません。 - `ctx.session.state`は全サブエージェント間で共有されるため、キー名の衝突に注意してください。プレフィックスをつけるなどの規約を決めておくと安全です。 - 無限ループを防ぐため、ループ処理には必ず最大回数や終了条件を設けてください。 ✨ Custom Agentsは、定型パターンでは収まらない独自のビジネスロジックをエージェントに組み込むための最も柔軟な手段です。ステートマシンの移行や複雑な条件分岐が必要な場面で、ぜひ活用してみてください! #ADK# #AIAgent#
もっと見る
# ADK 2.0の便利だけど知られていない機能 🌍 長い会話を続けていると、コンテキストウィンドウがいっぱいになってエージェントの品質が低下した経験はありませんか? ADK 2.0のコンテキスト圧縮(コンパクション)機能は、古いイベントをスライディングウィンドウ方式で要約し、コンテキストウィンドウを効率的に管理する機能です。長時間の会話でもエージェントの応答品質を維持できます。 📌 タイトル:コンテキスト圧縮(コンパクション) 🔗 URL: 🧩 概要 コンテキスト圧縮は、会話が長くなった際に古いイベントを要約して圧縮する仕組みです。2つの主要パラメータで動作を制御します。compaction_intervalは圧縮を実行するイベント間隔、overlap_sizeは圧縮時に次のウィンドウに引き継ぐイベント数です。例えば、compaction_interval=3、overlap_size=1の場合、3イベントごとに圧縮が実行され、最後の1イベントは次のウィンドウにも含まれます。Pythonではアプリに設定し、TypeScriptではTokenBasedContextCompactorでトークンしきい値ベースの制御が可能です。カスタムサマライザーも実装できます。 🛠 使い方 PythonではEventsCompactionConfigをAppに設定します。 ```python from import App from google.adk.context import EventsCompactionConfig compaction_config = EventsCompactionConfig( compaction_interval=5, # 5イベントごとに圧縮 overlap_size=2, # 直近2イベントを次のウィンドウに引き継ぎ ) app = App( agent=my_agent, events_compaction_config=compaction_config, ) ``` TypeScriptではTokenBasedContextCompactorを使用します。 ```typescript import { TokenBasedContextCompactor } from '@anthropic-ai/adk'; const compactor = new TokenBasedContextCompactor({ tokenThreshold: 4000, }); ``` カスタムサマライザーが必要な場合は、LlmEventSummarizerを拡張して独自の要約ロジックを実装できます。 🏗 本番システムへの組み込み方 ・compaction_intervalを会話の平均長さに合わせて調整する ・overlap_sizeを大きくすると文脈の連続性が向上するが、圧縮効率は低下する ・カスタムサマライザーで業務ドメインに特化した要約を実装する ・圧縮前後のイベント数とトークン数をモニタリングし、パラメータを最適化する 💡 ユースケース 💬 カスタマーサポートの長時間チャットでコンテキスト品質を維持 📝 長期プロジェクト管理エージェントの会話履歴を効率的に圧縮 🎯 重要な情報を保持しながら不要な詳細を削減してコストを最適化 🔧 ドメイン固有のカスタムサマライザーで業務に最適な要約を実現 ⚠️ 注意点 圧縮により古いイベントの詳細な情報は失われます。重要な情報はStateに保存するなど、圧縮されても失われない設計を心がけてください。また、overlap_sizeが小さすぎると文脈の断絶が生じ、エージェントの応答品質が低下する可能性があります。compaction_intervalとoverlap_sizeのバランスを実際のユースケースでテストすることをお勧めします。 ✨ コンテキスト圧縮により、長時間の会話でもコンテキストウィンドウを効率的に活用できます。エージェントの応答品質とコスト効率の両立に大きく貢献する機能です。 #ADK# #AIAgent#
もっと見る