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.
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.
Options du constructeurLien direct vers Options du constructeur
host?:
port?:
ssl?:
apiKey?:
tenant?:
database?:
headers?:
fetchOptions?:
Exécuter un serveur ChromaLien 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éthodesLien direct vers Méthodes
createIndex()Lien direct vers createindex
indexName:
dimension:
metric?:
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:
newIndexName:
upsert()Lien direct vers upsert
indexName:
vectors:
metadata?:
ids?:
documents?:
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:
queryVector:
topK?:
filter?:
includeVector?:
documentFilter?:
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:
ids?:
filter?:
includeVector?:
documentFilter?:
limit?:
offset?:
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:
Renvoie :
interface IndexStats {
dimension: number
count: number
metric: 'cosine' | 'euclidean' | 'dotproduct'
}
deleteIndex()Lien direct vers deleteindex
indexName:
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:
id?:
filter?:
update:
L’objet update peut contenir :
vector?:
metadata?:
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:
id:
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:
ids?:
filter?:
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é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>
document?: string // Chroma-specific: Original document if it was stored
vector?: number[] // Only included if includeVector is true
}
Gestion des erreursLien 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
}
}