Semantic Cache ist ein Tool zum Zwischenspeichern von natürlichem Text basierend auf semantischer Ähnlichkeit. Es ist ideal für jede Aufgabe, bei der Informationen auf der Grundlage ihrer Bedeutung abgefragt oder abgerufen werden müssen, beispielsweise die Klassifizierung natürlicher Sprache oder das Zwischenspeichern von KI-Antworten. Zwei Textteile können ähnlich, aber nicht identisch sein (z. B. „tolle Sehenswürdigkeiten in Spanien“ vs. „beste Sehenswürdigkeiten in Spanien“). Herkömmliches Caching erkennt diese semantische Ähnlichkeit nicht und verpasst Möglichkeiten zur Wiederverwendung.
Mit Semantic Cache können Sie:
Installieren Sie das Paket:
npm install @upstash/semantic-cache @upstash/vector
Erstellen Sie hier zunächst eine Upstash Vector-Datenbank. Sie benötigen die url
und token
-Anmeldeinformationen, um Ihren semantischen Cache zu verbinden. Wichtig: Wählen Sie beim Erstellen Ihrer Datenbank ein beliebiges vorgefertigtes Einbettungsmodell.
Notiz
Verschiedene Einbettungsmodelle eignen sich hervorragend für unterschiedliche Anwendungsfälle. Wenn beispielsweise eine niedrige Latenz Priorität hat, wählen Sie ein Modell mit einer kleineren Dimensionsgröße wie bge-small-en-v1.5
. Wenn es auf Genauigkeit ankommt, wählen Sie ein Modell mit mehr Abmessungen.
Erstellen Sie eine .env
Datei im Stammverzeichnis Ihres Projekts und fügen Sie Ihre Upstash Vector-URL und Ihr Token hinzu:
UPSTASH_VECTOR_REST_URL=https://example.upstash.io
UPSTASH_VECTOR_REST_TOKEN=your_secret_token_here
So können Sie Semantic Cache in Ihrer Node.js-Anwendung verwenden:
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
-Parameter Der Parameter minProximity
reicht von 0
bis 1
. Hier können Sie die Mindestrelevanzbewertung festlegen, um einen Cache-Treffer zu ermitteln. Je höher diese Zahl, desto ähnlicher muss Ihre Benutzereingabe dem zwischengespeicherten Inhalt sein, um einen Treffer zu erzielen. In der Praxis weist ein Wert von 0,95 auf eine sehr hohe Ähnlichkeit hin, während ein Wert von 0,75 bereits auf eine geringe Ähnlichkeit hinweist. Beispielsweise würde ein Wert von 1,00, der höchstmögliche, nur eine exakte Übereinstimmung Ihrer Benutzerabfrage und des Cache-Inhalts als Cache-Treffer akzeptieren.
Sie können Ihre Daten mit Namespaces in Partitionen unterteilen.
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" ) ;
Die folgenden Beispiele zeigen, wie Sie Semantic Cache in verschiedenen Anwendungsfällen nutzen können:
Notiz
Wir fügen nach dem Festlegen der Daten eine Verzögerung von 1 Sekunde hinzu, um Zeit für die Aktualisierung des Vektorindex zu haben. Diese Verzögerung ist notwendig, um sicherzustellen, dass die Daten zum Abruf verfügbar sind.
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?" ) ;
Hinweis: Ihr Einbettungsmodell muss die Sprachen unterstützen, die Sie verwenden möchten.
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" ) ;
Wir freuen uns über Ihre Beiträge! Wenn Sie zu diesem Projekt beitragen möchten, forken Sie bitte das Repository, nehmen Sie Ihre Änderungen vor und senden Sie eine Pull-Anfrage.
Verteilt unter der MIT-Lizenz. Weitere Informationen finden Sie unter LICENSE
.