水曜日, 6月 25, 2025
水曜日, 6月 25, 2025
- Advertisment -
ホームニューステックニュースMCPサーバーを使うなら Prompt Caching が大切だと思い知った話

MCPサーバーを使うなら Prompt Caching が大切だと思い知った話


MCPサーバーと連携するチャットアプリを作っていたのですが、「開発中でほぼ自分しか使ってないのに生成AIの利用量がやたら高くね?」と思いました。

ClaudeのMaxプランが月額100ドルで使い放題であることを考えると、開発中に軽く使っただけで数千円かかるアプリなんでコスパ悪すぎて、まともに使えないですね。

なぜそんなに高いのか分からなかったので、Claudeのログを取って調べてみました。
ログの取り方は先日書いた記事を参照ください。

https://zenn.dev/ncdc/articles/a0518a54684bdc

そして、取得したログを確認したところ、、、

{“input_tokens”:21786,”cache_creation_input_tokens”:0,”cache_read_input_tokens”:0,”output_tokens”:85}}

“input_tokens”:21786

2万トークン!? 想定外にトークン数が多くてびっくりしました。

そこで、生成AIにリクエストを分析させてみました。

🙎
🤖 MCPツールの定義が多すぎます

細かく見てみましょう。例えばBOXのMCPサーバーの場合、1つのツールで以下のようなツールの定義が生成AIへinputに追加されていました。

{"name":"box_search_tool","description":"\nSearch for files in Box with the given query.\n\nArgs:\n    query (str): The query to search for.\n    file_extensions (List[str]): The file extensions to search for, for example *.pdf\n    content_types (List[SearchForContentContentTypes]): where to look for the information, possible values are:\n        NAME\n        DESCRIPTION,\n        FILE_CONTENT,\n        COMMENTS,\n        TAG,\n    ancestor_folder_ids (List[str]): The ancestor folder IDs to search in.\nreturn:\n    str: The search results.\n","input_schema":{"properties":{"query":{"type":"string"},"file_extensions":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null},"where_to_look_for_query":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null},"ancestor_folder_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null}},"required":["query"],"type":"object"}},

約1000文字あります。BOXのMCPサーバーには10個以上のツールが含まれているので、単純計算で1万文字以上です。MCPサーバーを10個つなぐと10万文字を超える可能性もあるということです。

むしろよく2万トークンで収まってましたね。

ユーザーが「こんにちは」の5文字を送っただけでも、実際は10万文字のデータが送られていて10万文字分課金されていたわけですね。MCPサーバー怖い。

ここでMCPサーバーを諦められれば平和なのですが、我々はもはやMCPサーバーなしの生活には戻れないので、Prompt Cachingを使うことでコスト削減をすることにしました。

https://docs.anthropic.com/ja/docs/build-with-claude/prompt-caching

プロンプトキャッシングは、プロンプト内の特定のプレフィックスから再開できるようにすることで、API使用を最適化する強力な機能です。このアプローチにより、繰り返しのタスクや一貫した要素を持つプロンプトの処理時間とコストが大幅に削減されます。

Prompt Cachingを使えば、同じプロンプトを繰り返し送ったときにキャッシュが使われるので料金が抑えられるということになります。
生成AIに伝えるMCPサーバーの定義は基本的には固定されているので、先程の10万文字ほぼ全てキャッシュされることになります。

Prompt Cachingが登場した当初、私はClaude Codeが安くなるくらいにしか考えてなかったですが、こうして改めてみるとMCPサーバーのために作られたとしか思えない機能ですね。

有効化するだけなら簡単だろうと思っていたのですが、生成AIに丸投げしたら全然まともにコードを書いてくれませんでした。

なので自力で頑張って調べました。主にこのあたりを主に参考にしました。

https://docs.anthropic.com/en/docs/build-with-claude/prompt-caching

https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/claude/prompt-caching?hl=ja

https://python.langchain.com/docs/integrations/chat/anthropic/

結果

{“input_tokens”:519,”cache_creation_input_tokens”:0,”cache_read_input_tokens”:21097,”output_tokens”:190}

  • “input_tokens”:519
  • “cache_read_input_tokens”:21097

全体の97.5%がキャッシュされました!
金額的には75%〜80%程度の費用削減が期待できます。

MCPサーバーを使うなら、Prompt Cachingを有効化しよう。

Claude Codeは、Prompt Cachingがデフォルトで有効化されているので、安心しましょう。
なお、環境変数でDISABLE_PROMPT_CACHING=1を設定することでClaude CodeのPrompt Cachingを無効化できます。MCPサーバーなしの状態でも体感3倍くらいの金額差があったので、富豪の人はぜひ試してみてください。



Source link

Views: 0

RELATED ARTICLES

返事を書く

あなたのコメントを入力してください。
ここにあなたの名前を入力してください

- Advertisment -