[大模型实战 04] 从玩具到生产:基于 ChromaDB 打造工程级 RAG 系统
前言各位友人们在上一节中我们大概知道了大模型的构成safetensor格式的大模型的文件组成transformers库的基本使用。我们已经能够使用大模型去做一些简单对话应用了它可以是上知天文下知地理中间还能知道人情冷暖。但是我们需要加一个限定词在训练数据截止日期前的。因为训练一次需要耗费很多的计算资源时间和人力当我们想让它知道一些新知识的时候比如让它知道现在美国的总统是拜登还是特朗普我们可以在对话中告诉他这没问题但是如果我们想让它知道更多比如我的私人日记?比如我刚写的那篇博客比如公司的员工手册, 比如自己产品的使用说明书这类私有数据是大模型企业应用的痛点毕竟大模型是基于在互联网上公开数据训练的。重新把这部分资料加进去再训练一下模型也不是不行但是有点没有性价比这时候就引出了大模型落地应用的核心技术-RAG (Retrieval-Augmented Generation检索增强生成)。1. RAG检索增强生成1.1 什么是RAG?考试的时候如果考到不会的知识不知道各位友人们会不会头疼如果这时候允许我们翻书现去书里找我们也很有可能找得到对应的答案哪怕我们可能完全没学过。这就是RAG的大致思路不让模型凭空回忆而是先给它找资料。RAG检索增强生成,字面上讲就是 拿到考题-然后去翻书通过目录之类的索引快速翻到检索相关的内容-再根据这些内容增强了的内容回答出问题生成回答。对比简单地把东西一股脑全部跟大模型说一遍我们能清楚得发现我们只用了检索到的那一部分内容并没有让整本书大模型的脑子将占用, 这就是RAG的效率体现。1.2 RAG的步骤RAG技术的思路很简单但是实现并非只是一个单一的技术能实现的它有一套流水线流水线。 把这头大象放进冰箱总共需要两步准备好数据和让模型拿到数据。第一个阶段数据准备(Indexing) - 把书装进书包在大模型能够翻书之前咱们得先把我们想给它看的书整理好放进书包里。加载 (Load)咱们的资料可能是各种各样的格式一般大模型是不认识这么些格式的所以我们就需要把 PDF、Word、网页等各种格式的文件读进来统一提取出纯文本。切分 (Chunking)大模型一次吃不下整本书,就和我们一眼看不完整本《三国演义》一样它有上下文长度限制。我们需要把长文本切成一个个小的片段 (Chunks)比如每 500 个字切一段。向量化 (Embedding)这是最关键的一步计算机无法直接比较“苹果”和“iphone”是不是相关的。我们需要用一个专门的模型Embedding Model把每一段文字变成一串数字向量比如[0.1, -0.5, 0.8, ...],是不是有点耳熟对这和大模型训练的Embedding是一个思路但是我们一般会使用特制的嵌入模型来做这个专业的事情。在这个数学空间里语义相近的词距离就越近, 这样我们就能知道这本书中的所有向量哪些是和我们的问题相关的了。存储 (Storage)把这些向量和对应的文字存入向量数据库 (Vector DB)中。第二个阶段应用数据给大模型生成Retrieval Generation- 开卷答题拿到书了之后我们想要翻书就得找到和问题有关系的内容然后再将这些内容和我们自己的常识结合起来对提出的问题进行答题。问题向量化(Embedding)要想知道用户的提问例如“火星基地吃什么”和内容的相关性我们就需要像对准备的数据一样用同一个 Embedding 模型将问题变成向量。检索 (Retrieval)拿着这个“问题向量”去向量数据库里搜, 去找到关系性高的内容。系统会计算“哪个文档片段的向量和问题向量的距离最近”找出最相似的前 3-5 个片段 (Top-k)。增强 (Augmentation)把这 3-5 个片段拼在一起和用户的问题组合成一个超级长的 Prompt。Prompt 模板示例你是一个助手。请根据以下参考资料回答问题。参考资料[片段1]... [片段2]...用户问题火星基地吃什么生成 (Generation)把这个 Prompt 喂给大模型LLM。大模型阅读资料总结并生成最终答案。2. RAG技术选型好了理论我们已经懂了现在我们撸起袖子准备来实操一下子吧。我们打算从零开始快速搭建一个工程级的RAG系统:私有API助手, 在我直接告诉各位友人们我们要用到的工具前我觉得也有必要大概让各位友人们知道还有哪些别的选择我们为什么选择了这几个。2.1 框架: LlamaIndex vs. LangChainLangChain万能胶水适合做复杂的 Agent智能体但写 RAG 代码比较啰嗦抽象层级太碎我们后面写智能体的时候如果有精力做智能体的教程的话再来使用它。LlamaIndex数据专家。专门为 RAG 也就是“索引和检索”而生。接口极度简洁且对数据清洗Ingestion的处理更专业。结论我们做RAG直接先上LlamaIndex, 快速地实现效果。2.2 嵌入模型 (Embedding)BGE vs. OpenAIOpenAI (text-embedding-3)效果好但要钱且数据要传给 OpenAI隐私风险。BAAI/bge-small-zh-v1.5国货之光。中文效果霸榜体积极小几百 MB完全可以在 Kaggle 本地跑。结论为了免费和隐私首选BGE-Small。PS: 如果是英文资料的话建议换成BAAI/bge-small-en-v1.5或者 OpenAI 的text-embedding-3-small2.3 向量数据库Chroma vs. Milvus vs. PineconePinecone纯云端 SaaS不可本地部署对 Kaggle 不友好。Milvus性能强悍适合十亿级数据需要 Docker 部署适合数据量大的时候使用但是对于咱们的这个项目来说太重了。ChromaDB轻量级王者。可以像 SQLite 一样以“本地文件”形式存在也可以部署成服务器。结论中小型项目首选ChromaDB。3. 上手实操项目背景假设我们是一家名叫 DeepStar 的初创公司我们有一套内部绝密的 API 文档新来的实习生总是问重复的问题。我们要用 RAG 让他自己查。3.1 环境配置 (Kaggle)启动 Kaggle Notebook确保Internet: OnAccelerator: GPU T4 x2。# 1. 更新transformers及其相关库 !pip install -U transformers peft accelerate bitsandbytes sentence-transformers # 2. 安装 LlamaIndex 核心及相关插件 !pip install llama-index-core llama-index-llms-huggingface llama-index-embeddings-huggingface # 3. 安装 ChromaDB 向量库支持 !pip install llama-index-vector-stores-chroma chromadb下载依赖库可能会需要一点时间之后我看看能不能在kaggle上用uv去做包管理。3.2 造数据模拟企业内部文档我们创建两份文档一份是核心接口定义一份是错误码说明。import os data_path /kaggle/working/data # 创建数据目录 os.makedirs(data_path, exist_okTrue) # 文档 1: 核心 API 定义 api_doc [机密] DeepStar 核心交易接口 v2.0 1. 创建订单 API: POST /api/v2/order/create - 必填参数: user_id (String), amount (Decimal), token (X-Auth-Token) - 特殊逻辑: 如果 amount 10000, 必须额外传递 audit_code (审计码)。 - 频率限制: 单用户每秒最多 5 次调用。 2. 查询余额 API: GET /api/v2/balance - 缓存策略: 默认缓存 5 秒。传递 no-cachetrue 可强制刷新。 # 文档 2: 错误码字典 error_doc [机密] DeepStar 全局错误码字典 - E1001: 签名验证失败。请检查 X-Auth-Token 是否过期。 - E2009: 余额不足。注意冻结金额不计入可用余额。 - E5003: 审计风控拦截。大额交易未通过自动审计请联系人工客服。 with open(f{/data_path}/api_specs.txt, w) as f: f.write(api_doc) with open(f/{data_path}/error_codes.txt, w) as f: f.write(error_doc) print([Success] 企业文档库已就绪)3.3 初始化大脑与眼睛 (Settings)提前根据自己的情况来配置待会儿用的词嵌入模型和推理模型。embedding_model BAAI/bge-small-zh-v1.5 llm Qwen/Qwen2.5-7B-Instruct # 在本地服务器可以用modelscope下载下来, 把路径配置在这儿利用Settings全局配置将默认的 OpenAI 替换为本地模型。import torch from llama_index.core import Settings from llama_index.llms.huggingface import HuggingFaceLLM from llama_index.embeddings.huggingface import HuggingFaceEmbedding # 1. 设置 Embedding (眼睛) # 使用 BGE-Small显存占用极低检索中文效果极佳 print(正在加载 Embedding 模型...) Settings.embed_model HuggingFaceEmbedding( model_nameembedding_model ) # 2. 设置 LLM (大脑) # 使用 Qwen2.5-7B-Instruct print(正在加载 LLM 模型...) Settings.llm HuggingFaceLLM( model_namellm, tokenizer_namellm, context_window30000, max_new_tokens512, generate_kwargs{temperature: 0.1, do_sample: True}, # 技术文档要求严谨温度调低 device_mapauto, model_kwargs{dtype: torch.float16, trust_remote_code: True} ) print([Success] 模型加载完毕)3.4 核心组件ChromaDB 持久化流水线这是本篇最关键的代码。我们要实现如果本地已经有数据库就直接读如果没有才去解析文档。import chromadb from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, StorageContext from llama_index.vector_stores.chroma import ChromaVectorStore # 定义持久化路径 CHROMA_DB_PATH /kaggle/working/chroma_db COLLECTION_NAME deepstar_docs # 1. 初始化 Chroma 客户端 (PersistentClient 实现了写硬盘功能) db_client chromadb.PersistentClient(pathCHROMA_DB_PATH) # 2. 创建或获取集合 (Collection) chroma_collection db_client.get_or_create_collection(COLLECTION_NAME) # 3. 将 Chroma 对接给 LlamaIndex vector_store ChromaVectorStore(chroma_collectionchroma_collection) storage_context StorageContext.from_defaults(vector_storevector_store) # 4. 智能加载逻辑 (幂等性设计) if chroma_collection.count() 0: print([Info] 数据库为空开始初始化...) # 读取 data 目录下的所有文件 documents SimpleDirectoryReader(./data).load_data() # 建立索引并自动存入 Chroma (Ingestion) index VectorStoreIndex.from_documents( documents, storage_contextstorage_context ) print([Success] 数据写入完成) else: print(f[Info] 发现 {chroma_collection.count()} 条存量数据直接加载...) # 直接从 Vector Store 加载无需重新计算 Embedding index VectorStoreIndex.from_vector_store( vector_store, storage_contextstorage_context ) print([Success] 索引加载完成)3.5 验收测试复杂逻辑问答现在我们模拟实习生提问。注意这个问题需要结合两个文档接口定义 错误码以及逻辑推理才能回答。# 创建查询引擎 query_engine index.as_query_engine(similarity_top_k3) # 实习生的提问 questions [ 创建订单时如果你只有 100 块钱能传 amount20000 吗为什么, 我收到了 E5003 错误这是什么意思该怎么办 ] print( 开始 RAG 问答测试 ) for q in questions: print(f\n[Question] {q}) response query_engine.query(q) print(f[Answer]\n{str(response)}) # 打印引用源 (Debug 必备看看它参考了哪个文件) source_file response.source_nodes[0].metadata.get(file_name) print(f[Source]: {source_file})答复如下4. 进阶技巧如何管理你的数据库既然用了 ChromaDB我们就可以像查 SQL 一样查它。这在 Debug 时非常有用。# 偷看数据库里的前 2 条记录 data chroma_collection.peek(limit2) print(\n[Debug] 数据库抽查:) for i, doc in enumerate(data[documents]): print(f--- 片段 {i} ---) print(f内容: {doc[:50]}...) # 只打印前50个字 print(f来源: {data[metadatas][i]})5. 完整代码完整代码可以点击kaggle笔记获取5. 常见问题 (QA)Q: 为什么不直接把所有文档都塞进 Prompt 里 (Long Context)A:虽然现在很多模型支持长文本比如 128k但直接塞文档有三个问题太贵Token 是要钱的如果用商业 API。太慢上下文越长推理越慢。记不住大模型有“长上下文迷失 (Lost in the Middle)”现象塞太多反而会忽略中间的关键细节。RAG 相当于先做了一次筛选只给模型看最有用的效果反而更好。Q: LlamaIndex 和 LangChain 我该学哪个A:做RAG/知识库首选LlamaIndex它对数据索引、切分、向量化做了极其深度的优化接口更简洁。做Agent/工具调用首选LangChain它的生态和工具链更丰富。结论咱们这个项目专注于“找资料”所以 LlamaIndex 是最佳选择。Q: ChromaDB 的数据存在哪里了A:在上面代码中我们通过PersistentClient指定了路径/kaggle/working/chroma_db。它就像 SQLite 一样数据就存在这个文件夹里的.sqlite3和.bin文件中。咱们可以把这个文件夹拷贝到任何电脑上无需重新向量化就能直接使用。想入门 AI 大模型却找不到清晰方向备考大厂 AI 岗还在四处搜集零散资料别再浪费时间啦2025 年AI 大模型全套学习资料已整理完毕从学习路线到面试真题从工具教程到行业报告一站式覆盖你的所有需求现在全部免费分享扫码免费领取全部内容​一、学习必备100本大模型电子书26 份行业报告 600 套技术PPT帮你看透 AI 趋势想了解大模型的行业动态、商业落地案例大模型电子书这份资料帮你站在 “行业高度” 学 AI1. 100本大模型方向电子书2. 26 份行业研究报告覆盖多领域实践与趋势报告包含阿里、DeepSeek 等权威机构发布的核心内容涵盖职业趋势《AI 职业趋势报告》《中国 AI 人才粮仓模型解析》商业落地《生成式 AI 商业落地白皮书》《AI Agent 应用落地技术白皮书》领域细分《AGI 在金融领域的应用报告》《AI GC 实践案例集》行业监测《2024 年中国大模型季度监测报告》《2025 年中国技术市场发展趋势》。3. 600套技术大会 PPT听行业大咖讲实战PPT 整理自 2024-2025 年热门技术大会包含百度、腾讯、字节等企业的一线实践安全方向《端侧大模型的安全建设》《大模型驱动安全升级腾讯代码安全实践》产品与创新《大模型产品如何创新与创收》《AI 时代的新范式构建 AI 产品》多模态与 Agent《Step-Video 开源模型视频生成进展》《Agentic RAG 的现在与未来》工程落地《从原型到生产AgentOps 加速字节 AI 应用落地》《智能代码助手 CodeFuse 的架构设计》。二、求职必看大厂 AI 岗面试 “弹药库”300 真题 107 道面经直接抱走想冲字节、腾讯、阿里、蔚来等大厂 AI 岗这份面试资料帮你提前 “押题”拒绝临场慌1. 107 道大厂面经覆盖 Prompt、RAG、大模型应用工程师等热门岗位面经整理自 2021-2025 年真实面试场景包含 TPlink、字节、腾讯、蔚来、虾皮、中兴、科大讯飞、京东等企业的高频考题每道题都附带思路解析2. 102 道 AI 大模型真题直击大模型核心考点针对大模型专属考题从概念到实践全面覆盖帮你理清底层逻辑3. 97 道 LLMs 真题聚焦大型语言模型高频问题专门拆解 LLMs 的核心痛点与解决方案比如让很多人头疼的 “复读机问题”三、路线必明AI 大模型学习路线图1 张图理清核心内容刚接触 AI 大模型不知道该从哪学起这份「AI大模型 学习路线图」直接帮你划重点不用再盲目摸索路线图涵盖 5 大核心板块从基础到进阶层层递进一步步带你从入门到进阶从理论到实战。L1阶段:启航篇丨极速破界AI新时代L1阶段了解大模型的基础知识以及大模型在各个行业的应用和分析学习理解大模型的核心原理、关键技术以及大模型应用场景。L2阶段攻坚篇丨RAG开发实战工坊L2阶段AI大模型RAG应用开发工程主要学习RAG检索增强生成包括Naive RAG、Advanced-RAG以及RAG性能评估还有GraphRAG在内的多个RAG热门项目的分析。L3阶段跃迁篇丨Agent智能体架构设计L3阶段大模型Agent应用架构进阶实现主要学习LangChain、 LIamaIndex框架也会学习到AutoGPT、 MetaGPT等多Agent系统打造Agent智能体。L4阶段精进篇丨模型微调与私有化部署L4阶段大模型的微调和私有化部署更加深入的探讨Transformer架构学习大模型的微调技术利用DeepSpeed、Lamam Factory等工具快速进行模型微调并通过Ollama、vLLM等推理部署框架实现模型的快速部署。L5阶段专题集丨特训篇 【录播课】四、资料领取全套内容免费抱走学 AI 不用再找第二份不管你是 0 基础想入门 AI 大模型还是有基础想冲刺大厂、了解行业趋势这份资料都能满足你现在只需按照提示操作就能免费领取扫码免费领取全部内容​2025 年想抓住 AI 大模型的风口别犹豫这份免费资料就是你的 “起跑线”

相关新闻

运维转行网络安全:优势复用+6个月实战转型,新手也能稳上岸

运维转行网络安全:优势复用+6个月实战转型,新手也能稳上岸

运维转行网络安全:优势复用6个月实战转型,新手也能稳上岸 从事运维工作1-3年的同学,大多会陷入一个困境:每天重复部署服务器、排查系统故障、维护网络正常运行,技术单一且职业天花板明显,薪资涨幅缓慢。而…

2026/7/6 1:28:32 阅读更多 →
lvgl v8之创建对象时去除黑色边框

lvgl v8之创建对象时去除黑色边框

本质原因是因为创建和窗体一样大的对象时,会默认出现添加可拖拽属性,导致出现黑色边框 g_bg = lv_obj_create(lv_scr_act());lv_obj_set_size(g_bg, 480, 320);lv_obj_set_

2026/7/5 18:37:35 阅读更多 →
超声波气象站:无轴承无磨损,告别机械风杯易坏难题

超声波气象站:无轴承无磨损,告别机械风杯易坏难题

在户外气象监测场景中,很多人都会遇到同一个困扰:机械风杯气象站用着用着就坏了,频繁卡顿、停转,维修更换费时费力,严重影响监测效率。核心症结就在于机械风杯的轴承设计——长期转动摩擦易磨损、积尘卡滞,…

2026/7/5 22:31:52 阅读更多 →

最新新闻

47_AI短片实战第二十弹:AIGCAI视频生成全流程实战(第十一部分):动态增强、镜头重组与剪辑软件核心设置

47_AI短片实战第二十弹:AIGCAI视频生成全流程实战(第十一部分):动态增强、镜头重组与剪辑软件核心设置

剪辑进入最终冲刺。本节课将解决两个常见问题:画面静止缺乏运动感和镜头叙事逻辑不顺。你将学到:如何用震动/动态效果拯救呆板镜头、何时果断停用“鸡肋”素材、如何通过复合片段二次变速控制怪兽奔跑冲击力、以及剪辑软件中“磁吸”“联动”等设置对效率的影响。 一、解决“…

2026/7/6 14:55:47 阅读更多 →
jesd204b学习记录

jesd204b学习记录

该篇文章记录自己学习204b的心得1. 204b是什么?JESD204B是一种由JEDEC(联合电子设备工程委员会)制定的高速串行接口标准,专门用于连接高速数据转换器(ADC/DAC)与逻辑器件(如FPGA/ASIC&#xff0…

2026/7/6 14:55:47 阅读更多 →
聊天智能体开发基础

聊天智能体开发基础

如今AI已经能够在生活中的方方面面帮助我们,我也想做一个为自己量身定做的智能体,那么,下面我就介绍一下如何创建一个小智能体。 一、准备工作 1.APIKey 要在我们的项目中接入市面上的大模型,APIKey是必不可少的,下面我…

2026/7/6 14:53:46 阅读更多 →
个人介绍及学习目标

个人介绍及学习目标

我是一名准大学生,正在学习编程,边学边探索未来专业方向和就业目标 我的编程目标是学会C语言,辅助将来工科专业学习(本人喜欢工科>计算机,但是如果C语言学习中发现自己很喜欢很擅长计算机的话也许会报计算机&#x…

2026/7/6 14:53:46 阅读更多 →
于 Simulink 的双向 DC-DC 变换器在恒压(CV)与恒流(CC)模式下的切换仿真

于 Simulink 的双向 DC-DC 变换器在恒压(CV)与恒流(CC)模式下的切换仿真

目录 一、 核心原理:双闭环控制与模式无缝切换 1. 双闭环控制架构 2. CC 与 CV 模式的切换逻辑 3. 防止“反复横跳”的滞回比较器 二、 Simulink 建模步骤(手把手) Step 1:搭建双向 Buck-Boost 主功率级 Step 2:构建双闭环控制器与 PI 参数整定 Step 3:实现 CC-C…

2026/7/6 14:51:44 阅读更多 →
YOLOv10模型改进-特定领域应用-第96篇:YOLOv10改进策略【特定领域应用】| YOLOv10在无人机巡检中的应用

YOLOv10模型改进-特定领域应用-第96篇:YOLOv10改进策略【特定领域应用】| YOLOv10在无人机巡检中的应用

一、本文介绍 本文记录的是YOLOv10在无人机巡检领域的应用。无人机巡检需要检测电力设施、道路状况、建筑物损伤等目标,YOLOv10凭借其高效的推理速度和准确的检测能力,成为无人机巡检领域的首选目标检测算法。 二、无人机巡检场景分析 2.1 检测目标 无人…

2026/7/6 14:45:39 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻