GPTCache、LangChain、ストロングアライアンス
GPTCache入門
ChatGPTや他の大規模言語モデル(LLM)は、幅広いアプリケーション開発に使用できる信じられないほどの汎用性を持っています。しかし、LLMを使って開発されたアプリケーションの人気が高まり、トラフィックレベルが大きくなるにつれて、LLMのAPI呼び出しに関連するコストが法外に高価になることがあります。さらに、LLMサービスは、大量のリクエストを処理する際に、応答時間が遅くなることがあります。
この課題に対処するため、私たちはGPTCacheプロジェクトを立ち上げ、LLMのレスポンスを保存するためのセマンティックキャッシュの構築に取り組んでいます。
LangChain入門
大規模言語モデル(LLM)は、開発者が以前は不可能だったアプリケーションを構築することを可能にする、革新的な技術になりつつあります。しかし、単一のLLMだけに頼っていては、真にパワフルなアプリケーションを作るのは難しいことが多い。本当の力は、LLMを他の計算ソースや知識ソースと組み合わせることにあります。そこで、LangChainライブラリは、このようなタイプのアプリケーション開発を支援することを目的としています。
LangChainキャッシュの現状
GPTCache](https://zilliz.com/what-is-gptcache)を統合する前、LangChainキャッシュは文字列マッチングに基づいていました。この文字列マッチングアプローチにより、2つのリクエストが同じ文字列を持つとき、後者のリクエストはキャッシュから対応するデータを取り出すことができます。実装には Memory Cache, SQLite Cache, Redis Cache がある。
使い方はおおよそ以下の通りである:
python import langchain from langchain.cache import InMemoryCache langchain.llm_cache = InMemoryCache() llm = OpenAI(model_name="text-davinci-002", n=2, best_of=2)
// CPU時間:ユーザー14.2ミリ秒、システム4.9ミリ秒、合計19ミリ秒:4.9ミリ秒、合計:19.1ミリ秒 // ウォールタイム: 1.1 s llm("Tell me a joke")
// CPU時間: user 162 µs, sys:7 µs、合計:169 µs // ウォールタイム: 175 µs llm("Tell me a joke")
## LangChain キャッシュ解析
実行時の観点から、リクエストがキャッシュにヒットすれば、レスポンスタイムが大幅に短縮されることは明らかです。同時に、現在LLMを使用するコストは比較的高い。OpenAIやCohereのようなオンラインサービスを利用する場合、一般的にトークンによる課金が発生するか、対応するLLMモデルを自分でデプロイする必要があり、1回の推論時間はCPU、メモリ、GPUなどのコンピュータリソースの数に依存する。同時に、複数のリクエストが同時に処理される場合、コンピューティングリソースへの要求が高くなる。もしリクエストが何度もキャッシュにヒットすれば、コンピュータリソースのプレッシャーを軽減し、他のタスクにより多くのコンピューティングリソースを与えることができる。
LangChainがキャッシュにヒットする条件は、2つの質問が同一であることです。残念ながら、実際の使用においてキャッシュにヒットすることはまだ難しく、キャッシュ利用率には改善の余地があります。
## GPTCacheの統合
GPTCacheの統合はLangChainキャッシュモジュールの機能を大幅に改善し、キャッシュヒット率を向上させ、LLMの使用コストとレスポンスタイムを削減します。なぜならGPTCacheは、まず入力に対して埋め込み演算を行いベクトルを取得し、次にキャッシュストレージ内でベクトル近似探索を行うからです。検索結果を受け取った後、類似度評価を行い、設定された閾値に達した時点でリターンする。閾値を調整することで、ファジー検索結果の精度を変えることができる。
LangChainの類似性検索にGPTCacheを使用した例:
python
from gptcache import Cache
from gptcache.adapter.api import init_similar_cache
from langchain.cache import GPTCache
import hashlib
def get_hashed_name(name):
return hashlib.sha256(name.encode()).hexdigest()
def init_gptcache(cache_obj: Cache, llm: str):
hashed_llm = get_hashed_name(llm)
init_similar_cache(cache_obj=cache_obj, data_dir=f "similar_cache_{hashed_llm}")
langchain.llm_cache = GPTCache(init_gptcache)
# 初回はまだキャッシュに入っていないので、時間がかかるはずです。
# CPU時間: user 1.42 s, sys: 279 ms, total: 1.7 s
# ウォール時間: 8.44 s
llm("Tell me a joke")
# これは完全一致なので、キャッシュから見つかる
# CPU時間: user 866 ms, sys: 20 ms, 合計: 886 ms
# ウォール時間: 226 ms
llm("Tell me a joke")
# これは完全一致ではないが、意味的に距離が近いのでヒットする # CPU時間: user 853 ms sys 20 ms total 886 ms # Wall time: 226 ms llm("Tell me joke")
# CPU時間: user 853 ms, sys:14.8 ms, 合計: 868 ms
# ウォール時間: 224 ms
llm("Tell me joke")
GPT-Cacheの機能拡張を続けていますので、試す機会があれば感想を聞かせてください。GPT-Cacheを試す機会があれば、感想をお聞かせください!
参考文献
- LangChain, LLMコールをキャッシュする方法](https://python.langchain.com/v0.2/docs/integrations/llm_caching/#gptcache)
- GPTCache Usage Doc](https://github.com/zilliztech/GPTCache/blob/main/docs/usage.md)
- ChatGPTのキャッシュ](https://zilliz.com/blog/Yet-another-cache-but-for-ChatGPT)
- Webinar Recap: Boost Your LLM with Private Data Using LlamaIndex](https://zilliz.com/blog/boost-your-llm-private-data-llamaindex)
読み続けて

Zilliz Cloud Just Landed in Claude Code
Zilliz Cloud Just Landed in Claude Code - Build AI Apps without Leaving Your Terminal

My Wife Wanted Dior. I Spent $600 on Claude Code to Vibe-Code a 2M-Line Database Instead.
Write tests, not code reviews. How a test-first workflow with 6 parallel Claude Code sessions turns a 2M-line C++ codebase into a daily shipping pipeline.

OpenAI o1: What Developers Need to Know
In this article, we will talk about the o1 series from a developer's perspective, exploring how these models can be implemented for sophisticated use cases.
