セマンティック キャッシュは、セマンティックな類似性に基づいて自然テキストをキャッシュするツールです。自然言語分類や AI 応答のキャッシュなど、意味に基づいて情報をクエリまたは取得するタスクに最適です。 2 つのテキストは似ていても同一ではありません (例: 「スペインでチェックアウトするのに最適な場所」と「スペインで訪れるのに最適な場所」)。従来のキャッシュでは、この意味上の類似性が認識されず、再利用の機会が失われます。
セマンティック キャッシュを使用すると、次のことが可能になります。
パッケージをインストールします。
npm install @upstash/semantic-cache @upstash/vector
まず、ここで Upstash Vector データベースを作成します。セマンティック キャッシュに接続するには、 url
とtoken
資格情報が必要です。重要: データベースを作成するときに、事前に作成された埋め込みモデルを選択します。
注記
さまざまな埋め込みモデルは、さまざまなユースケースに最適です。たとえば、低レイテンシが優先される場合は、 bge-small-en-v1.5
のような、より小さいディメンション サイズのモデルを選択します。精度が重要な場合は、より多くの寸法を持つモデルを選択してください。
プロジェクトのルート ディレクトリに.env
ファイルを作成し、Upstash Vector URL とトークンを追加します。
UPSTASH_VECTOR_REST_URL=https://example.upstash.io
UPSTASH_VECTOR_REST_TOKEN=your_secret_token_here
Node.js アプリケーションでセマンティック キャッシュを使用する方法は次のとおりです。
import { SemanticCache } from "@upstash/semantic-cache" ;
import { Index } from "@upstash/vector" ;
// ? your vector database
const index = new Index ( ) ;
// ? your semantic cache
const semanticCache = new SemanticCache ( { index , minProximity : 0.95 } ) ;
async function runDemo ( ) {
await semanticCache . set ( "Capital of Turkey" , "Ankara" ) ;
await delay ( 1000 ) ;
// ? outputs: "Ankara"
const result = await semanticCache . get ( "What is Turkey's capital?" ) ;
console . log ( result ) ;
}
function delay ( ms : number ) {
return new Promise ( ( resolve ) => setTimeout ( resolve , ms ) ) ;
}
runDemo ( ) ;
minProximity
パラメータminProximity
パラメーターの範囲は0
~ 1
です。これにより、キャッシュ ヒットを決定するための最小関連性スコアを定義できます。この数値が大きいほど、ヒットするにはユーザー入力がキャッシュされたコンテンツとより類似している必要があります。実際には、スコア 0.95 は類似性が非常に高いことを示しますが、スコア 0.75 はすでに類似性が低いことを示しています。たとえば、可能な最大値である 1.00 は、ユーザー クエリとキャッシュ コンテンツの完全一致のみをキャッシュ ヒットとして受け入れます。
名前空間を使用してデータをパーティションに分離できます。
import { SemanticCache } from "@upstash/semantic-cache" ;
import { Index } from "@upstash/vector" ;
// ? your vector database
const index = new Index ( ) ;
// ? your semantic cache
const semanticCache = new SemanticCache ( { index , minProximity : 0.95 , namespace : "user1" } ) ;
await semanticCache . set ( "Capital of Turkey" , "Ankara" ) ;
次の例は、さまざまなユースケースでセマンティック キャッシュを利用する方法を示しています。
注記
データの設定後に 1 秒の遅延を追加して、ベクトル インデックスが更新されるまでの時間を確保します。この遅延は、データを確実に取得できるようにするために必要です。
await semanticCache . set ( "Capital of France" , "Paris" ) ;
await delay ( 1000 ) ;
// ? outputs "Paris"
const result = await semanticCache . get ( "What's the capital of France?" ) ;
await semanticCache . set ( "largest city in USA by population" , "New York" ) ;
await delay ( 1000 ) ;
// ? outputs "New York"
const result = await semanticCache . get ( "which is the most populated city in the USA?" ) ;
注: 埋め込みモデルは、使用する予定の言語をサポートする必要があります。
await semanticCache . set ( "German Chancellor" , "Olaf Scholz" ) ;
await delay ( 1000 ) ;
// ? "Who is the chancellor of Germany?" -> outputs "Olaf Scholz"
const result = await semanticCache . get ( "Wer ist der Bundeskanzler von Deutschland?" ) ;
await semanticCache . set ( "year in which the Berlin wall fell" , "1989" ) ;
await delay ( 1000 ) ;
// ? outputs "1989"
const result = await semanticCache . get ( "what's the year the Berlin wall destroyed?" ) ;
await semanticCache . set ( "the chemical formula for water" , "H2O" ) ;
await semanticCache . set ( "the healthiest drink on a hot day" , "water" ) ;
await delay ( 1000 ) ;
// ? outputs "water"
const result = await semanticCache . get ( "what should i drink when it's hot outside?" ) ;
// ? outputs "H2O"
const result = await semanticCache . get ( "tell me water's chemical formula" ) ;
皆様のご貢献に感謝いたします。このプロジェクトに貢献したい場合は、リポジトリをフォークして変更を加え、プル リクエストを送信してください。
MIT ライセンスに基づいて配布されます。詳細については、 LICENSE
を参照してください。