大模型本地RAG知识库搭建全攻略:解锁“开卷作答“能力,提升专业问答效果!
在很多大模型平台上其实都已经内置了RAG知识库的功能通常都是上传文档之后做好分段切分然后在调用大模型的时候就会关联上知识库进行输出。本篇就尝试本地开发一个RAG知识库来学习一下具体的实现逻辑。需求分析通常我们与大模型交互时大模型只能回复它所学习到的知识。 有的平台支持联网查询可以补充部分信息。 不过如果我们希望它回答在某个领域下更垂类的问题时效果可能就不尽人意。这个时候就需要给大模型一些参考资料让它根据资料进行“开卷作答”。但是这就涉及到一个问题我们当然可以将所需的内容比如一篇字数比较少的文章扔给大模型并让它根据文章内容回复。但是如果当参考资料是一本书的时候我们不可能将所有几万字甚至几十上百万字的内容都直接在交互对话的过程中扔给大模型根本不现实。那么就有两个主要的思路微调根据资料内容制作训练集在原模型的基础上进行在训练得到一个更垂类的模型RAG另一种方法就是本篇文章中要讲的RAG技术。RAGRAGRetrieval-augmented Generation检索增强生成是一种结合了语言模型的信息检索技术。从链路上来说该技术并不改变大模型本身而是在用户与大模型交互的过程中增加一个步骤从知识库检索资料的过程。具体如下可以看到相当于是在用户的输入到达大模型之前先送给RAG这边根据用户的输入先对知识库进行信息检索然后拿到相关的部分然后构造prompt合并到用户的输入中再送给大模型。prompt示例你是一位知识助手请根据用户的问题和下列的片段生成准确的回答。用户问题{query} 相关片段 {separator.join(chunks)} 请基于上述内容作答不要编造信息这样知识库和大模型的耦合度更低是一种可插拔的实现方式通过更换知识库的内容就可以实现大模型知识的更替成本更低。技术实现这里将通过代码段的方式对实现步骤进行讲解制作向量数据库首先我们要对知识库做处理将其向量化来可被RAG使用from typing import List from sentence_transformers import SentenceTransformer from sentence_transformers import CrossEncoder import 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模型至此在用户提问前的服务对于知识库的处理便做好了后续将会对做好的向量数据库进行查阅。知识检索召回本质上这里实现的就是基于用户输入来对向量数据库检索的过程发生在用户提问后对用户输入的处理# 召回即选出最匹配的若干个chunk def 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) # 将用户提问和返回的知识块拼接成一个prompt separator \n\n prompt f你是一位知识助手请根据用户的问题和下列的片段生成准确的回答。 用户问题{query} 相关片段 {separator.join(reranked_chunks)} 请基于上述内容作答不要编造信息 print(prompt) #后续就是将该prompt发送给大模型等待大模型的返回这里就不再实现了运行后最终prompt如上相关片段就是RAG的结果本篇主要是应用化实现实际产品中仍需进一步优化。2026年AI行业最大的机会毫无疑问就在应用层字节跳动已有7个团队全速布局Agent大模型岗位暴增69%年薪破百万腾讯、京东、百度开放招聘技术岗80%与AI相关……如今超过60%的企业都在推进AI产品落地而真正能交付项目的大模型应用开发工程师****却极度稀缺落地AI应用绝对不是写几个prompt调几个API就能搞定的企业真正需要的是能搞定这三项核心能力的人✅RAG融入外部信息修正模型输出给模型装靠谱大脑✅Agent智能体让AI自主干活通过工具调用Tools环境交互多步推理完成复杂任务。比如做智能客服等等……✅微调针对特定任务优化让模型适配业务目前脉脉上有超过1000家企业发布大模型相关岗位人工智能岗平均月薪7.8w实习生日薪高达4000远超其他行业收入水平技术的稀缺性才是你「值钱」的关键具备AI能力的程序员比传统开发高出不止一截有的人早就转行AI方向拿到百万年薪AI浪潮正在重构程序员的核心竞争力现在入场仍是最佳时机我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】⭐️从大模型微调到AI Agent智能体搭建剖析AI技术的应用场景用实战经验落地AI技术。从GPT到最火的开源模型让你从容面对AI技术革新大模型微调掌握主流大模型如DeepSeek、Qwen等的微调技术针对特定场景优化模型性能。学习如何利用领域数据如制造、医药、金融等进行模型定制提升任务准确性和效率。RAG应用开发深入理解检索增强生成Retrieval-Augmented Generation, RAG技术构建高效的知识检索与生成系统。应用于垂类场景如法律文档分析、医疗诊断辅助、金融报告生成等实现精准信息提取与内容生成。AI Agent智能体搭建学习如何设计和开发AI Agent实现多任务协同、自主决策和复杂问题解决。构建垂类场景下的智能助手如制造业中的设备故障诊断Agent、金融领域的投资分析Agent等。如果你也有以下诉求快速链接产品/业务团队参与前沿项目构建技术壁垒从竞争者中脱颖而出避开35岁裁员危险期顺利拿下高薪岗迭代技术水平延长未来20年的新职业发展……那这节课你一定要来听因为留给普通程序员的时间真的不多了立即扫码即可免费预约「AI技术原理 实战应用 职业发展」「大模型应用开发实战公开课」还有靠谱的内推机会直聘权益完课后赠送大模型应用案例集、AI商业落地白皮书