向量数据库实战:用Chroma+BGE从零搭建RAG知识库,5步搞定专属AI助手

发布时间:2026/9/16 12:19:20
向量数据库实战:用Chroma+BGE从零搭建RAG知识库,5步搞定专属AI助手 文章目录前言一、为什么选Chroma二、准备工作5分钟搞定2.1 环境要求2.2 安装依赖三、实战五步走第一步初始化 Chroma 数据库库第二步准备知识库数据第三步加载嵌入模型文本转向量这里选用 **BGE-small** 模型——384 维兼顾精度和速度对中文友好普通电脑就能跑。跑。第四步向量入库第五步查询检索四、完整代码汇总五、实战避坑清单六、进阶方向从原型Chroma 跑通后可以根据需求进一步升级一步升级七、写这篇文章带你从零跑通了 Chroma BGE 的 RAG 检索系统。检索系统。核心流程就五步前言上篇文章我们把向量数据、嵌入模型、向量数据库这三件套的理论讲透了。但理论再好不动手等于白学。这篇文章就带你真刀真枪地干一场——用轻量级向量数据库Chroma 本地嵌入模型BGE搭建一个属于自己的 RAG 知识库。全程代码可跑附带避坑指南跟着做就能让大模型“记住”你的专属知识库。实战目标上传你的学习笔记/技术文档 → 输入问题 → 向量数据库检索出最相关的片段 → 大模型基于这些片段生成精准回答。一、为什么选Chroma上篇文章对比了6款主流向量数据库实战选型我选Chroma原因很简单维度Chroma的优势上手难度3行代码启动5分钟跑通原型部署成本无需独立服务直接pip installPython生态与LangChain、LlamaIndex深度绑定持久化支持本地SQLite存储数据不丢适用规模百万级以内够用个人/小团队首选一句话Chroma 是“向量数据库里的 SQLite”——轻量、够用、不用折腾运维。等你的数据量冲到百万级以后再考虑迁移到 Qdrant 或 Milvus 不迟。。二、准备工作5分钟搞定2.1 环境要求Python 3.8-4GB 以上内存8GB 更佳无需GPU2.2 安装依赖# 创建虚拟环境推荐避免依赖冲突python-mvenv vecdb_envsourcevecdb_env/bin/activate# Windows用 vecdb_env\Scripts\activate# 安装核心库pipinstallchromadb sentence-transformers每个库的作用chromadb向量数据库本身sentence-transformers加载嵌入模型把文本转成向量三、实战五步走第一步初始化 Chroma 数据库库importchromadbfromchromadb.configimportSettings# 创建持久化客户端重要指定路径否则数据只存在内存里clientchromadb.PersistentClient(path./chroma_db,# 数据存到本地目录settingsSettings(anonymized_telemetryFalse)# 关闭匿名数据上报)# 创建或获取 Collection相当于传统数据库的“表”collectionclient.get_or_create_collection(namemy_knowledge_base,metadata{hnsw:space:cosine}# 使用余弦相似度)print(f✅ 数据库已就绪Collection 名:{collection.name}))⚠️避坑 1一定要用PersistentClient并指定path否则重启后数据全丢。。第二步准备知识库数据把你要用的文档整理成纯文本。这里以一段技术文档为例# 模拟你的知识库文档实际可从txt/md文件读取documents[{id:doc_1,text:Chroma 是一个轻量级开源向量数据库专为 AI 应用设计支持 HNSW 索引和余弦相似度检索。。},{id:doc_2,text:向量嵌入模型将文本转换为高维向量语义相近的文本在向量空间中距离也更近。},{id:doc_3,text:RAG检索增强生成通过先检索相关知识库再将检索结果作为上下文输入大模型有效解决模型知识过期和幻觉问题。},{id:doc_4,text:相似度阈值推荐设置为0.7返回 Top-K 条最相似的结果过滤低相关度内容。。}]数据质量决定检索质量单篇文档建议控制在500-2000字主题集中。太长的文档先拆分否则向量会“稀释”语义。第三步加载嵌入模型文本转向量这里选用BGE-small模型——384 维兼顾精度和速度对中文友好普通电脑就能跑。跑。fromsentence_transformersimportSentenceTransformer# 加载模型首次运行会自动下载约400MBmodelSentenceTransformer(BAAI/bge-small-zh-v1.5)# 将文档列表转成向量texts[doc[text]fordocindocuments]embeddingsmodel.encode(texts)print(f✅ 已生成{len(embeddings)}条向量)print(f向量维度:{embeddings[0].shape})# 输出 (384,)print(f第一条向量前10个值:{embeddings[0][:10].round(4)})输出示例✅ 已生成 4 条向量 向量维度: (384,) 第一条向量前10个值: [ 0.0234 -0.4567 0.7890 -0.1234 0.5678 -0.9012 0.3456 -0.6789 0.2345 -0.7891]第四步向量入库把向量、原始文本、元数据如来源、分一起存入 Chromaa# 准备入库数据ids[doc[id]fordocindocuments]metadatas[{source:tech_docs}for_indocuments]# 可自定义元数据# 批量入库collection.add(idsids,embeddingsembeddings.tolist(),# numpy数组转listdocumentstexts,# 存原文方便展示metadatasmetadatas# 存元数据方便过滤)print(f✅ 已入库{collection.count()}条数据)⚠️避坑2批量入库建议每次不超过1000条否则可能内存溢出。第五步查询检索输入一个问题 → 转成向量 在 Chroma 里找最相似的 Top-K 个文档文档# 用户提问query向量数据库怎么做相似度检索# 问题转向量query_embeddingmodel.encode(query)# 执行检索resultscollection.query(query_embeddings[query_embedding.tolist()],n_results3,# 返回Top-3include[documents,distances,metadatas]# 要哪些字段)# 打印结果print(f 问题:{query}\n)fori,(doc,dist)inenumerate(zip(results[documents][0],results[distances][0])):print(f结果{i1}: 相似度得分{1-dist:.4f})# Chroma默认余弦距离转成相似度print(f内容:{doc}\n)输出示例 问题: 向量数据库怎么做相似度检索 结果1: 相似度得分 0.8934 内容: Chroma是一个轻量级开源向量数据库专为AI应用设计支持HNSW索引和余弦相似度检索。 结果2: 相似度得分 0.7821 内容: RAG检索增强生成通过先检索相关知识库再将检索结果作为上下文输入大模型... 结果3: 相似度得分 0.6543 内容: 相似度阈值推荐设置为0.7返回Top-K条最相似的结果...四、完整代码汇总把上面所有代码合并成一个完整脚本复制就能跑importchromadbfromchromadb.configimportSettingsfromsentence_transformersimportSentenceTransformer# 1. 初始化Chromaclientchromadb.PersistentClient(path./chroma_db,settingsSettings(anonymized_telemetryFalse))collectionclient.get_or_create_collection(namemy_knowledge_base,metadata{hnsw:space:cosine})# 2. 准备数据documents[{id:doc_1,text:Chroma是一个轻量级开源向量数据库专为AI应用设计支持HNSW索引和余弦相似度检索。},{id:doc_2,text:向量嵌入模型将文本转换为高维向量语义相近的文本在向量空间中距离也更近。},{id:doc_3,text:RAG通过检索增强生成先检索知识库再将结果输入大模型解决知识过期和幻觉问题。},{id:doc_4,text:相似度阈值推荐设置为0.7返回Top-K条最相似的结果过滤低相关度内容。}]# 3. 文本转向量modelSentenceTransformer(BAAI/bge-small-zh-v1.5)texts[doc[text]fordocindocuments]embeddingsmodel.encode(texts)# 4. 入库collection.add(ids[doc[id]fordocindocuments],embeddingsembeddings.tolist(),documentstexts,metadatas[{source:tech_docs}for_indocuments])# 5. 检索query向量数据库怎么检索相似内容query_embeddingmodel.encode(query)resultscollection.query(query_embeddings[query_embedding.tolist()],n_results3,include[documents,distances])print(f 问题:{query}\n)fori,(doc,dist)inenumerate(zip(results[documents][0],results[distances][0])):print(f结果{i1}: 相似度{1-dist:.4f})print(f内容:{doc}\n)五、实战避坑清单常见问题原因解决方案向量维度不一致报错查询时用了不同模型确保入库和查询用同一个嵌入模型重启后数据丢失没用持久化模式用PersistentClient(path...)检索结果不相关相似度阈值太高/文档质量差降低阈值到0.6或补充更多相关文档内存溢出单次入库数据量太大分批入库每批≤100六、进阶方向从原型Chroma 跑通后可以根据需求进一步升级一步升级| 场景 | 推荐方案 ||------|------|数据量突破 100 万| 迁移到 Qdrant 或 Milvus |v|需要混合搜索语义 关键词| Weaviate 原生支持 |生|检索精度不够| 换高维模型如bge-large-zh1024 维|2|需要部署为 API 服务| 用 FastAPI 封装检索逻辑 |索逻辑 ||Java/Spring Boot项目| 用LangChain4j集成Chroma/Qdrant |七、写这篇文章带你从零跑通了 Chroma BGE 的 RAG 检索系统。检索系统。核心流程就五步**准备数据 → 文本转向量 → 向量入库 → 问题转向量 → 相似度检这不仅是向量数据库的“Hello World”更是后续搭建企业知识库、智能客服、个人 AI 助手的基础。手的基础。把这一步跑通你就真正迈入了向量数据库实战的大门。下一篇我会深入**「高并发检索架构与索引调聊聊当数据量突破百万时如何通过 HNSW 参数调优、分片策略和集群部署来保持毫秒级响应欢迎关注。欢迎关注。 **参本文实战流程参考了 Chroma 官方文档及阿里云、百度开发者中心等平台的技术实践嵌入模型选用 BGE 系列代码经个人验证可运行。验证可运行。如需获取更多关于向量数据库选型对比、嵌入模型调优、高并发检索架构、混合搜索策略、向量索引算法详解HNSW/IVF、百万级数据性能压测、多模态向量检索实战等内容请持续关注本专栏《向量数据库从入门到精通》系列文章。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询