Re:ゼロから始めるML生活

どちらかといえばエミリア派です

LangChainでGeminiの明示的Context Cacheを使う

前回までプロンプトキャッシングについて調べたりコード書いたりしていました。

www.nogawanogawa.com

www.nogawanogawa.com

似たような機能で、Geminiにも明示的Context Cacheという機能があります。

ai.google.dev

公式ドキュメントにも、

  • 暗黙的なキャッシュ保存(自動、費用削減は保証されない)
  • 明示的なキャッシュ保存(手動、費用削減保証)

とあるので、コンテキストキャッシュを使って費用削減しようと思ったら、明示的にやるのが良さそうではあります。

LangChainでそれをやっている文献が見当たらなかったので、今回試しにやってみたのでそのメモです。・

LangChainでのContext Cache機能

一応LangChainに機能としてはあるみたいです。

python.langchain.com

注意点としては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だけ明示的なコンテキストキャッシュが使えるので、その使い方を調べてみた次第です。 ちゃんと使えてよかったです。