21.1 Chromax向量数据案例
毫无疑问对于新手来说Chroma 比 Milvus 友好得多。它的设计哲学就是“极简”、“零配置”、“开箱即用”。你只需要pip install chromadb就可以直接使用不需要安装 Docker、启动容器、配置端口等任何基础设施操作。下面我就为你提供一个基于 Chroma LangChain 的 RAG 案例重点放在 Chroma 的安装和使用上代码简单明了可直接复制运行。一、Chroma 快速上手1.1 安装 Chroma在虚拟环境中执行pipinstallchromadb langchain langchain-community sentence-transformers pypdf1.2 Chroma 核心特点特点说明零配置无需 Docker、无需启动服务、无需端口配置两种运行模式内存模式数据临时、持久化模式数据保存到本地磁盘Python 原生完全在 Python 进程中运行API 直观自动持久化可指定目录退出程序后数据不丢失二、完整 RAG 代码使用 Chroma以下代码实现了一个完整的 RAG 流程加载 PDF 文档切分为文本块使用本地 HuggingFace 嵌入模型无需 API Key向量存入 Chroma持久化到本地磁盘检索 大模型问答# 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 文件路径loaderPyPDFLoader(pdf_path)documentsloader.load()print(f✅ 加载了{len(documents)}页)# 2. 切分文档 text_splitterRecursiveCharacterTextSplitter(chunk_size500,chunk_overlap50,separators[\n\n,\n,。,,,,, ,])chunkstext_splitter.split_documents(documents)print(f✅ 切分为{len(chunks)}个文本块)# 3. 初始化嵌入模型本地无需 APIembeddingsHuggingFaceEmbeddings(model_namesentence-transformers/paraphrase-multilingual-MiniLM-L12-v2)# 4. 创建 Chroma 向量库持久化到本地目录persist_directory./chroma_db# 数据将保存在此文件夹vector_storeChroma.from_documents(documentschunks,embeddingembeddings,persist_directorypersist_directory,# 指定持久化目录collection_namemy_knowledge)# 持久化保存Chromadb 新版本会自动持久化但显式调用更安全vector_store.persist()print(f✅ 向量库已保存到{persist_directory})# 5. 创建检索器 retrievervector_store.as_retriever(search_kwargs{k:3})# 6. 初始化大模型使用阿里云百炼 QwenllmChatOpenAI(modelqwen-plus,temperature0,api_keyos.getenv(DASHSCOPE_API_KEY),base_urlos.getenv(DASHSCOPE_BASE_URL),)# 7. 创建检索问答链 qa_chainRetrievalQA.from_chain_type(llmllm,retrieverretriever,return_source_documentsTrue)# 8. 交互问答 print(\n RAG 问答系统已启动输入 exit 退出)whileTrue:queryinput(\n问题: )ifquery.lower()exit:breakresultqa_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_storeChroma(persist_directory./chroma_db,embedding_functionembeddings,collection_namemy_knowledge)3.2 Chroma 的两种模式对比模式代码示例特点内存模式临时Chroma.from_documents(..., persist_directoryNone)数据仅在内存中程序退出后消失适合测试持久化模式推荐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, k3)删除集合vector_store.delete_collection()四、为什么 Chroma 对新手更友好对比维度ChromaMilvus安装难度pip install chromadb一行搞定需要安装 Docker、下载镜像、启动容器启动成本无需任何后台服务需要保持 Docker 容器运行学习曲线极低API 直观较高需理解 Collection、Partition、Index 等概念资源占用轻量几十 MB较重至少 2-3 GB 内存生产准备适合原型、小规模适合大规模、分布式场景简单结论学习阶段、个人项目、原型验证 →Chroma。企业级、百万级以上数据、分布式部署 →Milvus。五、运行前的准备准备一个 PDF 文件将任意 PDF 放到./docs/example.pdf路径下。配置.env文件用于大模型 APIDASHSCOPE_API_KEY你的阿里云百炼API Key DASHSCOPE_BASE_URLhttps://dashscope.aliyuncs.com/compatible-mode/v1安装依赖pipinstallchromadb langchain langchain-community sentence-transformers pypdf python-dotenv langchain-openai运行代码python rag_chroma_demo.py六、常见问题Q首次运行下载嵌入模型很慢A首次会从 Hugging Face 下载约 470MB 的模型文件。可以设置镜像os.environ[HF_ENDPOINT]https://hf-mirror.comQChroma 支持中文检索吗A支持的。我们使用的paraphrase-multilingual-MiniLM-L12-v2是多语言模型对中文效果很好。QChroma 数据存在哪里A默认保存在./chroma_db文件夹下使用 SQLite Parquet 格式存储可以直接查看文件。Q能不能不用本地嵌入模型用阿里云的 embedding APIA可以。替换embeddings部分fromlangchain.embeddingsimportDashScopeEmbeddings embeddingsDashScopeEmbeddings(modeltext-embedding-v2,dashscope_api_keyos.getenv(DASHSCOPE_API_KEY))这个案例已经涵盖了 Chroma 的核心用法你只需准备好 PDF 和 API Key就能立刻体验到完整的 RAG 流程。如果遇到任何问题欢迎随时提问。