前回までプロンプトキャッシングについて調べたりコード書いたりしていました。
似たような機能で、Geminiにも明示的Context Cacheという機能があります。
公式ドキュメントにも、
- 暗黙的なキャッシュ保存(自動、費用削減は保証されない)
- 明示的なキャッシュ保存(手動、費用削減保証)
とあるので、コンテキストキャッシュを使って費用削減しようと思ったら、明示的にやるのが良さそうではあります。
LangChainでそれをやっている文献が見当たらなかったので、今回試しにやってみたのでそのメモです。・
LangChainでのContext Cache機能
一応LangChainに機能としてはあるみたいです。
注意点としてはGoogleのGeminiのAPIはGoogle AI Studio と Vertex AI の2つから提供されているんですが、このLangChainでのコンテキストキャッシュはVertex AI側にしか提供されてません。 (頼むから統一してくれ…)
なのでVertex AIでやろうと思います。
とりあえずVertex AI を使ってみる
Vertex AIの方のAPIを叩くのが実は初めてだったりするので、チュートリアル通りにやってみたいと思います。 こんな感じでちゃんと応答が返ってきました。
多分gcloud loginと利用するProject id,locationの指定が必要になると思います。
LangChainでコンテキストキャッシュを使ってみる
さて、動かし方もわかったところで本題のコンテキストキャッシュを使ってみようと思います。
前回のコードを部分的に拝借して、テキストだけでコンテキストキャッシュしてみるとこんな感じです。
何もしないと
token数: 6774 context cache利用token: 0
となっているものが、明示的にコンテキストキャッシュを入れてあげると、こんな感じになりました。
token数: 6755 context cache利用token: 6580
意図通り、ほとんどすべてのTokenがキャッシュから使われていることがわかります。
続いて、画像を含んだコンテキストキャッシュの使用例がこんな感じです。
こちらも、とうぜんですが何もしないとキャッシュが使われていません。
token数: 4443 prompt cache利用token: 0
これがキャッシュを明示的に保存すると殆どがキャッシュが使われていることがわかりました。
token数: 4403 context cache利用token: 4336
感想
以上、Geminiだけ明示的なコンテキストキャッシュが使えるので、その使い方を調べてみた次第です。 ちゃんと使えてよかったです。