Semantic Cache es una herramienta para almacenar en caché texto natural basándose en la similitud semántica. Es ideal para cualquier tarea que implique consultar o recuperar información basada en el significado, como la clasificación del lenguaje natural o el almacenamiento en caché de respuestas de IA. Dos fragmentos de texto pueden ser similares pero no idénticos (por ejemplo, "excelentes lugares para visitar en España" versus "mejores lugares para visitar en España"). El almacenamiento en caché tradicional no reconoce esta similitud semántica y pierde oportunidades de reutilización.
La caché semántica le permite:
Instale el paquete:
npm install @upstash/semantic-cache @upstash/vector
Primero, cree una base de datos Upstash Vector aquí. Necesitará la url
y las credenciales token
para conectar su caché semántica. Importante: elija cualquier modelo de incrustación prediseñado al crear su base de datos.
Nota
Los diferentes modelos de integración son excelentes para diferentes casos de uso. Por ejemplo, si la baja latencia es una prioridad, elija un modelo con un tamaño de dimensión más pequeño como bge-small-en-v1.5
. Si la precisión es importante, elija un modelo con más dimensiones.
Cree un archivo .env
en el directorio raíz de su proyecto y agregue su URL y token de Upstash Vector:
UPSTASH_VECTOR_REST_URL=https://example.upstash.io
UPSTASH_VECTOR_REST_TOKEN=your_secret_token_here
Así es como puedes usar Semantic Cache en tu aplicación 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
El parámetro minProximity
varía de 0
a 1
. Le permite definir la puntuación de relevancia mínima para determinar un acierto de caché. Cuanto mayor sea este número, más similar debe ser la entrada del usuario al contenido almacenado en caché para que sea un éxito. En la práctica, una puntuación de 0,95 indica una similitud muy alta, mientras que una puntuación de 0,75 ya indica una similitud baja. Por ejemplo, un valor de 1,00, el más alto posible, solo aceptaría una coincidencia exacta de su consulta de usuario y el contenido de la caché como un acierto de caché.
Puede separar sus datos en particiones con espacios de nombres.
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" ) ;
Los siguientes ejemplos demuestran cómo puede utilizar Semantic Cache en varios casos de uso:
Nota
Agregamos un retraso de 1 segundo después de configurar los datos para dar tiempo a que se actualice el índice del vector. Este retraso es necesario para garantizar que los datos estén disponibles para su recuperación.
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?" ) ;
Nota: Su modelo de inserción debe admitir los idiomas que desea utilizar.
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 sus contribuciones! Si desea contribuir a este proyecto, bifurque el repositorio, realice los cambios y envíe una solicitud de extracción.
Distribuido bajo la licencia MIT. Consulte LICENSE
para obtener más información.