Semantic Cache é uma ferramenta para armazenar texto natural em cache com base na similaridade semântica. É ideal para qualquer tarefa que envolva consulta ou recuperação de informações com base no significado, como classificação de linguagem natural ou armazenamento em cache de respostas de IA. Dois trechos de texto podem ser semelhantes, mas não idênticos (por exemplo, “ótimos lugares para visitar na Espanha” versus “melhores lugares para visitar na Espanha”). O cache tradicional não reconhece essa semelhança semântica e perde oportunidades de reutilização.
O cache semântico permite:
Instale o pacote:
npm install @upstash/semantic-cache @upstash/vector
Primeiro, crie um banco de dados Upstash Vector aqui. Você precisará do url
e das credenciais token
para conectar seu cache semântico. Importante: Escolha qualquer modelo de incorporação pré-fabricado ao criar seu banco de dados.
Observação
Diferentes modelos de incorporação são ótimos para diferentes casos de uso. Por exemplo, se a baixa latência for uma prioridade, escolha um modelo com uma dimensão menor, como bge-small-en-v1.5
. Se a precisão for importante, escolha um modelo com mais dimensões.
Crie um arquivo .env
no diretório raiz do seu projeto e adicione seu URL e token do Upstash Vector:
UPSTASH_VECTOR_REST_URL=https://example.upstash.io
UPSTASH_VECTOR_REST_TOKEN=your_secret_token_here
Veja como você pode usar o cache semântico em seu aplicativo 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
O parâmetro minProximity
varia de 0
a 1
. Ele permite definir a pontuação mínima de relevância para determinar um acerto de cache. Quanto maior esse número, mais semelhante a entrada do usuário deve ser com o conteúdo em cache para ser um sucesso. Na prática, uma pontuação de 0,95 indica uma similaridade muito alta, enquanto uma pontuação de 0,75 já indica uma similaridade baixa. Por exemplo, um valor de 1,00, o mais alto possível, aceitaria apenas uma correspondência exata da consulta do usuário e do conteúdo do cache como uma ocorrência no cache.
Você pode separar seus dados em partições com namespaces.
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" ) ;
Os exemplos a seguir demonstram como você pode utilizar o Cache Semântico em vários casos de uso:
Observação
Adicionamos um atraso de 1 segundo após definir os dados para permitir a atualização do índice do vetor. Esse atraso é necessário para garantir que os dados estejam disponíveis para recuperação.
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?" ) ;
Observação: seu modelo de incorporação precisa oferecer suporte aos idiomas que você pretende usar.
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" ) ;
Agradecemos suas contribuições! Se você quiser contribuir com este projeto, bifurque o repositório, faça suas alterações e envie uma solicitação pull.
Distribuído sob a licença MIT. Consulte LICENSE
para obter mais informações.