RAG实战:让AI回答你自己的文档
欢迎来到知识与创意的殿堂 — 远见阁小民的世界 在这里我们一起探索技术的奥秘一起在知识的海洋中遨游。 在这里每个错误都是成长的阶梯每条建议都是前进的动力。 在这里我们一起成长一起进步让我们在知识的世界里畅游无阻共同创造一个充满智慧和创新的明天。 点击关注加入我们的技术探索之旅吧❤️✨✨博客主页远见阁小民的主页本文专栏AI专栏其他专栏后端专栏 Linux专栏 白帽学徒笔记大家好我是小民见字欢喜。前面我们用Python接入了DeepSeek API搭了一个自己的AI助手还做了多轮对话、文章总结、日报生成这些实用的功能。我手头有一堆自己的文档想让AI根据这些内容来回答而不是瞎编该怎么做呢今天咱们就来解决这个——RAG检索增强生成。01 先说说RAG是什么RAG Retrieval检索 Augmented增强 Generation生成一句话解释➔不是让AI凭记忆瞎编而是先从你的文档里找到相关内容再让AI根据这些内容来回答。举个例子普通AI ➔ “公司的年假政策是……可能瞎编”RAG ➔ 先去文档里找到“年假政策”那一页然后把内容给AI让AI照着回答流程如下用户提问 → 检索文档 → 找到相关内容 → 拼接提示词 → AI回答02 我们这次做什么沿用之前的deepseek-demo工程给它加上RAG能力。实现目标上传一份公司制度文档问它“年假多少天”AI会从文档里找到答案而不是瞎编。技术选型这里我选了一套比较轻量的方案向量库Chroma轻量适合新手Embedding模型BAAI/bge-small-zh-v1.5国产中文效果好大模型就用我们之前封装好的 DeepSeekClient03 环境准备3.1 安装新依赖在PyCharm的Terminal里执行安装pip install chromadb sentence-transformers3.2 更新requirements.txtrequests2.31.0 python-dotenv1.0.0 chromadb0.4.0 sentence-transformers2.2.004 准备测试文档在项目根目录下新建一个docs/文件夹创建一个company_policy.txt内容如下公司年假政策 1. 入职满1年享有5天年假 2. 入职满3年享有10天年假 3. 入职满5年享有15天年假 年假需提前3天申请经部门经理审批。 公司病假政策 1. 病假需提供医院证明 2. 每月最多3天带薪病假 3. 超过部分按事假处理 公司加班政策 1. 工作日加班按1.5倍工资计算 2. 周末加班按2倍工资计算 3. 法定节假日加班按3倍工资计算 加班需提前在系统提交申请。05 核心代码RAG模块在core/文件夹下新建rag.py完整代码我会在最后统一提供。这里先看一下核心逻辑初始化时自动加载文档切块并存入向量库search() 方法检索最相关的文档块ask() 方法完成“检索 生成”的完整流程关键点用chromadb.utils.embedding_functions.SentenceTransformerEmbeddingFunction绑定Embedding模型文档按段落切块用collection.add()自动向量化检索时用 query_textsChroma会自动计算相似度封装之后使用起来也非常简单from core.rag import RAG rag RAG(docs_path../docs/company_policy.txt) answer rag.ask(年假有多少天) print(answer)06 运行效果代码写完之后我在examples/07_rag_qa.py里写了一个测试脚本from core.rag import RAG # 初始化RAG会自动加载docs/company_policy.txt rag RAG(docs_path../docs/company_policy.txt) # 测试几个问题 questions [ 年假有多少天, 怎么请病假, 加班工资怎么算 ] for q in questions: print(f问题{q}) print(f回答{rag.ask(q)}) print(- * 50)右键运行效果还不错输出示例✅ 已加载 3 个文档块 问题年假有多少天 回答根据文档内容入职满1年享有5天年假满3年享有10天年假满5年享有15天年假。具体天数取决于员工的入职年限。 ----------------------------------------- 问题怎么请病假 回答根据文档内容请病假需要提供医院证明。 ----------------------------------------- 问题加班工资怎么算 回答根据文档内容加班工资的计算方式如下 1. 工作日加班按1.5倍工资计算 2. 周末加班按2倍工资计算 3. 法定节假日加班按3倍工资计算。 -----------------------------------------07 几个踩过的坑Embedding模型下载慢或失败第一次运行时会自动下载模型约300MB国内用户可能有点慢解决方法在代码开头加一行import os os.environ[HF_ENDPOINT] https://hf-mirror.com向量库版本冲突如果之前运行过再运行时报错“embedding function conflict”直接删除项目根目录下的vector_db文件夹重新运行即可。文档路径找不到确保docs/company_policy.txt在项目根目录下不是放在core/或examples/里面。切块策略太简单目前是按段落切块\n\n如果你的文档没有空行可以自己改成按固定字数切网上有很多现成方案。08 还能怎么玩有了这个RAG基础我们还可以做很多事如公司知识库问答➔上传公司制度、产品手册给员工用个人笔记问答➔把Obsidian/Notion导出问自己的笔记法律合同查询➔上传合同PDF问条款论文阅读助手➔上传论文PDF问核心观点最后来个小结今天我们做了一个简单的RAG系统让AI能根据自己的文档来回答问题其实核心就三步把文档切块、向量化、存起来用户提问时检索相关的文档块把文档块问题一起给AI生成答案这个功能在之前搭的deepseek-demo工程上只加了两个文件rag.py和07_rag_qa.py但能力却提升了一大截——AI不再是“一本正经的胡说八道”而是“有据可查”了。好了今天的分享就到这里了你想用RAG做什么呢欢迎在留言区聊聊在gzh对话框回复「RAG」我把完整源码发你