跳到主要内容
非官方简体中文翻译,内容版权归 Mastra 所有,遵循 Apache-2.0 许可。

Chroma vector store

The ChromaVector class provides vector search using Chroma, an open-source embedding database. It offers efficient vector search with metadata filtering and hybrid search capabilities.

备注
Chroma Cloud

Chroma Cloud powers serverless vector and full-text search. It's extremely fast, cost-effective, high-capacity, and painless. Create a DB and try it out in under 30 seconds with $5 of free credits.

Get started with Chroma Cloud

Constructor options
Constructor options的直接链接

host?:

string
The host address of the Chroma server. Defaults to 'localhost'

port?:

number
The port number of the Chroma server. Defaults to 8000

ssl?:

boolean
Whether to use SSL/HTTPS for connections. Defaults to false

apiKey?:

string
A Chroma Cloud API key

tenant?:

string
The tenant name in the Chroma server to connect to. Defaults to 'default_tenant' for single-node Chroma. Auto-resolved for Chroma Cloud users based on the provided API key

database?:

string
The database name to connect to. Defaults to 'default_database' for single-node Chroma. Auto-resolved for Chroma Cloud users based on the provided API key

headers?:

Record<string, any>
Additional HTTP headers to send with requests

fetchOptions?:

RequestInit
Additional fetch options for HTTP requests

Running a Chroma server
Running a Chroma server的直接链接

If you are a Chroma Cloud user, provide the ChromaVector constructor your API key, tenant, and database name.

When you install the @mastra/chroma package, you get access to the Chroma CLI, which can set these as environment variables for you: chroma db connect [DB-NAME] --env-file.

Otherwise, you have several options for setting up your single-node Chroma server:

  • Run one locally using the Chroma CLI: chroma run. You can find more configuration options on the Chroma docs.
  • Run on Docker using the official Chroma image.
  • Deploy your own Chroma server on your provider of choice. Chroma offers example templates for AWS, Azure, and GCP.

Methods
Methods的直接链接

createIndex()
createindex的直接链接

indexName:

string
Name of the index to create

dimension:

number
Vector dimension (must match your embedding model)

metric?:

'cosine' | 'euclidean' | 'dotproduct'
= cosine
Distance metric for similarity search

forkIndex()
forkindex的直接链接

Note: Forking is only supported on Chroma Cloud, or if you deploy your own OSS distributed Chroma.

forkIndex instantly forks an existing Chroma index without affecting the original index. Learn more on the Chroma docs.

indexName:

string
Name of the index to fork

newIndexName:

string
The name of the forked index

upsert()
upsert的直接链接

indexName:

string
Name of the index to upsert into

vectors:

number[][]
Array of embedding vectors

metadata?:

Record<string, any>[]
Metadata for each vector

ids?:

string[]
Optional vector IDs (auto-generated if not provided)

documents?:

string[]
Chroma-specific: Original text documents associated with the vectors

query()
query的直接链接

Query an index using a queryVector. Returns an array of semantically similar records in order of distance from the queryVector. Each record has the shape:

{
id: string;
score: number;
document?: string;
metadata?: Record<string, string | number | boolean>;
vector?: number[] // Only included if includeVector is true
}

You can also provide the shape of your metadata to a query call for type inference: query<T>().

indexName:

string
Name of the index to query

queryVector:

number[]
Query vector to find similar vectors

topK?:

number
= 10
Number of results to return

filter?:

Record<string, any>
Metadata filters for the query

includeVector?:

boolean
= false
Whether to include vectors in the results

documentFilter?:

Record<string, any>
Chroma-specific: Filter to apply on the document content

get()
get的直接链接

Get records from your Chroma index by IDs, metadata, and document filters. It returns an array of records of the shape:

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

You can also provide the shape of your metadata to a get call for type inference: get<T>().

indexName:

string
Name of the index to query

ids?:

string[]
A list of record IDs to return. If not provided, all records are returned.

filter?:

Record<string, any>
Metadata filters.

includeVector?:

boolean
= false
Whether to include vectors in the results

documentFilter?:

Record<string, any>
Chroma-specific: Filter to apply on the document content

limit?:

number
= 100
The maximum number of records to return

offset?:

number
0
Offset for returning records. Use with limit to paginate results.

listIndexes()
listindexes的直接链接

Returns an array of index names as strings.

describeIndex()
describeindex的直接链接

indexName:

string
Name of the index to describe

Returns:

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

deleteIndex()
deleteindex的直接链接

indexName:

string
Name of the index to delete

updateVector()
updatevector的直接链接

Update a single vector by ID or by metadata filter. Either id or filter must be provided, but not both.

indexName:

string
Name of the index containing the vector to update

id?:

string
ID of the vector to update (mutually exclusive with filter)

filter?:

Record<string, any>
Metadata filter to identify vector(s) to update (mutually exclusive with id)

update:

object
Update parameters

The update object can contain:

vector?:

number[]
New vector to replace the existing one

metadata?:

Record<string, any>
New metadata to replace the existing metadata

Example:

// 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()
deletevector的直接链接

indexName:

string
Name of the index containing the vector to delete

id:

string
ID of the vector to delete

deleteVectors()
deletevectors的直接链接

Delete multiple vectors by IDs or by metadata filter. The method supports bulk deletion and source-based vector management. Either ids or filter must be provided, but not both.

indexName:

string
Name of the index containing the vectors to delete

ids?:

string[]
Array of vector IDs to delete (mutually exclusive with filter)

filter?:

Record<string, any>
Metadata filter to identify vectors to delete (mutually exclusive with ids)

Example:

// 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' } }],
},
})

Response types
Response types的直接链接

Query results are returned in this 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
}

Error handling
Error handling的直接链接

The store throws MastraError instances from @mastra/core/error:

import { MastraError } from '@mastra/core/error'

try {
await store.query({
indexName: 'index_name',
queryVector: queryVector,
})
} catch (error) {
if (error instanceof MastraError) {
console.log(error.id) // 'MASTRA_VECTOR_CHROMA_QUERY_FAILED'
console.log(error.domain) // 'MASTRA_VECTOR'
console.log(error.category) // 'USER' | 'THIRD_PARTY'
console.log(error.details) // Additional error context
}
}