You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Chroma.from_documents加载的文档添加元数据及加载问题求助

解决方案:Chroma文档元数据添加与持久化加载问题

一、直接通过Chroma.from_documents添加元数据

Chroma.from_documents支持通过metadatas参数直接为文档绑定元数据,每个文档对应一个元数据字典,示例代码如下:

from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.document_loaders import TextLoader

# 加载并拆分目标文档
loader = TextLoader("disease_details.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
split_docs = text_splitter.split_documents(documents)

# 为每个文档分块定义元数据(示例中所有分块共享相同物种元数据)
metadatas = [{"affected_species": ["Dog", "Cat", "Horse"]} for _ in split_docs]

# 嵌入文档并绑定元数据,同时持久化到本地
embeddings = OpenAIEmbeddings()
db = Chroma.from_documents(
    split_docs,
    embeddings,
    metadatas=metadatas,
    persist_directory="./chromaDB"
)
db.persist()

二、解决PersistentClient创建集合后加载无数据问题

你遇到的加载无数据问题,核心原因是LangChain的Chroma默认使用名为langchain的集合,而你通过PersistentClient创建的是自定义名称的集合,加载时必须显式指定集合名称才能匹配。

步骤1:用PersistentClient创建带元数据的集合

import chromadb
from chromadb.utils import embedding_functions

# 初始化持久化客户端
client = chromadb.PersistentClient(path="./chromaDB")
# 定义与LangChain一致的嵌入函数
openai_ef = embedding_functions.OpenAIEmbeddingFunction(
    api_key="your-api-key",
    model_name="text-embedding-ada-002"
)
# 创建自定义名称的集合(例如"disease_collection")
collection = client.create_collection(
    name="disease_collection",
    embedding_function=openai_ef
)

# 添加文档、ID和元数据
collection.add(
    documents=["疾病详情内容..."],
    ids=["doc1"],
    metadatas=[{"affected_species": ["Dog", "Cat", "Horse"]}]
)

步骤2:用LangChain的Chroma正确加载集合

from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings

embeddings = OpenAIEmbeddings()
# 加载时必须指定collection_name,与创建的集合名称完全一致
db = Chroma(
    persist_directory="./chromaDB",
    embedding_function=embeddings,
    collection_name="disease_collection"
)

# 验证数据加载结果
docs = db.similarity_search("查询疾病相关内容")
print(docs)

关键注意事项

  • 确保嵌入函数的配置(如模型名称、API密钥)在创建和加载时完全一致;
  • 持久化目录路径必须完全匹配,避免相对路径导致的路径差异;
  • 集合名称区分大小写,需严格保持一致。

内容的提问来源于stack exchange,提问作者hollow_coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 19:42:13