3. 核心概念
理解这三个概念,Chroma 就掌握了一半。
3.1 Collection(集合)
Collection 是 Chroma 中最核心的概念,类似 MySQL 中的"表"。
每个 Collection 存储一组相关的向量数据。
Chroma 实例
├── Collection: "产品文档"
│ ├── 文档1的向量 + 原文 + 元数据
│ ├── 文档2的向量 + 原文 + 元数据
│ └── ...
├── Collection: "用户反馈"
│ └── ...
└── Collection: "代码库"
└── ...
3.2 Document(文档)
Chroma 里的 "Document" 指的是一段文本块,而不是一个 PDF 或 Word 文件。在实际应用中,你通常会把一个长文档或一本书,切分成许多有意义的短文本块,每个文本块作为一个独立的 Document 存入 Chroma
每条存入 Chroma 的数据包含三个部分:
{
// 1. ID:唯一标识,字符串,必须唯一
id: "doc_001",
// 2. 文本内容:原始文字,Chroma 会自动向量化(如果配置了 embedding 函数)
// 真正想存储和搜索的原始文本内容
document: "量子纠缠是两个粒子之间的神秘关联...",
// 3. 元数据:任意键值对,用于过滤,不参与向量检索
metadata: {
source: "physics_textbook.pdf",
page: 42,
author: "张三",
date: "2024-01-01",
},
// 4. 向量(可选):如果自己传向量就不需要 Chroma 帮你计算
embedding: [0.12, -0.87, 0.43, ...] // 通常由 Embedding 模型生成
}
最小可用示例 (只填必须的):
如果你想用最简单的方式添加数据(只提供 id 和 documents,利用 Chroma 自动生成向量),代码如下:
await collection.add({
ids: ["doc1", "doc2"], // 必须,手动设置
documents: ["文本A", "文本B"] // 必须提供,否则没有内容可搜索(其实不提供也能插入)
// embeddings 自动生成
// metadata 可省略
});
理解元数据 (Metadata) :
metadata 是让 Chroma 从“向量搜索引擎”升级为“智能数据库”的关键。它让你能像用 SQL 一样,对搜索结果进行精确筛选。
- 丰富的类型:
metadata的值可以是字符串、数字、布尔值,甚至是这些类型的数组。 - 强大的过滤:你可以在查询时通过
where参数,基于metadata进行过滤。
// 查询时,只返回 category 为 "core_concept" 的文档
const results = await collection.query({
queryTexts: ["什么是向量数据库?"],
nResults: 3,
where: {
"category": "core_concept"
}
});
3.3 距离函数
向量之间的"相似度"通过距离函数计算,Chroma 支持三种:
| 距离函数 | 说明 | 适用场景 |
|---|---|---|
cosine(余弦距离) |
衡量方向相似性,忽略向量长度 | 文本检索首选,对文本长度不敏感 |
l2(欧氏距离) |
衡量空间距离 | 图像特征向量 |
ip(内积) |
点积,和余弦类似但考虑长度 | 已归一化的向量 |
文本 RAG 场景一律用
cosine,这是默认值。
💬 评论 0
还没有评论,快来抢沙发吧~