Aller au contenu principal

Magasin vectoriel Chroma

La classe ChromaVector fournit une recherche vectorielle à l’aide de Chroma, une base de données open source d’embeddings. Elle offre une recherche vectorielle efficace avec filtrage des métadonnées et capacités de recherche hybride.

info
Chroma Cloud

Chroma Cloud alimente la recherche vectorielle et la recherche en texte intégral sans serveur. Le service est extrêmement rapide, économique, à grande capacité et simple à utiliser. Créez une base de données et essayez-le en moins de 30 secondes grâce à 5 $ de crédits offerts.

Démarrer avec Chroma Cloud

Options du constructeur
Lien direct vers Options du constructeur

host?:

string
Adresse hôte du serveur Chroma. Utilise 'localhost' par défaut.

port?:

number
Numéro de port du serveur Chroma. Utilise 8000 par défaut.

ssl?:

boolean
Indique s’il faut utiliser SSL/HTTPS pour les connexions. Utilise false par défaut.

apiKey?:

string
Clé API Chroma Cloud.

tenant?:

string
Nom du locataire du serveur Chroma auquel se connecter. Utilise 'default_tenant' par défaut pour Chroma à nœud unique. Résolu automatiquement pour les utilisateurs de Chroma Cloud à partir de la clé API fournie.

database?:

string
Nom de la base de données à laquelle se connecter. Utilise 'default_database' par défaut pour Chroma à nœud unique. Résolu automatiquement pour les utilisateurs de Chroma Cloud à partir de la clé API fournie.

headers?:

Record<string, any>
En-têtes HTTP supplémentaires à envoyer avec les requêtes.

fetchOptions?:

RequestInit
Options fetch supplémentaires pour les requêtes HTTP.

Exécuter un serveur Chroma
Lien direct vers Exécuter un serveur Chroma

Si vous utilisez Chroma Cloud, fournissez au constructeur ChromaVector votre clé API, votre locataire et le nom de votre base de données.

Lorsque vous installez le package @mastra/chroma, vous accédez à la CLI Chroma, qui peut les définir comme variables d’environnement : chroma db connect [DB-NAME] --env-file.

Sinon, vous disposez de plusieurs options pour configurer votre serveur Chroma à nœud unique :

  • Exécutez-en un localement avec la CLI Chroma : chroma run. Vous trouverez davantage d’options de configuration dans la documentation Chroma.
  • Exécutez-le sur Docker avec l’image Chroma officielle.
  • Déployez votre propre serveur Chroma chez le fournisseur de votre choix. Chroma propose des modèles d’exemple pour AWS, Azure et GCP.

Méthodes
Lien direct vers Méthodes

createIndex()
Lien direct vers createindex

indexName:

string
Nom de l’index à créer.

dimension:

number
Dimension du vecteur (doit correspondre à votre modèle d’embedding).

metric?:

'cosine' | 'euclidean' | 'dotproduct'
= cosine
Métrique de distance pour la recherche de similarité.

forkIndex()
Lien direct vers forkindex

Remarque : la duplication n’est prise en charge que dans Chroma Cloud, ou si vous déployez votre propre Chroma OSS distribué.

forkIndex vous permet de dupliquer instantanément un index Chroma existant. Les opérations sur l’index dupliqué n’affectent pas l’original. Pour en savoir plus, consultez la documentation Chroma.

indexName:

string
Nom de l’index à dupliquer.

newIndexName:

string
Nom de l’index dupliqué.

upsert()
Lien direct vers upsert

indexName:

string
Nom de l’index dans lequel effectuer l’upsert.

vectors:

number[][]
Tableau de vecteurs d’embedding.

metadata?:

Record<string, any>[]
Métadonnées de chaque vecteur.

ids?:

string[]
ID de vecteurs facultatifs (générés automatiquement s’ils ne sont pas fournis).

documents?:

string[]
Spécifique à Chroma : documents texte d’origine associés aux vecteurs.

query()
Lien direct vers query

Interroge un index à l’aide d’un queryVector. Renvoie un tableau d’enregistrements sémantiquement similaires, classés par distance par rapport au queryVector. Chaque enregistrement a la forme suivante :

{
id: string;
score: number;
document?: string;
metadata?: Record<string, string | number | boolean>;
embedding?: number[]
}

Vous pouvez également fournir la forme de vos métadonnées à un appel query pour l’inférence de type : query<T>().

indexName:

string
Nom de l’index à interroger.

queryVector:

number[]
Vecteur de requête servant à trouver des vecteurs similaires.

topK?:

number
= 10
Nombre de résultats à renvoyer.

filter?:

Record<string, any>
Filtres de métadonnées pour la requête.

includeVector?:

boolean
= false
Indique s’il faut inclure les vecteurs dans les résultats.

documentFilter?:

Record<string, any>
Spécifique à Chroma : filtre à appliquer au contenu du document.

get()
Lien direct vers get

Obtient des enregistrements de votre index Chroma par ID, métadonnées et filtres de documents. Renvoie un tableau d’enregistrements de la forme suivante :

{
id: string;
document?: string;
metadata?: Record<string, string | number | boolean>;
embedding?: number[]
}

Vous pouvez également fournir la forme de vos métadonnées à un appel get pour l’inférence de type : get<T>().

indexName:

string
Nom de l’index à interroger.

ids?:

string[]
Liste des ID d’enregistrements à renvoyer. Si elle n’est pas fournie, tous les enregistrements sont renvoyés.

filter?:

Record<string, any>
Filtres de métadonnées.

includeVector?:

boolean
= false
Indique s’il faut inclure les vecteurs dans les résultats.

documentFilter?:

Record<string, any>
Spécifique à Chroma : filtre à appliquer au contenu du document.

limit?:

number
= 100
Nombre maximal d’enregistrements à renvoyer.

offset?:

number
0
Décalage des enregistrements à renvoyer. À utiliser avec limit pour paginer les résultats.

listIndexes()
Lien direct vers listindexes

Renvoie un tableau de noms d’index sous forme de chaînes.

describeIndex()
Lien direct vers describeindex

indexName:

string
Nom de l’index à décrire.

Renvoie :

interface IndexStats {
dimension: number
count: number
metric: 'cosine' | 'euclidean' | 'dotproduct'
}

deleteIndex()
Lien direct vers deleteindex

indexName:

string
Nom de l’index à supprimer.

updateVector()
Lien direct vers updatevector

Met à jour un seul vecteur par ID ou filtre de métadonnées. Vous devez fournir id ou filter, mais pas les deux.

indexName:

string
Nom de l’index qui contient le vecteur à mettre à jour.

id?:

string
ID du vecteur à mettre à jour (mutuellement exclusif avec filter).

filter?:

Record<string, any>
Filtre de métadonnées permettant d’identifier le ou les vecteurs à mettre à jour (mutuellement exclusif avec id).

update:

object
Paramètres de mise à jour.

L’objet update peut contenir :

vector?:

number[]
Nouveau vecteur qui remplace le vecteur existant.

metadata?:

Record<string, any>
Nouvelles métadonnées qui remplacent les métadonnées existantes.

Exemple :

// Update by ID
await vectorStore.updateVector({
indexName: 'docs',
id: 'vec_123',
update: { metadata: { status: 'reviewed' } },
})

// Update by filter
await vectorStore.updateVector({
indexName: 'docs',
filter: { source_id: 'manual.pdf' },
update: { metadata: { version: 2 } },
})

deleteVector()
Lien direct vers deletevector

indexName:

string
Nom de l’index qui contient le vecteur à supprimer.

id:

string
ID du vecteur à supprimer.

deleteVectors()
Lien direct vers deletevectors

Supprime plusieurs vecteurs par ID ou filtre de métadonnées. La méthode prend en charge la suppression en masse et la gestion des vecteurs par source. Vous devez fournir ids ou filter, mais pas les deux.

indexName:

string
Nom de l’index qui contient les vecteurs à supprimer.

ids?:

string[]
Tableau des ID de vecteurs à supprimer (mutuellement exclusif avec filter).

filter?:

Record<string, any>
Filtre de métadonnées permettant d’identifier les vecteurs à supprimer (mutuellement exclusif avec ids).

Exemple :

// Delete all chunks from a document
await vectorStore.deleteVectors({
indexName: 'docs',
filter: { source_id: 'manual.pdf' },
})

// Delete multiple vectors by ID
await vectorStore.deleteVectors({
indexName: 'docs',
ids: ['vec_1', 'vec_2', 'vec_3'],
})

// Delete old temporary documents
await vectorStore.deleteVectors({
indexName: 'docs',
filter: {
$and: [{ bucket: 'temp' }, { indexed_at: { $lt: '2025-01-01' } }],
},
})

Types de réponse
Lien 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>
document?: string // Chroma-specific: Original document if it was stored
vector?: number[] // Only included if includeVector is true
}

Gestion des erreurs
Lien direct vers Gestion des erreurs

Le magasin lève des erreurs typées qui peuvent être interceptées :

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
}
}