読者が抱える課題
AIエージェント(ReActパターンや自律型エージェント)を導入した際、プロンプトのルールの追加やTool実行の試行錯誤に伴い、想定以上のAPIコストが発生することがあります。
「数回のやり取りで大量のトークンを消費してしまう」「ルーティングや履歴の保持方法が最適化されていない」といった問題は、本番運用における予算超過の大きな要因となります。
この記事で分かること
- AIエージェントでトークン消費が跳ね上がる主な原因
- 実務で導入可能なトークン削減アプローチ(履歴の圧縮・システムプロンプト最適化・モデルの使い分け)
- PythonおよびLangChainを用いた具象コード例
- 運用時のコスト管理チェックリスト
対象読者・前提条件
- 対象読者: LLMを活用したAIエージェントやRAGシステムを開発・運用しているエンジニア
- 前提条件: Pythonの基本文法、OpenAI APIおよびLangChainの基本的な利用経験があること
APIコストが増えすぎる主な原因
AIエージェントの処理では、以下のような理由でトークン数が累積します。
-
ReActループでの履歴の膨張
エージェントが思考(Thought)・行動(Action)・観察(Observation)を繰り返すたびに、過去の全ステップがコンテキストとして再送信されます。 -
巨大なTool定義の常時インクルード
利用可能なToolのスキーマ(JSON Schema)をすべてシステムプロンプトに含めると、ツール数に比例して毎リクエストの入力トークンが増大します。 -
会話履歴(Chat History)の無制限な保持
過去の対話履歴をそのまま全量送信し続けると、コンテキストウィンドウの上限に達するだけでなく、リクエストごとに膨大なコストがかかります。 -
単一の高性能モデルへの依存
簡単な分類やルーティング、中間処理にもすべて高コストなフラグシップモデルを使用しているケースがあります。
トークン削減のための具体的手法と実装例
1. 会話履歴の要約・ウィンドウ制限(Conversation Window / Summary)
直近のN件のメッセージのみを保持するか、古い対話を要約してコンテキストサイズを抑えます。
以下は、LangChainを利用して直近のK個のやり取りのみを保持する実装例です。
# 独自実装例:直近のメッセージのみを保持する設定
from langchain_community.chat_message_histories import ChatMessageHistory
from langchain_core.messages import trim_messages
# 履歴オブジェクトの初期化
history = ChatMessageHistory()
# サンプルデータの追加(実務では動的に追加されます)
history.add_user_message(