小白程序员必看:手把手教你本地开发RAG知识库,轻松玩转大模型(收藏版)
本文介绍了如何利用RAG技术构建本地知识库以增强大模型在特定领域的回答能力。首先分析了在大模型中直接输入大量文本的局限性提出了微调和RAG两种解决方案并详细阐述了RAG的工作原理。接着通过代码实例展示了如何制作向量数据库、进行知识检索召回并最终生成用于大模型的prompt。文章适合想要深入了解并实践大模型应用的开发者尤其是对本地RAG知识库构建感兴趣的小白程序员。在很多大模型平台上其实都已经内置了RAG知识库的功能通常都是上传文档之后做好分段切分然后在调用大模型的时候就会关联上知识库进行输出。本篇就尝试本地开发一个RAG知识库来学习一下具体的实现逻辑。需求分析通常我们与大模型交互时大模型只能回复它所学习到的知识。 有的平台支持联网查询可以补充部分信息。 不过如果我们希望它回答在某个领域下更垂类的问题时效果可能就不尽人意。这个时候就需要给大模型一些参考资料让它根据资料进行“开卷作答”。但是这就涉及到一个问题我们当然可以将所需的内容比如一篇字数比较少的文章扔给大模型并让它根据文章内容回复。但是如果当参考资料是一本书的时候我们不可能将所有几万字甚至几十上百万字的内容都直接在交互对话的过程中扔给大模型根本不现实。那么就有两个主要的思路微调根据资料内容制作训练集在原模型的基础上进行在训练得到一个更垂类的模型RAG另一种方法就是本篇文章中要讲的RAG技术。RAGRAGRetrieval-augmented Generation检索增强生成是一种结合了语言模型的信息检索技术。从链路上来说该技术并不改变大模型本身而是在用户与大模型交互的过程中增加一个步骤从知识库检索资料的过程。具体如下可以看到相当于是在用户的输入到达大模型之前先送给RAG这边根据用户的输入先对知识库进行信息检索然后拿到相关的部分然后构造prompt合并到用户的输入中再送给大模型。prompt示例你是一位知识助手请根据用户的问题和下列的片段生成准确的回答。用户问题{query}相关片段{separator.join(chunks)}请基于上述内容作答不要编造信息这样知识库和大模型的耦合度更低是一种可插拔的实现方式通过更换知识库的内容就可以实现大模型知识的更替成本更低。技术实现这里将通过代码段的方式对实现步骤进行讲解制作向量数据库首先我们要对知识库做处理将其向量化来可被RAG使用from typing import Listfrom sentence_transformers import SentenceTransformerfrom sentence_transformers import CrossEncoderimport chromadb# step1. 知识库分片def split_info_chunks(doc_file: str) - List[str]: :param doc_file: 知识库的文件 :return: with open(doc_file, r, encodingutf8) as f: content f.read() # 按段落进行分块 return [chunk for chunk in content.split(/n/n)]# 传入你的知识库文件chunks split_info_chunks(doc.txt)# step2. 向量化 使用embedding模型进行向量化embedding_model SentenceTransformer(shibing624/text2vec-base-chinese)def embed_chunk(chunk: str) - List[float]: embedding embedding_model.encode(chunk) return embedding.tolist()embeddings [embed_chunk(chunk) for chunk in chunks]# step3. 存入将向量化后的数据存入向量数据库# 内存型向量数据库chromadb_client chromadb.EphemeralClient()# 创建一个数据库表chromadb_collection chromadb_client.get_or_create_collection(namedefault)def save_embedding(chunks: List[str], embeddings: List[List[float]]) - None: # 定义id chromadb需要定义好id ids [str(i) for i in range(len(chunks))] chromadb_collection.add( documentschunks, embeddingsembeddings, idsids )save_embedding(chunks, embeddings)特殊说明sentence_transformer库用于加载embedding和cross-encoder模型详细使用可以参考https://sbert.net/docs/quickstart.htmlchromadb库一个流行的向量数据库在本demo中主要是对中文做处理所以使用的是shibing624/text2vec-base-chinese该模型关于模型的选择可自行上hugging face找合适的embedding模型至此在用户提问前的服务对于知识库的处理便做好了后续将会对做好的向量数据库进行查阅。知识检索召回本质上这里实现的就是基于用户输入来对向量数据库检索的过程发生在用户提问后对用户输入的处理# 召回即选出最匹配的若干个chunkdef retrieve(query: str, top_k: int) - List[str]: :param query: 用户输入的问题 :param top_k: 最匹配的chunk知识块的数量 :return: query_embedding embed_chunk(query) results chromadb_collection.query( query_embeddings[query_embedding], n_resultstop_k ) return results[documents][0]# 由于召回功能不一定能把最优的知识块排序到最前面# 所以需要重排模型 CrossEncoder进行检索内容的进一步优化def rerank(query: str, retrieved_chunks: List[str], top_k: int) - List[str]: :param query: 用户输入的问题 :param retrieved_chunks: 召回的chunks列表 :param top_k: 重新去最匹配的若干 :return: cross_encoder CrossEncoder(cross-encoder/mmarco-mMiniLMv2-L12-H384-v1) # 将每个召回结果和问题进行关联 pairs [(query, chunk) for chunk in retrieved_chunks] # 重新计算找回结果和问题的匹配度计算得分 scores cross_encoder.predict(pairs) chunk_with_score_list [(chunk, score) for chunk, score in zip(retrieved_chunks, scores)] chunk_with_score_list.sort(keylambda pair: pair[1], reverseTrue) # print(chunk_with_score_list) return [chunk for chunk, _ in chunk_with_score_list][:top_k]至此数据库检索以及优化部分也完成了。demo演示接下来就演示一下实际的效果这里的知识库doc.txt我选用的是鲁迅先生的《狂人日记》来进行RAG演示# 假设用户的提问query 妹妹发生什么事了# 开始进行知识库召回检索和优化# 优先检索最匹配的5个知识块retrieved_chunks retrieve(query, 5)# 对知识块的关联性进行重新排序返回关联度最高的3个知识块reranked_chunks rerank(query, retrieved_chunks, 3)# 将用户提问和返回的知识块拼接成一个promptseparator /n/nprompt f你是一位知识助手请根据用户的问题和下列的片段生成准确的回答。用户问题{query}相关片段{separator.join(reranked_chunks)}请基于上述内容作答不要编造信息print(prompt)#后续就是将该prompt发送给大模型等待大模型的返回这里就不再实现了运行后最终prompt如上相关片段就是RAG的结果本篇主要是应用化实现实际产品中仍需进一步优化。如何学习大模型 AI 由于新岗位的生产效率要优于被取代岗位的生产效率所以实际上整个社会的生产效率是提升的。但是具体到个人只能说是“最先掌握AI的人将会比较晚掌握AI的人有竞争优势”。这句话放在计算机、互联网、移动互联网的开局时期都是一样的道理。我在一线科技企业深耕十二载见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事早已在效率与薪资上形成代际优势我意识到有很多经验和知识值得分享给大家也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我们整理出这套AI 大模型突围资料包✅ 从零到一的 AI 学习路径图✅ 大模型调优实战手册附医疗/金融等大厂真实案例✅ 百度/阿里专家闭门录播课✅ 大模型当下最新行业报告✅ 真实大厂面试真题✅ 2026 最新岗位需求图谱所有资料 ⚡️ 朋友们如果有需要《AI大模型入门进阶学习资源包》下方扫码获取~① 全套AI大模型应用开发视频教程包含提示工程、RAG、LangChain、Agent、模型微调与部署、DeepSeek等技术点② 大模型系统化学习路线作为学习AI大模型技术的新手方向至关重要。 正确的学习路线可以为你节省时间少走弯路方向不对努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划带你从零基础入门到精通③ 大模型学习书籍文档学习AI大模型离不开书籍文档我精选了一系列大模型技术的书籍和学习文档电子版它们由领域内的顶尖专家撰写内容全面、深入、详尽为你学习大模型提供坚实的理论基础。④ AI大模型最新行业报告2025最新行业报告针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估以了解哪些行业更适合引入大模型的技术和应用以及在哪些方面可以发挥大模型的优势。⑤ 大模型项目实战配套源码学以致用在项目实战中检验和巩固你所学到的知识同时为你找工作就业和职业发展打下坚实的基础。⑥ 大模型大厂面试真题面试不仅是技术的较量更需要充分的准备。在你已经掌握了大模型技术之后就需要开始准备面试我精心整理了一份大模型面试题库涵盖当前面试中可能遇到的各种技术问题让你在面试中游刃有余。以上资料如何领取为什么大家都在学大模型最近科技巨头英特尔宣布裁员2万人传统岗位不断缩减但AI相关技术岗疯狂扩招有3-5年经验大厂薪资就能给到50K*20薪不出1年“有AI项目经验”将成为投递简历的门槛。风口之下与其像“温水煮青蛙”一样坐等被行业淘汰不如先人一步掌握AI大模型原理应用技术项目实操经验“顺风”翻盘这些资料真的有用吗这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理现任上海殷泊信息科技CEO其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证服务航天科工、国家电网等1000企业以第一作者在IEEE Transactions发表论文50篇获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。资料内容涵盖了从入门到进阶的各类视频教程和实战项目无论你是小白还是有些技术基础的技术人员这份资料都绝对能帮助你提升薪资待遇转行大模型岗位。以上全套大模型资料如何领取