技能使用指南

chroma(Chroma向量数据库应用)Skill 到底怎么用?

想给 RAG 应用加一块本地记忆库?Chroma向量数据库应用Skill 提供集合管理、嵌入函数切换、元数据过滤、持久化与服务器模式的完整代码范例,附竞品对比、典型场景与常见问题解答,帮你快速跑通语义检索与文档问答,点开即可上手实践。

Chroma向量数据库应用Skillchroma
8 个章节 约 18 分钟阅读 AI 智能生成

Chroma向量数据库应用Skill:给你的 RAG 应用装上一块开源的“记忆硬盘”

  • 开箱即用的向量库知识包:该技能把 Chroma 的安装、集合管理、嵌入函数、元数据过滤、持久化与服务器模式等要点整理成可直接照抄的代码范例,省去翻文档的时间。
  • 四个核心动作就能跑通:创建集合 → 添加文档 → 查询 → 获取/更新/删除,API 极简,适合原型与本地开发。
  • 完全开源自托管:GitHub 24,300+ stars、1,900+ forks,对应开源项目采用 Apache 2.0 许可证,数据留在自己机器上。
  • 自带生态衔接:原生支持 Sentence Transformers、OpenAI、HuggingFace 及自定义嵌入函数,并能与 LangChain、LlamaIndex 直接对接。
  • 适合谁:正在做 RAG、语义搜索、文档检索的开发者,尤其是希望先在本机跑通、再考虑上生产的团队。

1. 该技能叫什么?如何下载安装 AI 技能提升开发效率?

基本信息一览

项目 内容
技能中文名 Chroma向量数据库应用Skill
技能英文名 chroma
技能 ID 12364
作者 Orchestra Research
技能版本 1.0.0
许可证 技能包标注 MIT;其对应的开源项目 Chroma 采用 Apache 2.0
依赖 chromadb、sentence-transformers
标签 RAG、Chroma、向量数据库、嵌入、语义搜索、开源、自托管、文档检索、元数据过滤

它解决什么问题

大模型本身没有“记忆”,你问它公司内部文档里的内容,它只能靠猜。要让 AI 回答基于你自己的资料,就需要把文档切成块、转成向量(嵌入)、存进一个能按语义快速检索的库——这正是向量数据库的职责。Chroma 的定位是“为 AI 应用准备的开源嵌入数据库”:它同时保存向量和元数据,既支持向量相似度检索,也支持按元数据过滤,还能把结果直接交回给大模型做检索增强生成(RAG)。而这个技能的价值,是把“怎么装、怎么写、怎么避坑”一次性讲清楚,让你不用在文档里反复试错。

“一键安装”AI 技能提升开发效率的思路

这里的“一键”指的是:技能包负责提供方法和代码,运行环境由你本机的依赖完成补全。具体操作路径如下:

  1. 安装前提:本地具备 Python 或 Node.js 运行环境(该技能同时给出了 Python 与 JavaScript/TypeScript 两条安装路径);若要使用 OpenAI、HuggingFace 等云端嵌入模型,还需准备对应的 API Key。
  2. 获取技能:在支持 AI 技能(Skill)的客户端、IDE 插件或智能体平台的技能市场中,用英文名 chroma 或技能 ID 12364 检索并安装。具体的市场入口、按钮位置与安装命令因平台而异,以官方说明为准。
  3. 补装运行依赖:按技能详情给出的真实命令安装运行时库:
    # Python
    pip install chromadb
    
    # JavaScript/TypeScript
    npm install chromadb @chroma-core/default-embed
    
    默认嵌入函数依赖 sentence-transformers(默认模型 all-MiniLM-L6-v2),首次运行会自动下载模型权重,请保证网络可用。
  4. 验证是否生效:新建一个脚本,创建客户端与集合,写入两条文档并查询一次,能打印出 documents、metadatas、distances、ids 四个字段即说明链路打通。若报错找不到模块,说明依赖未装进当前解释器环境;若首次调用卡住,多半在下载嵌入模型。

安装完成后,你在 AI 助手里提出“帮我用 Chroma 写一个带元数据过滤的检索示例”,它就能基于该技能的上下文直接给出可运行代码,而不是给你一份“通用伪代码”。

2. 该技能的主要功能和特点

  • 四大核心操作,学习成本极低:创建集合(create_collection)、添加文档(add)、查询(query)、获取(get),再加上更新与删除,构成完整的增删改查闭环。相比需要自己拼索引结构的底层方案,上手门槛显著更低。
  • 向量检索 + 元数据过滤双引擎:查询时可同时指定语义查询文本与 where 条件,支持精确匹配、比较运算符($gt、$gte、$lt、$lte、$ne)、逻辑运算符($and、$or)以及集合包含($in)。先按业务字段缩小范围,再做语义排序,既能提高结果质量,也能降低无关结果带来的干扰。
  • 嵌入函数可插拔:默认使用 Sentence Transformers,也可切换到 OpenAI 的 text-embedding-3-small、HuggingFace 模型,或继承 EmbeddingFunction 写自己的嵌入逻辑,方便在“速度”和“质量”之间做权衡。
  • 既能用于本地开发,也能上服务器:PersistentClient 把数据写入本地目录(如 ./chroma_db),重启不丢;生产场景可执行 chroma run --path ./chroma_db --port 8000 启动服务,再用 HttpClient 多客户端连接。
  • 与主流框架无缝对接:提供 LangChain(langchain_chroma 的 Chroma.from_documents、as_retriever)与 LlamaIndex(ChromaVectorStore + VectorStoreIndex)的标准接法,已有的 RAG 流水线可以低成本替换存储层。
  • 性能表现明确:添加 100 个带嵌入的文档约 1–3 秒;查询前 10 条约 50–200 毫秒(取决于集合规模);元数据过滤在合理索引下约 10–50 毫秒。这个量级足以支撑原型验证和中小规模内部应用。
  • 和“纯相似度搜索库”的差别:像 FAISS 这类方案只做向量近邻计算,元数据、持久化、增删改都要你自己写;Chroma 把这些“周边工程”内置了,你写业务逻辑的时间会多得多。

3. 如何使用该技能?

下面以“给一批技术文档做语义检索”为例,走一遍完整流程。

步骤 1:安装依赖并引入库

pip install chromadb
import chromadb

步骤 2:创建客户端与集合

client = chromadb.Client()                     # 内存模式,适合试验
# 需要持久化则改用:
# client = chromadb.PersistentClient(path="./chroma_db")

collection = client.create_collection(name="tech_docs")

若集合已存在,请使用 client.get_collection("tech_docs") 或 get_or_create_collection,避免重复创建报错。

步骤 3:添加文档与元数据

collection.add(
    documents=["向量数据库入门指南", "如何设计 RAG 检索链路", "元数据过滤实战"],
    metadatas=[
        {"source": "web", "category": "tutorial", "difficulty": 1},
        {"source": "blog", "category": "rag", "difficulty": 3},
        {"source": "pdf", "category": "tutorial", "difficulty": 4}
    ],
    ids=["doc1", "doc2", "doc3"]
)

要点:ids 必须唯一;metadatas 里放的字段越多,后续可过滤的维度越丰富。

步骤 4:执行带过滤的语义查询

results = collection.query(
    query_texts=["检索增强生成怎么做"],
    n_results=2,
    where={
        "$and": [
            {"category": "tutorial"},
            {"difficulty": {"$lte": 3}}
        ]
    }
)

print(results["documents"])   # 命中的文档文本
print(results["distances"])   # 相似度分数,越小越相近

步骤 5:读取、更新与删除

collection.get(ids=["doc1"])                       # 按 ID 取回
collection.update(ids=["doc1"], documents=["向量数据库入门指南(修订版)"])
collection.delete(where={"source": "outdated"})    # 按条件批量清理

步骤 6:切换到自有嵌入模型(可选)

from chromadb.utils import embedding_functions

openai_ef = embedding_functions.OpenAIEmbeddingFunction(
    api_key="your-key",
    model_name="text-embedding-3-small"
)
collection = client.create_collection(name="openai_docs", embedding_function=openai_ef)

步骤 7:接入 LangChain 做问答

from langchain_chroma import Chroma
from langchain_openai import OpenAIEmbeddings

vectorstore = Chroma.from_documents(
    documents=docs, embedding=OpenAIEmbeddings(), persist_directory="./chroma_db"
)
retriever = vectorstore.as_retriever(search_kwargs={"k": 5})

检索器拿到候选片段后,拼接进提示词交给大模型,就完成了最小可用的 RAG 闭环。

4. 同类型竞品对比分析

方案名称 定位 核心功能 安装/使用门槛 适用场景 优势与不足
Chroma(本技能) 开源嵌入数据库,AI 原生,主打本地与原型 嵌入 + 元数据存储、向量与全文检索、元数据过滤、持久化、服务器模式、LangChain/LlamaIndex 集成 低:pip install chromadb 即可跑起来,默认自带嵌入模型 本地开发、RAG 原型、自托管文档检索、开源项目 优势:开箱即用、生态友好、数据自主可控;不足:超大规模集群与多租户治理能力不如专业云服务
Pinecone 全托管云向量数据库 托管索引、自动扩缩容、低运维 中:需注册云账号与 API Key,按用量计费(价格以官方说明为准) 团队不想运维、流量波动大的线上业务 优势:免运维、弹性好;不足:数据在云端、成本随规模上升、离线开发不便
FAISS 纯向量相似度检索库 高性能近邻搜索、多种索引类型 中高:需自行处理持久化、元数据、增删改与 ID 管理 算法研究、离线批量检索、对性能极致要求的场景 优势:速度快、底层可控;不足:没有元数据过滤和现成的“数据库”能力,工程量大
Qdrant 基于 Rust 的高性能向量数据库 向量检索、载荷过滤、分布式部署 中:需部署服务(容器或二进制),有一定运维成本 中大型生产环境、对延迟敏感的服务 优势:性能强、过滤能力扎实;不足:本地快速试验不如 Chroma 轻便,学习曲线略陡

补充说明:若你的场景是“生产级 ML 原生数据库且需要成熟的分片与运维体系”,Weaviate 也是常见备选,具体选型建议结合团队运维能力与数据合规要求判断。

5. 该技能的典型应用场景与实际体验情况

场景一:独立开发者的个人知识库问答 角色:做副业小工具的开发者。痛点:想验证“把我的笔记喂给 ChatGPT”的可行性,却卡在向量库选型与代码拼装上。使用方式:用 PersistentClient(path="./chroma_db") 落地本地库,默认嵌入模型免 Key,先把几百条笔记灌进去跑通召回。实际体验:上手几乎零阻力,半小时内能看到第一条命中结果;注意首次运行会下载嵌入模型,离线环境需提前准备。

场景二:团队内部文档检索系统 角色:企业 IT 或平台组工程师。痛点:文档含敏感信息,不能上传第三方云向量服务。使用方式:chroma run --path ./chroma_db --port 8000 起服务,业务侧用 HttpClient 连接,按 department、doc_type 等元数据字段做过滤隔离。实际体验:部署形态简单,元数据过滤确实能明显减少不相关结果;注意生产环境应关闭匿名遥测(Settings(anonymized_telemetry=False))并做好 chroma_db 目录的定期备份。

场景三:RAG 应用的检索层快速替换 角色:已用 LangChain 搭好链路的算法工程师。痛点:想把存储层换成可自托管的方案,又不想重写整条流水线。使用方式:把 Chroma.from_documents(...) 接进现有流程,用 as_retriever(search_kwargs={"k": 5}) 替换原检索器。实际体验:接口贴合框架习惯,迁移改动小;但要注意嵌入模型必须与建库时保持一致,换了模型就要重建集合,否则相似度分数不可比。

场景四:带条件的语义搜索功能 角色:做内容平台的后端开发。痛点:用户既要“语义上相似”,又要“只看某个分类、难度不超过 3 的文章”。使用方式:query(query_texts=[...], where={"$and": [{"category": "tutorial"}, {"difficulty": {"$lte": 3}}]})。实际体验:比较运算符与逻辑运算符覆盖了大多数业务条件,写起来直观;但字段命名要保持一致,元数据类型混乱会让过滤结果出乎意料。

6. 该技能能为用户带来的价值

  • 把“查文档的时间”换成“跑通的时间”:集合创建、嵌入切换、元数据过滤、持久化、服务器模式、框架集成等关键环节都有现成范式,原本需要翻半天文档、踩若干坑的配置工作,可以压缩到一次对话之内。
  • 降低 RAG 的起步门槛:默认嵌入模型开箱可用,不需要先申请 API Key 就能验证想法;对初学者而言,“先跑通、再优化”的路径比一上来就面对分布式概念友好得多。
  • 数据主权与成本可控:开源自托管意味着文档与向量留在自己的磁盘上,不产生按量计费的检索开销,长期运行的总成本更可预测。
  • 迁移与扩展都有退路:同一套集合与查询写法,可以从内存模式平滑过渡到持久化、再到服务器模式;如果未来规模增长需要换库,LangChain、LlamaIndex 的抽象层也能降低二次改造成本。
  • 工程规范被顺带建立:技能中给出的最佳实践(唯一 ID、批量写入、善用过滤器、定期备份、监控集合规模、生产用服务器模式)实际上是向量库使用中的高频问题清单,照着做能避开不少后期返工。

7. 常见问题 FAQ

Q1:这个技能怎么安装?装完还要做什么? 在支持 AI 技能的平台中按英文名 chroma 或技能 ID 12364 检索安装(具体入口以官方说明为准);随后按技能给出的命令安装运行时依赖 pip install chromadb 或 npm install chromadb @chroma-core/default-embed,再用一个“建集合 → 写两条文档 → 查询”的小脚本验证链路是否打通。

Q2:使用 Chroma 需要付费吗? Chroma 本身是开源项目(对应开源项目采用 Apache 2.0 许可证,技能包标注 MIT),本地自托管不产生授权费用。但如果你选择 OpenAI、HuggingFace 等云端嵌入模型,会产生相应的 API 调用费用,具体价格以各服务商官方说明为准。

Q3:它适合谁用?不适合谁? 适合正在做 RAG、语义搜索、文档检索的开发者,尤其是希望本地开发、数据自持、快速验证想法的个人与小团队。如果你需要的是开箱即用的全托管云服务、或千万级向量以上的强弹性集群,托管型方案可能更省心。

Q4:Chroma 和 FAISS、Pinecone 该怎么选? 只要“向量近邻计算”、不介意自己写持久化和元数据管理,选 FAISS;完全不想运维、能接受数据在云端,选 Pinecone 这类托管服务;想在本地半小时内跑通一个带元数据过滤的检索原型,再逐步过渡到自托管服务,Chroma 是更顺手的起点。

Q5:数据会不会丢?怎么保证持久化? 默认的 chromadb.Client() 是内存模式,进程结束数据即消失。要持久化请使用 chromadb.PersistentClient(path="./chroma_db"),数据会自动写入该目录,下次用相同路径重新加载即可。生产环境建议定期复制 chroma_db 目录做备份,并关注集合规模变化以便及时扩容。