项目简介
Semantic Cache 是一种基于语义相似度来缓存自然文本的工具。它非常适合任何涉及根据含义查询或检索信息的任务,例如自然语言分类或缓存人工智能响应。两段文本可以相似但不相同(例如,“西班牙值得游览的好地方”与“西班牙值得游览的最佳地点”)。传统的缓存无法识别这种语义相似性,并且错过了重用的机会。
语义缓存允许您:
轻松将自然文本分类为预定义类别
通过缓存 AI 响应来避免冗余的LLM工作
通过使用已缓存的值响应类似查询来减少 API 延迟
亮点
使用语义相似性:按含义存储缓存条目,而不仅仅是字面字符
处理同义词:识别并处理同义词
多语言支持:跨不同语言工作(如果配置了多语言矢量模型)
复杂查询支持:理解长查询和嵌套用户查询
轻松集成:用于 Node.js 应用程序的简单 API
可定制:设置自定义接近阈值以过滤掉不太相关的结果
入门
先决条件
Upstash Vector 数据库(在此处创建一个)
安装
安装包:
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");
项目链接
https://github.com/upstash/semantic-cache
扫码加入技术交流群,备注「开发语言-城市-昵称」
合作请注明
关注「GitHubStore」公众号