semantic cache
v1.0.5
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
了解更多信息。