Magasin de vecteurs Upstash
La classe UpstashVector propose une recherche vectorielle à l’aide d’Upstash Vector, un service de base de données vectorielle serverless qui offre la recherche de similarité vectorielle avec des capacités de filtrage des métadonnées et la prise en charge de la recherche hybride.
Options du constructeurLien direct vers Options du constructeur
url:
token:
MéthodesLien direct vers Méthodes
createIndex()Lien direct vers createindex
Remarque : cette méthode n’a aucun effet pour Upstash, car les index sont créés automatiquement.
indexName:
dimension:
metric?:
upsert()Lien direct vers upsert
indexName:
vectors:
sparseVectors?:
metadata?:
ids?:
query()Lien direct vers query
indexName:
queryVector:
sparseVector?:
topK?:
filter?:
includeVector?:
fusionAlgorithm?:
queryMode?:
listIndexes()Lien direct vers listindexes
Renvoie un tableau de noms d’index (espaces de noms) sous forme de chaînes.
describeIndex()Lien direct vers describeindex
indexName:
Renvoie :
interface IndexStats {
dimension: number
count: number
metric: 'cosine' | 'euclidean' | 'dotproduct'
}
deleteIndex()Lien direct vers deleteindex
indexName:
updateVector()Lien direct vers updatevector
indexName:
id:
update:
L’objet update peut avoir les propriétés suivantes :
vector(facultatif) : tableau de nombres représentant le nouveau vecteur dense.sparseVector(facultatif) : objet vecteur clairsemé avec les tableauxindicesetvaluespour les index hybrides.metadata(facultatif) : enregistrement de paires clé-valeur pour les métadonnées.
deleteVector()Lien direct vers deletevector
indexName:
id:
Tente de supprimer un élément de l’index indiqué à partir de son ID. Journalise un message d’erreur si la suppression échoue.
Recherche vectorielle hybrideLien direct vers Recherche vectorielle hybride
Upstash Vector prend en charge la recherche hybride, qui combine la recherche sémantique (vecteurs denses) et la recherche par mots-clés (vecteurs clairsemés) afin d’améliorer la pertinence et la précision.
Utilisation hybride de baseLien direct vers Utilisation hybride de base
import { UpstashVector } from '@mastra/upstash'
const vectorStore = new UpstashVector({
id: 'upstash-vector',
url: process.env.UPSTASH_VECTOR_URL,
token: process.env.UPSTASH_VECTOR_TOKEN,
})
// Upsert vectors with both dense and sparse components
const denseVectors = [
[0.1, 0.2, 0.3],
[0.4, 0.5, 0.6],
]
const sparseVectors = [
{ indices: [1, 5, 10], values: [0.8, 0.6, 0.4] },
{ indices: [2, 6, 11], values: [0.7, 0.5, 0.3] },
]
await vectorStore.upsert({
indexName: 'hybrid-index',
vectors: denseVectors,
sparseVectors: sparseVectors,
metadata: [{ title: 'Document 1' }, { title: 'Document 2' }],
})
// Query with hybrid search
const results = await vectorStore.query({
indexName: 'hybrid-index',
queryVector: [0.1, 0.2, 0.3],
sparseVector: { indices: [1, 5], values: [0.9, 0.7] },
topK: 10,
})
Options avancées de recherche hybrideLien direct vers Options avancées de recherche hybride
import { FusionAlgorithm, QueryMode } from '@upstash/vector'
// Query with specific fusion algorithm
const fusionResults = await vectorStore.query({
indexName: 'hybrid-index',
queryVector: [0.1, 0.2, 0.3],
sparseVector: { indices: [1, 5], values: [0.9, 0.7] },
fusionAlgorithm: FusionAlgorithm.RRF,
topK: 10,
})
// Dense-only search
const denseResults = await vectorStore.query({
indexName: 'hybrid-index',
queryVector: [0.1, 0.2, 0.3],
queryMode: QueryMode.DENSE,
topK: 10,
})
// Sparse-only search
const sparseResults = await vectorStore.query({
indexName: 'hybrid-index',
queryVector: [0.1, 0.2, 0.3], // Still required for index structure
sparseVector: { indices: [1, 5], values: [0.9, 0.7] },
queryMode: QueryMode.SPARSE,
topK: 10,
})
Mise à jour de vecteurs hybridesLien direct vers Mise à jour de vecteurs hybrides
// Update both dense and sparse components
await vectorStore.updateVector({
indexName: 'hybrid-index',
id: 'vector-id',
update: {
vector: [0.2, 0.3, 0.4],
sparseVector: { indices: [2, 7, 12], values: [0.9, 0.8, 0.6] },
metadata: { title: 'Updated Document' },
},
})
Types de réponseLien direct vers Types de réponse
Les résultats de requête sont renvoyés dans ce format :
interface QueryResult {
id: string
score: number
metadata: Record<string, any>
vector?: number[] // Only included if includeVector is true
}
Gestion des erreursLien direct vers Gestion des erreurs
Le magasin lève des erreurs typées que vous pouvez intercepter :
try {
await store.query({
indexName: 'index_name',
queryVector: queryVector,
})
} catch (error) {
if (error instanceof VectorStoreError) {
console.log(error.code) // 'connection_failed' | 'invalid_dimension' | etc
console.log(error.details) // Additional error context
}
}
Variables d’environnementLien direct vers Variables d’environnement
Variables d’environnement requises :
UPSTASH_VECTOR_URL: URL de votre base de données Upstash VectorUPSTASH_VECTOR_TOKEN: votre jeton API Upstash Vector
Exemple d’utilisationLien direct vers Exemple d’utilisation
Embeddings locaux avec fastembedLien direct vers Embeddings locaux avec fastembed
Les embeddings sont des vecteurs numériques utilisés par semanticRecall de la mémoire pour récupérer des messages associés selon leur sens (et non selon des mots-clés). Cette configuration utilise @mastra/fastembed pour générer des embeddings vectoriels.
Installez fastembed pour commencer :
- npm
- pnpm
- Yarn
- Bun
npm install @mastra/fastembed@latest
pnpm add @mastra/fastembed@latest
yarn add @mastra/fastembed@latest
bun add @mastra/fastembed@latest
Ajoutez le code suivant à votre agent :
import { Memory } from '@mastra/memory'
import { Agent } from '@mastra/core/agent'
import { UpstashStore, UpstashVector } from '@mastra/upstash'
import { fastembed } from '@mastra/fastembed'
export const upstashAgent = new Agent({
id: 'upstash-agent',
name: 'Upstash Agent',
instructions:
'You are an AI agent with the ability to automatically recall memories from previous interactions.',
model: 'openai/gpt-5.6-sol',
memory: new Memory({
storage: new UpstashStore({
id: 'upstash-agent-storage',
url: process.env.UPSTASH_REDIS_REST_URL!,
token: process.env.UPSTASH_REDIS_REST_TOKEN!,
}),
vector: new UpstashVector({
id: 'upstash-agent-vector',
url: process.env.UPSTASH_VECTOR_REST_URL!,
token: process.env.UPSTASH_VECTOR_REST_TOKEN!,
}),
embedder: fastembed,
options: {
lastMessages: 10,
semanticRecall: {
topK: 3,
messageRange: 2,
},
},
}),
})