プロンプト・キャッシュは、IBM® Graniteモデルなどの言語モデルを操作するときに、実行されたプロンプトから生成された応答を保存して再利用する方法です。同じインプット(プロンプト)が再度発生した場合、新しいAPI呼び出しを行うのではなく、アプリケーションはプロンプト・キャッシュに以前保存した応答を検索します。
プロンプト・キャッシュは、アプリケーションにとっての一種の「記憶」だと考えてください。同じインプットに対して繰り返しリクエストを行う必要がないため、システムは以前のクエリーの結果を保持し、計算時間を節約します。
プロンプト・キャッシュは、同一の繰り返しのプロンプトに対する既存の応答を再利用することで、アプリケーション・プログラミング・インターフェース(API)呼び出しの反復を回避するため、重要です。この機能により、応答時間の短縮、アウトプットの一貫性、APIの使用量の削減が実現するため、レート制限内に収めるのに役立ちます。また、フローの拡張や停止時のレジリエンスの確保にも役立ちます。プロンプト・キャッシュは、コスト効率が高く、効率的でユーザー・フレンドリーなAIアプリケーションにとって付加価値のある重要な機能です。
watsonx.aiプロジェクトを作成するにはIBM Cloudアカウントが必要です。
Pythonバージョン3.12.7も必要です
いくつかあるツールの中から選択することもできますが、このチュートリアルでは、Jupyter Notebookを使用してIBMアカウントを設定する方法について説明します。
IBM Cloudアカウントを使用して、watsonx.aiにログインします。
watsonx.aiプロジェクトを作成します。プロジェクトIDはプロジェクト内から取得できます。「管理」タブをクリックし、次に、「一般」ページの「詳細」セクションからプロジェクトIDをコピーします。このチュートリアルではこのIDが必要になります。
Jupyter Notebookを作成します。この手順でJupyter Notebook環境が開き、このチュートリアルのコードをコピーできます。または、このノートブックをローカル・システムにダウンロードし、watsonx.aiプロジェクトにアセットとしてアップロードすることもできます。IBM Graniteに関するその他のチュートリアルを表示するには、IBM Granite Communityをご覧ください。
watsonx.aiランタイム・サービス・インスタンスを作成します(無料インスタンスであるLiteプランを選択します)。
APIキーを生成します。
watsonx.aiで作成したプロジェクトにwatsonx.aiランタイム・サービスを関連付けます。
LangChainフレームワークとWatsonxLLMと連携するにはライブラリーが必要です。まず、必要なパッケージをインストールしましょう。このチュートリアルはPython 3.12.7を使用して構築されています。
注:古いバージョンのpipを使用している場合は、コマンド「pip install --upgrade pip」を使用すると、古いバージョンと互換性がない可能性のある最新のパッケージを簡単にインストールできます。ただし、すでに最新バージョンを使用している場合、または最近パッケージをアップグレードした場合は、このコマンドをスキップしてください。
osモジュールは、プロジェクトの認証情報やAPIキーなどの環境変数にアクセスするために使用されます。
WatsonxLLMは、langchain_ibmのモジュールで、生成AIモデルからアウトプットを生成するためのIBM Watson LLMを統合します。
ChatWatsonxは、LangChainを介してIBM watsonxを使用することで、チャットベースの対話を可能にします。
SimpleDirectoryReaderは、LlamaIndexでインデックスを作成するためにディレクトリからドキュメントをロードして読み取るためのものです。
GenParamsには、Watsonxテキスト生成パラメーターを構成するためのメタデータ・キーが含まれています。
SQLiteCacheを使用すると、ローカルの.cache.db SQLiteデータベースを設定できるため、冗長なAPI呼び出しを回避し、開発とテストを加速できます。
このチュートリアルには、いくつかのライブラリーとモジュールが必要です。以下のコンポーネントを必ずインポートしてください。インストールされていない場合は、pipをクイックインストールすることで問題が解決されます。
このコードは、IBM Watson Machine Learning(WML)APIにアクセスするための認証情報を設定し、プロジェクトIDが正しく構成されていることを確認します。
このコードは、アプリケーションで使用するためにIBM Watson LLMを初期化します。
最小・最大トークン制限などのモデル・パラメーターの詳細については、こちらのドキュメンテーションを参照してください。
SQLiteCacheは、LangChainが提供する永続的なキャッシュ・ツールで、LLM呼び出しからの応答をSQLiteデータベース・ファイルに保存します。SQLiteCacheは、コストのかかる計算を保存することでCPU時間をスマートに削減します。つまり、データを再計算するのではなく、データの検索に重点を置くことができます。プロセス全体を再度行うのではなく、ディスクから結果を引き出すだけで、効率的で信頼性が高く、再利用可能になります。
上の図は、プロンプト・キャッシュで成果がディスクから即座にロードされる様子を示しています。これがなければ、すべてのクエリーの冗長な計算により時間が浪費されます。
この場合、CPUは22ミリ秒しか動作しませんでしたが、実際の経過時間は1.43秒でした。
この例では、ほとんどの時間が、インプットとアウトプットのオペレーション(ディスクの読み取りと書き込み、ネットワーク・アクセス、API呼び出しなど)の待機に費やされた可能性があることを示唆しています。
プロンプトを使用してモデルを再度実行し、応答時間を確認してみましょう。
よくわかるように、SQLiteCacheを使用すると、CPUの使用時間はわずか7.26ミリ秒ですが、ウォール・タイムは6.15秒でした。
これは、明らかに外部依存関係のブロック(サーバーからの応答待機など)を示しています。
プロンプト・キャッシュは、GPT-4oなどの大規模言語モデルへのAPIリクエストを高速化し、コストを削減します。プロンプトは、インプット・トークン、アウトプット・トークン、埋め込み、ユーザーからのメッセージ、システム・プロンプト、または関数のアウトプットなどのコンテンツをキャッシュします。これにより、新しいリビジョンのネットワーク・リクエストではなく、キャッシュされたコンテンツが使用されるようになりました。この方法により、料金体系の引き下げ、応答レイテンシーの改善、主要業績評価指標(KPI)の改善が実現します。
プロンプト・キャッシュは、チャットボット、RAGシステム、ファイン・チューニング、コード作成支援に有益です。キャッシュの読み込み、キャッシュの書き込み、システム・メッセージ、キャッシュ制御、適切な存続時間(TTL)などの機能を含む堅牢なストラテジーにより、キャッシュ・ヒット率が向上し、キャッシュ・ミス率が低下します。
同じプロンプト・トークン、プロンプト・プレフィックスを一貫して使用し、システム命令を使用することで、マルチターン会話やその後のリクエストにおける一貫したプロンプトの性能を発揮できます。PythonやSDKを使用するか、OpenAIやその他のプロバイダーを使用するかにかかわらず、プロンプト・キャッシュの仕組みを理解することで、多くのユースケースで使用するプロンプト・キャッシュを実装できるようになります。