Slide 1

Slide 1 text

エージェントに記憶を与える コンテキスト管理の設計と実践 Works Human Intelligence 寺尾 拓 2025/06/20 本資料は自己紹介ページおよび会社ロゴをのぞき、 CC BY 4.0 ライセンスで利用可能です。

Slide 2

Slide 2 text

なぜコンテキスト管理が大事か

Slide 3

Slide 3 text

AIエージェントのコンテキストウィンドウ 0 システム プロンプト (10K-20K) 入力 (1K) ReACT (5-10K) ReACT (5-10K) ReACT (5-10K) ステップごとにコンテキストウィンドウを消費 コンテキストが増えすぎるとタスクが失敗しやすい。 ツール実行結果、ドキュメント

Slide 4

Slide 4 text

100Kトークンの壁 多くのLLMモデルで100 Kトークン超から パフォーマンスが低下する。 ● システムプロンプトを忘れる ● 直近のタスクに囚われ、ゴールを見失う ● ノイズ情報を拾ってハルシネーション 出典 Fiction.live Fiction.liveBench June 10 2025 より作成 タスクが失敗しやすくなる

Slide 5

Slide 5 text

APIコストの増大 モデル 入力 100K キャッシュ 100K 出力 100K Agent 10 Steps Agent 20 Steps OpenAI GPT-4.1/o3 $0.20 $0.05 $0.80 $0.46 $1.17 OpenAI o4-mini $0.11 $0.0275 $0.44 $0.25 $0.64 Google Gemini 2.5 Pro (≤ 200 K ctx) $0.125 $0.031 $1.00 $0.39 $0.93 Google Gemini 2.5 Flash $0.015 $0.00375 $0.06 $0.03 $0.09 Anthropic Claude 4 Sonnet $0.30 $0.03 $1.50 $0.66 $1.47 10 Steps シナリオ: In 100K, Out 20K, Cache 200K 20 Steps シナリオ: In 200K, Out 40K, Cache 900K エージェントのステップ数に対してAPIコストが2次的増加 出典:OpenAI, Google, Anthropic社のAPI価格表 (2025/06/12時点)より作成

Slide 6

Slide 6 text

コンテキスト管理の設計 コンテキスト管理テクニックを学ぶことで エージェント開発者: エージェントの精度向上 エージェント利用者: タスク成功率アップ、コスト削減

Slide 7

Slide 7 text

コンテキスト管理の設計 1. 中間を削除する 2. 記憶を圧縮する 3. 外部記憶に退避する

Slide 8

Slide 8 text

手法1:中間を削除する 0 システム プロンプト (10K-20K) 入力 (1K) ReACT1 (5-10K) ReACT2 (5-10K) ReACT3 (5-10K) ReACT4 (5-10K) リミット

Slide 9

Slide 9 text

手法1:中間を削除する 0 システム プロンプト (10K-20K) 入力 (1K) ReACT1 (5-10K) ReACT3 (5-10K) ReACT4 (5-10K) リミット 良い点:実装が簡単、キャッシュも効きやすい 悪い点:重要なステップを忘れると精度に影響

Slide 10

Slide 10 text

コンテキスト管理の設計 1. 中間を削除する 2. 記憶を圧縮する 3. 外部記憶に退避する

Slide 11

Slide 11 text

手法2:記憶を圧縮する 0 システム プロンプト (10K-20K) 入力 (1K) ReACT1 (5-10K) ReACT2 (5-10K) ReACT3 (5-10K) ReACT4 (5-10K) リミット ReACT1-4の要約 (10K) 「ここまでの流れを要約して」

Slide 12

Slide 12 text

手法2:記憶を圧縮する 0 システム プロンプト (10K-20K) 入力 (1K) ReACT1-4の要約 (10K) リミット 良い点:精度が下がりにくい、ノイズが除去される 悪い点:要約の追加時間、正確な出典の明示が難しい

Slide 13

Slide 13 text

コンテキスト管理の設計 1. 中間を削除する 2. 記憶を圧縮する 3. 外部記憶に退避する

Slide 14

Slide 14 text

手法3:外部記憶に格納する 0 システム プロンプト (10K-20K) 入力 (1K) ReACT1 (5-10K) ReACT2 (5-10K) ReACT3 (5-10K) ReACT4 (5-10K) リミット

Slide 15

Slide 15 text

手法3:外部記憶に格納する 0 システム プロンプト (10K-20K) 入力 (1K) ReACT1 (5-10K) ReACT2 (5-10K) ReACT3 (5-10K) ReACT4 (5-10K) リミット ID: Mem-1 要約: ドキュメント XXによると〇〇が わかりました。 ID: Mem-2 要約: △△について 検索しましたが、ヒッ トしません ID: Mem-3 要約: Pythonで分析を 行い、結果は□□でし た。 各ステップを要約を作成

Slide 16

Slide 16 text

手法3:外部記憶に格納する 0 システム プロンプト (10K-20K) 入力 (1K) ReACT4 (5-10K) Mem-1 要約1 Mem-2 要約2 Mem-3 要約3 ReACT1 (5-10K) ReACT2 (5-10K) ReACT3 (5-10K) 外部記憶 外部記憶にステップを退避し、コンテキストには要約を残す

Slide 17

Slide 17 text

手法3:外部記憶に格納する 0 システム プロンプト (10K-20K) 入力 (1K) ReACT4 (5-10K) Mem-1 要約1 Mem-2 要約2 Mem-3 要約3 ReACT1 (5-10K) ReACT2 (5-10K) ReACT3 (5-10K) 外部記憶 Tool call Recall[“Me m-2”] LLMが必要に応じて、外部記憶を思い出す

Slide 18

Slide 18 text

手法3:外部記憶に格納する 0 システム プロンプト (10K-20K) 入力 (1K) ReACT4 (5-10K) Mem-1 要約1 Mem-2 要約2 Mem-3 要約3 ReACT1 (5-10K) ReACT2 (5-10K) ReACT3 (5-10K) 外部記憶 Tool call Recall[“Me m-2”] ReACT2 (5-10K) ツールが外部記憶を検索し、コンテキストに追加

Slide 19

Slide 19 text

手法3:外部記憶に格納する 良い点: ● 精度が下がりにくい ● ノイズが除去される ● トレーサビリティが高い 悪い点: ● 実装が複雑 ● 「思い出す」ための追加推論コスト ● うまく使いこなすためのLLMチューニングが必要

Slide 20

Slide 20 text

手法まとめ 中間削除 記憶圧縮 外部記憶 実装コスト ⭐ 🔶 ⚠ ノイズ除去 ⚠ ⭐ ⭐ ハルシネーション ⚠ 🔶 ⭐ 追加推論ステップ ⭐ 🔶 ⚠ ユースケース まずはここから始める 小規模なタスク 検索ノイズが多い場合 ステップ数が多い場合

Slide 21

Slide 21 text

コンテキスト管理の実践 既存ツールがどのような実装か知る エージェント開発者:実装の参考に エージェント利用者:利用しているツールの特徴を把握

Slide 22

Slide 22 text

コンテキスト管理の実践 1. LangGraph 2. OpenHands 3. Cline

Slide 23

Slide 23 text

LangGraphでの実装 短期記憶 ● 中間削除:メッセージの編集(trim_messages)機能を利用 ● 記憶圧縮:要約ノード(SummarizationNode)として利用可能 長期記憶 ● ベクトルストアに格納し、適宜検索する仕組み(外部記憶) ● 何を残すか、どうやって思い出すかはエージェント開発者がプログラム 出典:Manage memory LangGraphの公式ドキュメントより

Slide 24

Slide 24 text

OpenHandsでの実装 ● Context Condensationと呼ばれる独自技術を採用 ● 様々なCondenserが実装されており、設定ファイルで差し替え可能 ○ 中間削除系 ■ Recent Events Condenser ■ Amortized Forgetting Condenser ○ 取捨選択系 ■ Observation Masking Condenser ● ツール呼び出しの結果のみ最近 N件以前をマスク ■ LLM Attention Condenser ○ 記憶圧縮系 ■ LLM Summarizing Condenser 出典:OpenHandsのソースコードより

Slide 25

Slide 25 text

Clineでの実装 短期記憶 ● シンプルな中間削除アルゴリズム 長期記憶 ● Cline側での機能としては持たず、システムプロンプトで対応 ● MemoryBankなどの形式でMarkdown形式でファイルとして保存 出典 :Clineのソースコード 、 Clineの公式ドキュメントより

Slide 26

Slide 26 text

まとめ

Slide 27

Slide 27 text

まとめ コンテキスト管理はなぜ必要か? ● トークン数を節約し、APIコストを削減 ● ノイズ情報を除去し、エージェントの精度を上げる どのような手法があるか? ● 大きく分けると中間削除、記憶圧縮、外部記憶の三種類 ● 様々なバリエーションがあり、銀の弾丸はない。

Slide 28

Slide 28 text

エージェント開発者: まずは中間削除方式から始めて、 実行トレースを分析し、 適切な手法を選ぼう! エージェント利用者: 利用しているエージェントの コンテキスト管理方法を把握し、 利用方法を工夫しよう!

Slide 29

Slide 29 text

ありがとうございました! ■免責事項および権利帰属について 本資料は株式会社Works Human Intelligenceの著作物です。 本資料は自己紹介ページおよび会社ロゴをのぞき、 CC BY 4.0 ライセンスで利用可能です。 会社名、製品名はそれぞれ各社の商標又は登録商標です。 本文中および図中に ®マークは表記しておりません。