Base vectorielle Couchbase
La classe CouchbaseVector fournit une recherche vectorielle à l’aide de Couchbase Vector Search. Elle permet d’effectuer efficacement des recherches de similarité et un filtrage des métadonnées dans vos collections Couchbase.
PrérequisLien direct vers Prérequis
- Couchbase Server 7.6.4 ou version ultérieure, ou un cluster Capella compatible
- Service Search activé sur votre déploiement Couchbase
InstallationLien direct vers Installation
- npm
- pnpm
- Yarn
- Bun
npm install @mastra/couchbase@latest
pnpm add @mastra/couchbase@latest
yarn add @mastra/couchbase@latest
bun add @mastra/couchbase@latest
Exemple d’utilisationLien direct vers Exemple d’utilisation
import { CouchbaseVector } from '@mastra/couchbase'
const store = new CouchbaseVector({
id: 'couchbase-vector',
connectionString: process.env.COUCHBASE_CONNECTION_STRING,
username: process.env.COUCHBASE_USERNAME,
password: process.env.COUCHBASE_PASSWORD,
bucketName: process.env.COUCHBASE_BUCKET,
scopeName: process.env.COUCHBASE_SCOPE,
collectionName: process.env.COUCHBASE_COLLECTION,
})
Options du constructeurLien direct vers Options du constructeur
id:
connectionString:
username:
password:
bucketName:
scopeName:
collectionName:
options?:
MéthodesLien direct vers Méthodes
createIndex()Lien direct vers createindex
Crée un nouvel index vectoriel dans Couchbase.
La création d’un index est asynchrone. Après avoir appelé createIndex, attendez un certain temps (généralement 1 à 5 secondes pour les petits jeux de données, davantage pour les plus volumineux) avant d’effectuer une requête. En production, mettez en place une interrogation périodique de l’état de l’index au lieu d’utiliser des délais fixes.
indexName:
dimension:
metric?:
upsert()Lien direct vers upsert
Ajoute ou met à jour des vecteurs et leurs métadonnées dans la collection.
Vous pouvez upserter des données avant ou après la création de l’index. La méthode upsert ne nécessite pas que l’index existe. Couchbase autorise plusieurs index Search sur une même collection.
indexName:
vectors:
metadata?:
ids?:
query()Lien direct vers query
Recherche des vecteurs similaires.
Les paramètres filter et includeVector ne sont actuellement pas pris en charge. Le filtrage doit être effectué côté client après la récupération des résultats, ou directement à l’aide des fonctionnalités Search du SDK Couchbase. Pour récupérer le vecteur d’embedding, récupérez le document complet à partir de son ID avec le SDK Couchbase.
indexName:
queryVector:
topK?:
filter?:
includeVector?:
minScore?:
describeIndex()Lien direct vers describeindex
Renvoie des informations sur l’index.
indexName:
Renvoie :
interface IndexStats {
dimension: number
count: number
metric: 'cosine' | 'euclidean' | 'dotproduct'
}
deleteIndex()Lien direct vers deleteindex
Supprime un index et toutes ses données.
indexName:
listIndexes()Lien direct vers listindexes
Répertorie tous les index vectoriels du bucket Couchbase.
Renvoie : Promise<string[]>
updateVector()Lien direct vers updatevector
Met à jour une entrée vectorielle donnée à partir de son ID avec de nouvelles données vectorielles et/ou métadonnées. Les mises à jour fondées sur des filtres ne sont pas encore implémentées pour Couchbase.
indexName:
id:
update:
deleteVector()Lien direct vers deletevector
Supprime de l’index un seul vecteur à partir de son ID.
indexName:
id:
deleteVectors()Lien direct vers deletevectors
Supprime plusieurs vecteurs à partir de leurs ID. La suppression fondée sur des filtres n’est pas encore implémentée pour Couchbase.
indexName:
ids:
disconnect()Lien direct vers disconnect
Ferme la connexion du client Couchbase. Doit être appelée lorsque vous avez fini d’utiliser la base vectorielle.
Types de réponseLien direct vers Types de réponse
Les résultats de la 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
La base vectorielle déclenche des erreurs typées qui peuvent être interceptées :
try {
await store.query({
indexName: 'my_index',
queryVector: queryVector,
})
} catch (error) {
// Handle specific error cases
if (error.message.includes('Invalid index name')) {
console.error(
'Index name must start with a letter or underscore and contain only valid characters.',
)
} else if (error.message.includes('Index not found')) {
console.error('The specified index does not exist')
} else {
console.error('Vector store error:', error.message)
}
}
RemarquesLien direct vers Remarques
- Précaution concernant la suppression des index : la suppression d’un index Search ne supprime pas les vecteurs ou documents de la collection Couchbase associée. Les données subsistent tant qu’elles ne sont pas explicitement supprimées.
- Autorisations requises : l’utilisateur Couchbase doit être autorisé à se connecter, à lire et écrire des documents dans la collection cible (rôle
kv) ainsi qu’à gérer les index Search (rôlesearch_adminsur le bucket/scope concerné). - Détails de la définition de l’index et structure des documents : la méthode
createIndexconstruit une définition d’index Search qui indexe le champembedding(en tant que typevector) et le champcontent(en tant que typetext), en ciblant les documents de la valeurscopeName.collectionNameindiquée. Chaque document stocke le vecteur dans le champembeddinget les métadonnées dans le champmetadata. Simetadatacontient une propriététext, sa valeur est également copiée dans un champcontentde niveau supérieur, indexé pour la recherche textuelle. - Réplication et durabilité : envisagez d’utiliser les fonctionnalités intégrées de réplication et de persistance de Couchbase pour assurer la durabilité des données. Surveillez régulièrement les statistiques des index afin de garantir l’efficacité des recherches.
LimitationsLien direct vers Limitations
- Les délais de création des index peuvent empêcher d’effectuer immédiatement des requêtes après leur création.
- La dimension des vecteurs n’est pas strictement imposée lors de l’ingestion (une incompatibilité de dimension provoquera une erreur lors de la requête).
- L’insertion de vecteurs et les mises à jour des index sont cohérentes à terme. Une cohérence forte n’est pas garantie immédiatement après les écritures.