Semantic Cache 是一種基於語意相似度來快取自然文字的工具。它非常適合任何涉及根據含義查詢或檢索資訊的任務,例如自然語言分類或快取人工智慧回應。兩段文本可以相似但不相同(例如,“西班牙值得遊覽的好地方”與“西班牙值得遊覽的最佳地點”)。傳統的快取無法識別這種語義相似性,並且錯過了重複使用的機會。
語義緩存允許您:
安裝包:
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
以了解更多資訊。