Semantic Cache est un outil de mise en cache de texte naturel basé sur la similarité sémantique. Il est idéal pour toute tâche impliquant l'interrogation ou la récupération d'informations basées sur leur signification, comme la classification du langage naturel ou la mise en cache des réponses de l'IA. Deux morceaux de texte peuvent être similaires mais pas identiques (par exemple, « excellents endroits à visiter en Espagne » contre « meilleurs endroits à visiter en Espagne »). La mise en cache traditionnelle ne reconnaît pas cette similarité sémantique et manque des opportunités de réutilisation.
Le Cache Sémantique vous permet de :
Installez le paquet :
npm install @upstash/semantic-cache @upstash/vector
Tout d’abord, créez une base de données Upstash Vector ici. Vous aurez besoin de l' url
et des informations d'identification token
pour connecter votre cache sémantique. Important : Choisissez n'importe quel modèle d'intégration prédéfini lors de la création de votre base de données.
Note
Différents modèles d'intégration sont parfaits pour différents cas d'utilisation. Par exemple, si une faible latence est une priorité, choisissez un modèle avec une dimension plus petite comme bge-small-en-v1.5
. Si la précision est importante, choisissez un modèle avec plus de dimensions.
Créez un fichier .env
dans le répertoire racine de votre projet et ajoutez votre URL et votre jeton Upstash Vector :
UPSTASH_VECTOR_REST_URL=https://example.upstash.io
UPSTASH_VECTOR_REST_TOKEN=your_secret_token_here
Voici comment utiliser le cache sémantique dans votre application 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
Le paramètre minProximity
va de 0
à 1
. Il vous permet de définir le score de pertinence minimum pour déterminer un accès au cache. Plus ce nombre est élevé, plus votre entrée utilisateur doit être similaire au contenu mis en cache pour être un succès. En pratique, un score de 0,95 indique une similarité très élevée, tandis qu’un score de 0,75 indique déjà une faible similarité. Par exemple, une valeur de 1,00, la plus élevée possible, n'accepterait qu'une correspondance exacte de votre requête utilisateur et du contenu du cache en tant qu'accès au cache.
Vous pouvez séparer vos données en partitions avec des espaces de noms.
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" ) ;
Les exemples suivants montrent comment vous pouvez utiliser le cache sémantique dans divers cas d'utilisation :
Note
Nous ajoutons un délai d'une seconde après la définition des données pour laisser le temps à l'index vectoriel de se mettre à jour. Ce délai est nécessaire pour garantir que les données sont disponibles pour la récupération.
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?" ) ;
Remarque : Votre modèle d'intégration doit prendre en charge les langues que vous comptez utiliser.
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" ) ;
Nous apprécions vos contributions! Si vous souhaitez contribuer à ce projet, veuillez créer le référentiel, apporter vos modifications et soumettre une pull request.
Distribué sous licence MIT. Voir LICENSE
pour plus d’informations.