Chroma Vector 存储
ChromaVector 类使用开源 embedding 数据库 Chroma 提供 Vector 搜索。 它提供高效的 Vector 搜索,并支持元数据过滤和混合搜索。
Chroma Cloud 提供无服务器 Vector 搜索和全文搜索。它速度极快、经济高效、容量大且易于使用。创建一个数据库,即可在 30 秒内使用 5 美元的免费额度开始试用。
构造函数选项构造函数选项的直接链接
host?:
port?:
ssl?:
apiKey?:
tenant?:
database?:
headers?:
fetchOptions?:
运行 Chroma 服务器运行 Chroma 服务器的直接链接
如果你是 Chroma Cloud 用户,请向 ChromaVector 构造函数提供 API key、tenant 和数据库名称。
安装 @mastra/chroma 包后,你将可以使用 Chroma CLI,它可以通过 chroma db connect [DB-NAME] --env-file 为你设置这些环境变量。
否则,你可以通过以下几种方式设置单节点 Chroma 服务器:
- 使用 Chroma CLI 在本地运行:
chroma run。更多配置选项请参阅 Chroma 文档。 - 使用官方 Chroma 镜像在 Docker 上运行。
- 在你选择的 Provider 上部署自己的 Chroma 服务器。Chroma 为 AWS、Azure 和 GCP 提供了示例模板。
方法方法的直接链接
createIndex()createindex的直接链接
indexName:
dimension:
metric?:
forkIndex()forkindex的直接链接
注意:分叉功能仅在 Chroma Cloud 上受支持,或者你自行部署了开源的分布式 Chroma。
forkIndex 可让你立即分叉现有的 Chroma 索引。对分叉索引的操作不会影响原索引。有关更多信息,请参阅 Chroma 文档。
indexName:
newIndexName:
upsert()upsert的直接链接
indexName:
vectors:
metadata?:
ids?:
documents?:
query()query的直接链接
使用 queryVector 查询索引。返回一个数组,其中包含与 queryVector 语义相似的记录,并按距离排序。每条记录的结构如下:
{
id: string;
score: number;
document?: string;
metadata?: Record<string, string | number | boolean>;
embedding?: number[]
}
你还可以向 query 调用提供元数据结构,以便进行类型推断:query<T>()。
indexName:
queryVector:
topK?:
filter?:
includeVector?:
documentFilter?:
get()get的直接链接
通过 ID、元数据过滤条件和文档过滤条件,从 Chroma 索引获取记录。它返回一个记录数组,结构如下:
{
id: string;
document?: string;
metadata?: Record<string, string | number | boolean>;
embedding?: number[]
}
你还可以向 get 调用提供元数据结构,以便进行类型推断:get<T>()。
indexName:
ids?:
filter?:
includeVector?:
documentFilter?:
limit?:
offset?:
limit 配合使用以对结果分页。listIndexes()listindexes的直接链接
返回由索引名称字符串组成的数组。
describeIndex()describeindex的直接链接
indexName:
返回:
interface IndexStats {
dimension: number
count: number
metric: 'cosine' | 'euclidean' | 'dotproduct'
}
deleteIndex()deleteindex的直接链接
indexName:
updateVector()updatevector的直接链接
通过 ID 或元数据过滤条件更新单个 Vector。必须提供 id 或 filter,但不能同时提供二者。
indexName:
id?:
filter?:
update:
update 对象可以包含:
vector?:
metadata?:
示例:
// 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:
id:
deleteVectors()deletevectors的直接链接
通过 ID 或元数据过滤条件删除多个 Vector。该方法支持批量删除和基于来源的 Vector 管理。必须提供 ids 或 filter,但不能同时提供二者。
indexName:
ids?:
filter?:
示例:
// 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' } }],
},
})
响应类型响应类型的直接链接
查询结果按以下格式返回:
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
}
错误处理错误处理的直接链接
该存储会抛出可捕获的类型化错误:
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
}
}