Semantic Cache — инструмент для кэширования естественного текста на основе семантического сходства. Он идеально подходит для любой задачи, связанной с запросом или получением информации на основе значения, например, для классификации естественного языка или кэширования ответов ИИ. Два фрагмента текста могут быть похожими, но не идентичными (например, «отличные места в Испании, которые стоит посетить» и «лучшие места для посещения в Испании»). Традиционное кэширование не учитывает это семантическое сходство и упускает возможности повторного использования.
Семантический кэш позволяет:
Установите пакет:
npm install @upstash/semantic-cache @upstash/vector
Сначала создайте здесь базу данных Upstash Vector. Для подключения семантического кеша вам понадобятся url
и учетные данные token
. Важно: при создании базы данных выберите любую готовую модель внедрения.
Примечание
Различные модели внедрения отлично подходят для разных случаев использования. Например, если низкая задержка является приоритетом, выберите модель с меньшим размером, например bge-small-en-v1.5
. Если важна точность, выбирайте модель большего размера.
Создайте файл .env
в корневом каталоге вашего проекта и добавьте URL-адрес и токен Upstash Vector:
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
для получения дополнительной информации.