资讯动态

RAG 入门第一课:从零构建你的第一个“知识库”

发布时间:2026/10/30 1:52:48 来源:尧图企业网站定制
什么是 RAG想象一下你正在参加一场开卷考试。大模型LLM是你博学多才但可能记不清具体的细节比如“公司规定年假到底有几天”。RAG就是允许你在考试前先把课本公司手册、文档复印一份整理成一本**“速查笔记”**。当你遇到不会的问题时你先去翻这本“速查笔记”找到答案然后结合自己的知识回答。RAG 的核心流程就是数据准备 - 存入知识库 - 遇到问题时检索 - 生成答案。核心组件我们的“三件套”为了构建这个系统我们使用了业界最标准的 Python 组合大脑Embedding 模型sentence-transformers作用翻译官。把人类的文字如“怎么请假”翻译成计算机能理解的数字列表向量。仓库向量数据库chromadb作用图书管理员。负责存储这些数字并能以毫秒级的速度找到“意思最相近”的内容。胶水Python 代码作用包工头。把数据切分、清洗然后指挥模型和数据库工作。实战代码构建完整的 RAG 闭环以下是我们今天编写的核心代码逻辑涵盖了从“存”到“取”的全过程。# 安装向量数据库 ChromaDB pip install chromadb # 安装嵌入模型库 sentence-transformers pip install sentence-transformers # 安装数据处理常用的 numpy pip install numpy第一步准备数据切分计算机不喜欢处理几万字的大文章我们需要把它切成小块。# 模拟一本 500 页的“员工手册”raw_text 公司规定员工每年有 10 天带薪年假。 申请年假需要提前 3 天在 OA 系统提交。 另外病假每年有 5 天不需要扣工资但需要提供医院证明。 # 简单的切分逻辑按句号切分chunks[chunk.strip()forchunkinraw_text.split(。)ifchunk.strip()]第二步初始化模型与数据库这里我们加载了“翻译官”和“仓库”。importos# 关键配置使用国内镜像源解决下载慢的问题os.environ[HF_ENDPOINT]https://hf-mirror.comimportchromadbfromsentence_transformersimportSentenceTransformer# 加载更强、更准的中文模型这是关键modelSentenceTransformer(all-MiniLM-L6-v2)# 2. 初始化数据库仓库clientchromadb.PersistentClient(path./my_rag_db)collectionclient.get_or_create_collection(nameemployee_handbook)第三步数据入库索引这是 RAG 的“记忆”阶段。# 准备元数据和 IDmetadatas[{category:假期}for_inchunks]ids[fid_{i}foriinrange(len(chunks))]embeddingsmodel.encode(chunks).tolist()# 直接把整个列表丢进去print(正在存入数据...)collection.add(embeddingsembeddings,documentschunks,# 原文内容metadatasmetadatas,# 标签idsids# 唯一编号)print(入库完成)使用Chroma 默认的 embedding 模型(all-MiniLM-L6-v2极小、英文为主、轻量化模型)# 用户提问 query 年假怎么申请# 检索使用chromadb的内置文本查询功能 results collection.query(query_texts[query],n_results1 # 只要最相关的一条)# 提取找到的上下文 context results[documents][0][0]print(context)入库 和 查询 必须使用完全相同的 embedding 模型如果不指定embedding 模型会使用Chroma 默认的 embedding 模型(all-MiniLM-L6-v2极小、英文为主、轻量化模型)**对比**但是chroma 默认的 embedding 模型只能做玩具 Demo不能做真实项目外接的 sentence-transformers 模型效果碾压默认模型 10 倍以上。第四步检索与生成问答这是 RAG 的“思考”阶段# 1. 用户提问query年假怎么申请# 2. 检索把问题变成向量去数据库找最相似的片段query_embeddingmodel.encode([query]).tolist()resultscollection.query(query_embeddingsquery_embedding,n_results1# 只要最相关的一条)# 提取找到的上下文contextresults[documents][0][0]# 3. 生成构造提示词把“参考资料”和“问题”打包promptf 你是一个智能助手。请根据以下参考资料回答问题。 参考资料{context}用户问题{query}你的回答 # 4. 发送给大模型伪代码# final_answer llm.generate(prompt)# print(final_answer)避坑指南环境配置的“九九八十一难”网络墙问题报错ConnectionError或下载卡住。原因Hugging Face 官方源在国内无法访问。解决设置环境变量os.environ[HF_ENDPOINT] https://hf-mirror.com。文件格式误区报错cant open file ... .ipynb。原因不能用python xxx.ipynb命令运行 Notebook 文件。解决在 Jupyter 界面直接点击运行或者将其转换为.py文件。离线模式陷阱报错Outgoing traffic has been disabled。原因设置了TRANSFORMERS_OFFLINE1但本地其实没有模型文件。解决第一次运行时不要开启离线模式或者手动下载模型文件到本地。总结相当于将知识库向量化然后放在存储仓库然后当用户提问的时候同样将问题向量化根据相似向量度去查询存储仓库召回片段把检索到的片段用户问题一起喂给大模型生成最终答案‌向量化知识库→入库→问题向量化→按相似度召回片段→把检索到的片段用户问题一起喂给大模型生成最终答案‌

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑