21.1 Chromax向量数据案例
2026/6/14 0:50:55 网站建设 项目流程

毫无疑问,对于新手来说,Chroma 比 Milvus 友好得多。它的设计哲学就是“极简”、“零配置”、“开箱即用”。你只需要pip install chromadb就可以直接使用,不需要安装 Docker、启动容器、配置端口等任何基础设施操作。

下面我就为你提供一个基于 Chroma + LangChain 的 RAG 案例,重点放在 Chroma 的安装和使用上,代码简单明了,可直接复制运行。


一、Chroma 快速上手

1.1 安装 Chroma

在虚拟环境中执行:

pipinstallchromadb langchain langchain-community sentence-transformers pypdf

1.2 Chroma 核心特点

特点说明
零配置无需 Docker、无需启动服务、无需端口配置
两种运行模式内存模式(数据临时)、持久化模式(数据保存到本地磁盘)
Python 原生完全在 Python 进程中运行,API 直观
自动持久化可指定目录,退出程序后数据不丢失

二、完整 RAG 代码(使用 Chroma)

以下代码实现了一个完整的 RAG 流程:

  1. 加载 PDF 文档
  2. 切分为文本块
  3. 使用本地 HuggingFace 嵌入模型(无需 API Key)
  4. 向量存入 Chroma(持久化到本地磁盘)
  5. 检索 + 大模型问答
# rag_chroma_demo.pyimportosfromlangchain.document_loadersimportPyPDFLoaderfromlangchain.text_splitterimportRecursiveCharacterTextSplitterfromlangchain.embeddingsimportHuggingFaceEmbeddingsfromlangchain.vectorstoresimportChromafromlangchain.chainsimportRetrievalQAfromlangchain_openaiimportChatOpenAIfromdotenvimportload_dotenv load_dotenv()# 加载 .env,里面放你的阿里云 API Key# ========== 1. 加载 PDF 文档 ==========pdf_path="./docs/example.pdf"# 请替换为你的 PDF 文件路径loader=PyPDFLoader(pdf_path)documents=loader.load()print(f"✅ 加载了{len(documents)}页")# ========== 2. 切分文档 ==========text_splitter=RecursiveCharacterTextSplitter(chunk_size=500,chunk_overlap=50,separators=["\n\n","\n","。","!","?",";",","," ",""])chunks=text_splitter.split_documents(documents)print(f"✅ 切分为{len(chunks)}个文本块")# ========== 3. 初始化嵌入模型(本地,无需 API)==========embeddings=HuggingFaceEmbeddings(model_name="sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2")# ========== 4. 创建 Chroma 向量库(持久化到本地目录)==========persist_directory="./chroma_db"# 数据将保存在此文件夹vector_store=Chroma.from_documents(documents=chunks,embedding=embeddings,persist_directory=persist_directory,# 指定持久化目录collection_name="my_knowledge")# 持久化保存(Chromadb 新版本会自动持久化,但显式调用更安全)vector_store.persist()print(f"✅ 向量库已保存到{persist_directory}")# ========== 5. 创建检索器 ==========retriever=vector_store.as_retriever(search_kwargs={"k":3})# ========== 6. 初始化大模型(使用阿里云百炼 Qwen)==========llm=ChatOpenAI(model="qwen-plus",temperature=0,api_key=os.getenv("DASHSCOPE_API_KEY"),base_url=os.getenv("DASHSCOPE_BASE_URL"),)# ========== 7. 创建检索问答链 ==========qa_chain=RetrievalQA.from_chain_type(llm=llm,retriever=retriever,return_source_documents=True)# ========== 8. 交互问答 ==========print("\n🤖 RAG 问答系统已启动(输入 exit 退出)")whileTrue:query=input("\n问题: ")ifquery.lower()=="exit":breakresult=qa_chain.invoke(query)print(f"\n答案:{result['result']}")print("\n参考来源:")fori,docinenumerate(result["source_documents"],1):print(f"{i}.{doc.metadata.get('source','未知')}{doc.metadata.get('page','?')}页")print(f" 片段:{doc.page_content[:150]}...")

三、Chroma 使用详解

3.1 持久化目录说明

  • persist_directory="./chroma_db"表示向量数据库会保存到当前目录下的chroma_db文件夹中。
  • 程序第二次运行时,可以直接加载已有的数据库,无需重新计算向量(节省时间):
vector_store=Chroma(persist_directory="./chroma_db",embedding_function=embeddings,collection_name="my_knowledge")

3.2 Chroma 的两种模式对比

模式代码示例特点
内存模式(临时)Chroma.from_documents(..., persist_directory=None)数据仅在内存中,程序退出后消失,适合测试
持久化模式(推荐)Chroma.from_documents(..., persist_directory="./db")数据保存到磁盘,下次启动可复用,避免重复计算嵌入

3.3 Chroma 常用 API

操作代码
创建集合并添加文档Chroma.from_documents(docs, embedding, persist_directory=...)
加载已有集合Chroma(persist_directory=..., embedding_function=...)
添加新文档vector_store.add_documents([doc1, doc2])
相似度检索vector_store.similarity_search("query", k=3)
删除集合vector_store.delete_collection()

四、为什么 Chroma 对新手更友好?

对比维度ChromaMilvus
安装难度pip install chromadb一行搞定需要安装 Docker、下载镜像、启动容器
启动成本无需任何后台服务需要保持 Docker 容器运行
学习曲线极低,API 直观较高,需理解 Collection、Partition、Index 等概念
资源占用轻量(几十 MB)较重(至少 2-3 GB 内存)
生产准备适合原型、小规模适合大规模、分布式场景

简单结论:学习阶段、个人项目、原型验证 →Chroma。企业级、百万级以上数据、分布式部署 →Milvus


五、运行前的准备

  1. 准备一个 PDF 文件:将任意 PDF 放到./docs/example.pdf路径下。
  2. 配置.env文件(用于大模型 API):
    DASHSCOPE_API_KEY=你的阿里云百炼API Key DASHSCOPE_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
  3. 安装依赖
    pipinstallchromadb langchain langchain-community sentence-transformers pypdf python-dotenv langchain-openai
  4. 运行代码
    python rag_chroma_demo.py

六、常见问题

Q:首次运行下载嵌入模型很慢?
A:首次会从 Hugging Face 下载约 470MB 的模型文件。可以设置镜像:

os.environ["HF_ENDPOINT"]="https://hf-mirror.com"

Q:Chroma 支持中文检索吗?
A:支持的。我们使用的paraphrase-multilingual-MiniLM-L12-v2是多语言模型,对中文效果很好。

Q:Chroma 数据存在哪里?
A:默认保存在./chroma_db文件夹下,使用 SQLite + Parquet 格式存储,可以直接查看文件。

Q:能不能不用本地嵌入模型,用阿里云的 embedding API?
A:可以。替换embeddings部分:

fromlangchain.embeddingsimportDashScopeEmbeddings embeddings=DashScopeEmbeddings(model="text-embedding-v2",dashscope_api_key=os.getenv("DASHSCOPE_API_KEY"))

这个案例已经涵盖了 Chroma 的核心用法,你只需准备好 PDF 和 API Key,就能立刻体验到完整的 RAG 流程。如果遇到任何问题,欢迎随时提问。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询