J'Blog

第 3 课 · Chroma

语义检索

基于 Chroma 向量库,与 Workspace 知识库分离。用自然语言描述你想查的内容。 非管理员每人每天可检索 5 次(消耗站点 AI 配额)。

Chroma 简介

原文:Chroma 简介

一句话

Chroma 是开源的 AI 数据基础设施,提供了 RAG 应用所需的一切功能,包括 embedding 存储、向量搜索、元数据过滤和多模态检索。

什么时候翻这页

当你需要了解 Chroma 的核心功能和如何开始使用它构建 RAG 应用时;当你需要比较不同向量数据库特性时;当你需要了解 Chroma 与 LangChain、LangGraph 和 LangSmith 的集成方式时。

核心概念

  • Chroma: 开源的 AI 数据基础设施,提供检索增强生成所需的一切功能
  • Document Storage: 存储文档和元数据的功能
  • Embeddings: 支持多种嵌入模型,包括 OpenAI、Cohere、Hugging Face、sentence-transformers 等
  • Vector Search: 提供密集、稀疏和混合搜索功能,可通过相似性查询并组合多种搜索策略
  • Full-Text & Regex Search: 无需 embeddings 的关键字和正则表达式搜索
  • Metadata Filtering: 按元数据条件在查询时过滤结果
  • Multi-Modal Retrieval: 索引和搜索图像、音频等多种模态的数据,与文本一起检索

怎么做

  1. 使用 Chroma SDK 开始:

    • 创建自托管或云数据库
    • 使用 Chroma SDK 向数据库添加数据
  2. 创建 Chroma Cloud 数据库:

    • 访问 trychroma.com 创建可扩展、零操作的 Chroma Cloud 数据库
  3. 构建代理搜索:

    • 构建能够迭代搜索和优化复杂查询结果的代理
  4. 构建代码搜索:

    • 使用 AST 感知的 chunking 索引代码库,为编码代理提供支持

命令 / API 速查

  • 创建 Chroma 集合:chroma_client.create_collection(name="my_collection")
  • 添加数据:collection.add(embeddings=embeddings, documents=documents, metadatas=metadatas)
  • 查询集合:collection.query(query_embeddings=query_embeddings, n_results=5)
  • 元数据过滤:collection.query(query_embeddings=query_embeddings, where={"metadata_field": "metadata_value"})
  • 全文搜索:collection.query(query_texts=["text query"], n_results=5)

与 Hello-Agents / LangGraph / 本博客 handbook 索引的联系

Chroma 是本博客 handbook 中使用的向量数据库,用于存储和检索 embedding。在 Hello-Agents 的记忆与检索章节中,Chroma 作为 vector store 存储文档的 embedding。在 LangGraph 应用中,Chroma 可作为 retriever 的一部分,提供相关文档检索功能。LangSmith 可以监控和评估使用 Chroma 作为 vector store 的 RAG 管道的性能。

初学者易错点

  1. 误以为 Chroma 只能处理文本数据,实际上它支持多模态数据(图像、音频等)
  2. 忽略元数据的重要性,元数据对于过滤和优化检索结果至关重要
  3. 混淆密集向量搜索和稀疏向量搜索的使用场景,应根据具体需求选择合适的搜索策略
  4. 未充分利用 Chroma 的混合搜索能力,结合密集和稀疏搜索可以获得更好的结果

相关词条

官方原文:https://docs.trychroma.com/docs/overview/introduction