効率的なLLMアプリケーションの構築のためにLangChainを使用してプロンプト・キャッシュを実装

著者

Shalini Harkar

Lead AI Advocate

プロンプト・キャッシュとは

プロンプト・キャッシュは、IBM® Graniteモデルなどの言語モデルを操作するときに、実行されたプロンプトから生成された応答を保存して再利用する方法です。同じインプット(プロンプト)が再度発生した場合、新しいAPI呼び出しを行うのではなく、アプリケーションはプロンプト・キャッシュに以前保存した応答を検索します。

プロンプト・キャッシュは、アプリケーションにとっての一種の「記憶」だと考えてください。同じインプットに対して繰り返しリクエストを行う必要がないため、システムは以前のクエリーの結果を保持し、計算時間を節約します。

重要な理由

プロンプト・キャッシュは、同一の繰り返しのプロンプトに対する既存の応答を再利用することで、アプリケーション・プログラミング・インターフェース(API)呼び出しの反復を回避するため、重要です。この機能により、応答時間の短縮、アウトプットの一貫性、APIの使用量の削減が実現するため、レート制限内に収めるのに役立ちます。また、フローの拡張や停止時のレジリエンスの確保にも役立ちます。プロンプト・キャッシュは、コスト効率が高く、効率的でユーザー・フレンドリーなAIアプリケーションにとって付加価値のある重要な機能です。

前提条件

  1. watsonx.aiプロジェクトを作成するにはIBM Cloudアカウントが必要です。

  2. Pythonバージョン3.12.7も必要です

ステップ

ステップ1:環境を設定する

いくつかあるツールの中から選択することもできますが、このチュートリアルでは、Jupyter Notebookを使用してIBMアカウントを設定する方法について説明します。

  1. IBM Cloudアカウントを使用して、watsonx.aiにログインします。

  2. watsonx.aiプロジェクトを作成します。プロジェクトIDはプロジェクト内から取得できます。「管理」タブをクリックし、次に、「一般」ページの「詳細」セクションからプロジェクトIDをコピーします。このチュートリアルではこのIDが必要になります。

  3. Jupyter Notebookを作成します。この手順でJupyter Notebook環境が開き、このチュートリアルのコードをコピーできます。または、このノートブックをローカル・システムにダウンロードし、watsonx.aiプロジェクトにアセットとしてアップロードすることもできます。IBM Graniteに関するその他のチュートリアルを表示するには、IBM Granite Communityをご覧ください。

ステップ2:watsonx.aiランタイムのインスタンスとAPIキーを設定する

  1. watsonx.aiランタイム・サービス・インスタンスを作成します(無料インスタンスであるLiteプランを選択します)。

  2. APIキーを生成します。

  3. watsonx.aiで作成したプロジェクトにwatsonx.aiランタイム・サービスを関連付けます。

ステップ3:パッケージをインストールする

LangChainフレームワークとWatsonxLLMと連携するにはライブラリーが必要です。まず、必要なパッケージをインストールしましょう。このチュートリアルはPython 3.12.7を使用して構築されています。

注:古いバージョンのpipを使用している場合は、コマンド「pip install --upgrade pip」を使用すると、古いバージョンと互換性がない可能性のある最新のパッケージを簡単にインストールできます。ただし、すでに最新バージョンを使用している場合、または最近パッケージをアップグレードした場合は、このコマンドをスキップしてください。

!pip install -q langchain langchain-ibm langchain_experimental langchain-text-splitters langchain_chroma transformers bs4 langchain_huggingface sentence-transformers

ステップ4:必要なライブラリーをインポートする

osモジュールは、プロジェクトの認証情報やAPIキーなどの環境変数にアクセスするために使用されます。

WatsonxLLMは、langchain_ibmのモジュールで、生成AIモデルからアウトプットを生成するためのIBM Watson LLMを統合します。

ChatWatsonxは、LangChainを介してIBM watsonxを使用することで、チャットベースの対話を可能にします。

SimpleDirectoryReaderは、LlamaIndexでインデックスを作成するためにディレクトリからドキュメントをロードして読み取るためのものです。

GenParamsには、Watsonxテキスト生成パラメーターを構成するためのメタデータ・キーが含まれています。

SQLiteCacheを使用すると、ローカルの.cache.db SQLiteデータベースを設定できるため、冗長なAPI呼び出しを回避し、開発とテストを加速できます。

このチュートリアルには、いくつかのライブラリーとモジュールが必要です。以下のコンポーネントを必ずインポートしてください。インストールされていない場合は、pipをクイックインストールすることで問題が解決されます。

import os
import getpass
import requests
import random
import json
from typing import Dict, List
from langchain_ibm import WatsonxLLM
from ibm_watsonx_ai.metanames import GenTextParamsMetaNames as GenParams
from langchain_ibm import WatsonxLLM
from langchain_ibm import ChatWatsonx
from llama_index.core import SimpleDirectoryReader

ステップ5:テキスト・データを読み取る

from llama_index.core import SimpleDirectoryReader

documents = SimpleDirectoryReader(
input_files=["~/Artificial Intelligence/Generative_AI/files/FIle2.txt"],
).load_data()

document_text = documents[0].text
print(document_text[:200] + "...")

ステップ6:認証情報を設定する

このコードは、IBM Watson Machine Learning(WML)APIにアクセスするための認証情報を設定し、プロジェクトIDが正しく構成されていることを確認します。

  • ディクショナリ認証情報は、WMLサービスのURLAPIキーを使用して作成されます。機密情報の漏洩を避けるため、APIキーはgetpass.getpassを使用して安全に収集されます。
  • コードは、os.environを使用して環境変数からPROJECT_IDを取得しようとします。PROJECT_IDが見つからない場合、ユーザーはインプットにより手動で入力するよう求められます。
credentials = {
"url": "https://us-south.ml.cloud.ibm.com", # Replace with the correct region if needed
"apikey": getpass.getpass("Please enter your WML API key (hit enter): ")
}

# Set up project_id
try:
project_id = os.environ["PROJECT_ID"]
except KeyError:
project_id = input("Please enter your project_id (hit enter): ")

ステップ7:大規模言語モデルを初期化する

このコードは、アプリケーションで使用するためにIBM Watson LLMを初期化します。

  1. このコードは、指示ベースの生成AIタスク用に設計されたibm/granite-3-8b-instructモデル(Granite-3.1-8B-Instruct)を使用して、WatsonxLLMのインスタンスを作成します。
  2. 以前に設定した認証情報のurl、apikey、project_idの値が、認証のために渡され、IBM Watson LLMサービスに接続されます。
  3. max_new_tokensパラメーターを設定して、各応答でモデルが生成するトークンの数(この場合は2,000トークン)を制限します。

最小・最大トークン制限などのモデル・パラメーターの詳細については、こちらのドキュメンテーションを参照してください。

llm = WatsonxLLM(
model_id= "ibm/granite-3-8b-instruct",
url=URL,
apikey=WATSONX_APIKEY,
project_id=WATSONX_PROJECT_ID,
params={
GenParams.DECODING_METHOD: "greedy",
GenParams.TEMPERATURE: 0,
GenParams.MIN_NEW_TOKENS: 5,
GenParams.MAX_NEW_TOKENS: 2000,
GenParams.REPETITION_PENALTY:1.2,
GenParams.STOP_SEQUENCES: ["\n\n"]
}
)

ステップ8:LLM応答を高速化するためにSQLiteキャッシュを設定する

SQLiteCacheは、LangChainが提供する永続的なキャッシュ・ツールで、LLM呼び出しからの応答をSQLiteデータベース・ファイルに保存します。SQLiteCacheは、コストのかかる計算を保存することでCPU時間をスマートに削減します。つまり、データを再計算するのではなく、データの検索に重点を置くことができます。プロセス全体を再度行うのではなく、ディスクから結果を引き出すだけで、効率的で信頼性が高く、再利用可能になります。

プロンプト・キャッシュのワークフロー

上の図は、プロンプト・キャッシュで成果がディスクから即座にロードされる様子を示しています。これがなければ、すべてのクエリーの冗長な計算により時間が浪費されます。

from langchain.cache import SQLiteCache
from langchain.globals import set_llm_cache
set_llm_cache(SQLiteCache(database_path=".langchain.db"))
%%time
prompt = "System: You are a helpful assistant.\nUser: Why did Paul Graham start YC?\nAssistant:"
resp = llm.invoke(prompt)
print(resp)

この場合、CPUは22ミリ秒しか動作しませんでしたが、実際の経過時間は1.43秒でした。

この例では、ほとんどの時間が、インプットとアウトプットのオペレーション(ディスクの読み取りと書き込み、ネットワーク・アクセス、API呼び出しなど)の待機に費やされた可能性があることを示唆しています。

プロンプトを使用してモデルを再度実行し、応答時間を確認してみましょう。

%%time
llm.predict(resp)

よくわかるように、SQLiteCacheを使用すると、CPUの使用時間はわずか7.26ミリ秒ですが、ウォール・タイムは6.15秒でした。

これは、明らかに外部依存関係のブロック(サーバーからの応答待機など)を示しています。

まとめ

プロンプト・キャッシュは、GPT-4oなどの大規模言語モデルへのAPIリクエストを高速化し、コストを削減します。プロンプトは、インプット・トークン、アウトプット・トークン、埋め込み、ユーザーからのメッセージ、システム・プロンプト、または関数のアウトプットなどのコンテンツをキャッシュします。これにより、新しいリビジョンのネットワーク・リクエストではなく、キャッシュされたコンテンツが使用されるようになりました。この方法により、料金体系の引き下げ、応答レイテンシーの改善、主要業績評価指標(KPI)の改善が実現します。

プロンプト・キャッシュは、チャットボット、RAGシステム、ファイン・チューニング、コード作成支援に有益です。キャッシュの読み込み、キャッシュの書き込み、システム・メッセージ、キャッシュ制御、適切な存続時間(TTL)などの機能を含む堅牢なストラテジーにより、キャッシュ・ヒット率が向上し、キャッシュ・ミス率が低下します。

同じプロンプト・トークン、プロンプト・プレフィックスを一貫して使用し、システム命令を使用することで、マルチターン会話やその後のリクエストにおける一貫したプロンプトの性能を発揮できます。PythonやSDKを使用するか、OpenAIやその他のプロバイダーを使用するかにかかわらず、プロンプト・キャッシュの仕組みを理解することで、多くのユースケースで使用するプロンプト・キャッシュを実装できるようになります。

関連ソリューション
IBM watsonx.ai

AI開発者向けの次世代エンタープライズ・スタジオであるIBM watsonx.aiを使用して、生成AI、基盤モデル、機械学習機能をトレーニング、検証、チューニング、導入しましょう。わずかなデータとわずかな時間でAIアプリケーションを構築できます。

watsonx.aiの詳細はこちら
人工知能ソリューション

IBMの業界をリードするAIの専門知識とソリューションのポートフォリオを活用して、AIをビジネスの業務に利用しましょう。

AIソリューションの詳細はこちら
人工知能(AI)コンサルティングおよびサービス

IBMコンサルティングAIサービスは、企業がAIをトランスフォーメーションに活用する方法を再考するのに役立ちます。

AIサービスの詳細はこちら
次のステップ

AIを使用することで、IBM Concertはお客様のオペレーションに関する重要な洞察を明らかにし、改善のためのアプリケーション固有の推奨事項を提供します。Concertがどのようにビジネスを前進させることができるかをご覧ください。

Concertの詳細はこちら ビジネス・プロセス自動化ソリューションの詳細はこちら