全网最细 RAG 工程实战教程2026 大佬版小白也能落地附可直接运行代码最近在做 AI 大模型相关的课程小项目本来想做个“私有文档问答”结果一开始被各种概念绕晕RAG、Embedding、向量数据库、文本分块、检索增强……越看越懵。前后踩了无数坑环境装不上、代码跑不通、PDF 读不出来、检索出来全是无关内容、大模型还在瞎编。折腾了快两周终于把最简单、最能跑、最容易理解的一整套 RAG 流程跑通了。今天这篇文章我用最小白、最通俗、最不官方的话把 RAG 从 0 到 1 讲清楚代码全部可直接复制运行不管你是大二大三、刚学 Python还是完全不懂 AI跟着做就能成功。一、RAG 到底是什么一句话讲明白RAG 检索增强生成Retrieval-Augmented Generation大白话解释大模型本身不知道你本地文档里的内容比如你的笔记、PDF、手册直接问大模型只会瞎编幻觉RAG 就是先从你的文档里找答案 → 再把找到的内容给大模型 → 让大模型用这些内容回答就这么简单RAG 核心流程小白版把你的 PDF / TXT 读进来把长文章切成小段文本分块把每段变成“向量”Embedding存进向量数据库方便快速查找你提问题 → 系统去数据库找最相关的几段把这几段丢给大模型 → 得到真实答案二、你只需要装这几个库一条命令新建一个文件夹打开终端执行pipinstalllangchain chromadb pypdf openai python-dotenv各库作用小白不用记知道就行langchainRAG 最常用框架帮我们整合所有步骤chromadb本地轻量向量数据库不用安装服务器直接跑小白友好pypdf专门读取 PDF 文件解决小白“读不出PDF”的痛点openai调用 OpenAI 大模型和向量模型python-dotenv安全存放 API Key避免泄露三、第一步加载 PDF 文本分块代码可直接复制新建文件命名为1_load_and_split.py文件名别改后续会调用fromlangchain.document_loadersimportPyPDFLoaderfromlangchain.text_splitterimportRecursiveCharacterTextSplitter# 1. 加载 PDF把你自己的 PDF 放在同目录下替换文件名即可loaderPyPDFLoader(test.pdf)# 重点改成你的 PDF 文件名比如 课程笔记.pdfdocumentsloader.load()# 2. 文本分块最关键新手直接用我的参数不用改避开踩坑text_splitterRecursiveCharacterTextSplitter(chunk_size800,# 每块文本的字符数中文800字符≈200字适配大模型chunk_overlap100,# 块之间重叠100字符保证句子不被切断语义连贯separators[\n\n,\n,。,,, ]# 按中文标点拆分更贴合中文语义)textstext_splitter.split_documents(documents)# 打印结果验证是否成功print(文档总页数,len(documents))print(分块后总数,len(texts))print(✅ 加载 分块完成)运行命令终端输入python 1_load_and_split.py✅ 成功提示打印出“文档总页数”“分块后总数”说明步骤没问题若报错大概率是 PDF 路径/文件名错了。四、第二步生成向量 存入向量数据库新建文件命名为2_embedding_and_save.pyimportosfromdotenvimportload_dotenvfromlangchain.embeddings.openaiimportOpenAIEmbeddingsfromlangchain.vectorstoresimportChroma# 加载 .env 文件中的 API Key后面会教你创建load_dotenv()# 1. 加载第一步分块后的数据直接调用上一个文件的结果不用重复写代码from1_load_and_splitimporttexts# 2. 初始化向量模型把文本转成计算机能理解的“向量”embeddingOpenAIEmbeddings(modeltext-embedding-3-small# 轻量模型免费额度足够小白首选)# 3. 把向量存入本地 Chroma 数据库持久化下次不用重新生成dbChroma.from_documents(documentstexts,embeddingembedding,persist_directory./chroma_db# 向量数据存在本地 chroma_db 文件夹可直接查看)db.persist()# 持久化数据避免程序退出后丢失print(✅ 向量已保存到本地 chroma_db 文件夹)关键操作创建 .env 文件在代码同目录下新建一个文本文件重命名为.env前面有个点打开后写入OPENAI_API_KEY你的OpenAI_API_Key # 替换成你自己的 API Key⚠️ 注意API Key 别泄露.env 文件不用运行代码会自动读取。运行命令python 2_embedding_and_save.py✅ 成功提示打印“向量已保存到本地 chroma_db 文件夹”此时目录会多一个 chroma_db 文件夹说明向量存储成功。五、第三步RAG 问答最核心可直接运行新建文件命名为3_rag_chat.py这是最终可交互的问答文件importosfromdotenvimportload_dotenvfromlangchain.chat_modelsimportChatOpenAIfromlangchain.chainsimportRetrievalQAfromlangchain.promptsimportPromptTemplate# 加载 API Keyload_dotenv()# 1. 加载本地向量库不用重新生成向量直接加载之前保存的 chroma_dbfromlangchain.embeddings.openaiimportOpenAIEmbeddingsfromlangchain.vectorstoresimportChroma embeddingOpenAIEmbeddings(modeltext-embedding-3-small)dbChroma(persist_directory./chroma_db,# 加载本地向量库路径embedding_functionembedding)# 2. 初始化大模型GPT-3.5-turbo性价比高免费额度足够小白使用llmChatOpenAI(modelgpt-3.5-turbo,temperature0.1# 0-1越小越精准避免大模型瞎编RAG 场景固定设 0.1)# 3. 自定义提示词重点防止大模型瞎编小白别改这个模板prompt_template 你只能根据下面提供的上下文信息回答用户的问题不允许使用你自己的知识库不允许编造任何内容。 上下文 {context} 用户的问题{question} 注意 1. 答案必须严格基于上面的上下文不能添加任何额外信息 2. 如果上下文里没有相关答案直接说“抱歉文档中没有找到相关内容。” 3. 回答简洁明了不用冗余铺垫直接给出答案。 # 封装提示词promptPromptTemplate(templateprompt_template,input_variables[context,question])# 4. 构建 RAG 链检索生成核心逻辑小白不用改qa_chainRetrievalQA.from_chain_type(llmllm,chain_typestuff,# 新手固定用 stuff把检索到的内容全部传给大模型retrieverdb.as_retriever(search_kwargs{k:3}),# 检索3个最相关的片段k2-5最合适return_source_documentsTrue,# 返回检索到的原文片段方便验证答案chain_type_kwargs{prompt:prompt}# 传入自定义提示词防止瞎编)# 5. 交互问答循环输入输入 q 退出print(✅ RAG 问答已启动可输入问题提问输入 q 退出)whileTrue:questioninput(\n请输入你的问题输入 q 退出)ifquestion.strip().lower()q:print( 退出问答感谢使用)break# 执行问答resqa_chain({query:question})# 打印结果print(\n 回答,res[result])# 可选打印检索到的原文片段验证答案来源小白可注释掉# print(\n 参考原文片段)# for i, doc in enumerate(res[source_documents]):# print(f\n【片段{i1}】{doc.page_content[:200]}...)运行命令python 3_rag_chat.py✅ 成功效果输入你 PDF 里有的问题比如“课程笔记里的 Python 基础语法有哪些”就能得到基于 PDF 的精准回答不会瞎编⚠️ 常见报错若提示 API Key 无效检查 .env 文件里的 Key 是否写错若提示网络错误OpenAI 需要科学上网。六、没有 OpenAI Key用国内模型文心一言很多小白没有 OpenAI API Key我专门准备了文心一言的替换代码只需要改两处其他代码完全不用动直接复制替换即可第一步安装文心一言依赖终端输入pipinstalllangchain-community baidu-aip第二步替换向量模型修改 2_embedding_and_save.py 和 3_rag_chat.py 中的嵌入模型# 替换原来的 OpenAIEmbeddings复制这段代码替换即可fromlangchain_community.embeddingsimportBaiduERNIEEmbeddings embeddingBaiduERNIEEmbeddings(baidu_api_key你的文心一言API Key,baidu_secret_key你的文心一言Secret Key,model_nameernie-3.0-base-zh# 文心一言轻量嵌入模型免费可用)第三步替换大模型修改 3_rag_chat.py 中的大模型代码# 替换原来的 ChatOpenAI复制这段代码替换即可fromlangchain_community.chat_modelsimportChatBaiduERNIE llmChatBaiduERNIE(baidu_api_key你的文心一言API Key,baidu_secret_key你的文心一言Secret Key,model_nameernie-3.5,# 文心一言3.5版本免费额度足够temperature0.1)⚠️ 提示文心一言的 API Key 和 Secret Key在百度智能云官网注册就能获取全程免费不用科学上网小白友好七、小白最容易踩的 6 个坑我全踩过帮你避坑PDF 路径不对、文件名写错比如把“test.pdf”写成“test1.pdf”或者 PDF 不在代码同目录直接报错一定要核对文件名和路径。分块参数乱改把 chunk_size 设成 2000太大或 100太小导致检索不到相关内容新手直接用我给的 800100 参数。不设置 chunk_overlap把 overlap 设为 0导致句子被切断语义不完整检索不准必须设 50-100。提示词不限制不用我给的提示词模板导致大模型依然瞎编一定要保留“只能基于上下文回答”的约束。API Key 写错 / 没加载 .env要么 Key 输错要么没创建 .env 文件导致调用模型失败仔细核对 Key 和 .env 文件名。检索 k 值太大把 k 设成 10 甚至 20引入大量无关内容答案混乱新手固定设 2-3 即可。我这套代码已经把这些坑全部避开直接复制运行就能少走弯路八、RAG 学完能做什么超实用适合学生课程 PDF 智能问答期末复习不用逐页翻笔记直接问问题找答案期末救命神器个人笔记知识库把自己的学习笔记、错题整理成 PDF打造专属问答机器人企业员工手册问答练手项目适合找实习前做提升简历含金量论文文献快速总结上传论文 PDF让 RAG 总结核心观点节省看文献时间毕设项目RAG 是当前 AI 热门方向做一个可视化 RAG 知识库毕设轻松加分九、最后我想说RAG 真的没有那么难难的是没人用小白的话讲清楚难的是踩坑后没人指路。我也是从完全不懂、到处报错、甚至想放弃一路走过来的所以我知道大家卡在哪里——不是不会写代码是怕概念太复杂是怕代码跑不通是怕踩坑没人帮。这篇文章我尽量写得通俗、简单、能跑通没有复杂术语没有多余废话代码全部可复制就是希望和我一样的普通计算机学生能少走弯路快速做出属于自己的 AI 项目。如果你也在入门 RAG、大模型、AI 项目遇到了报错、跑不通的问题欢迎在评论区交流我会尽量回复咱们一起踩坑、一起进步觉得有用的话欢迎点赞 收藏我后面会继续更新小白友好的 AI 教程RAG 进阶优化解决“检索不准”的问题本地免费模型跑 RAG不用 API Key不用一分钱用 Gradio 做可视化界面让 RAG 更美观毕设更加分完整毕设项目教程从需求分析到部署上线一步到位我们一起从小白变大佬一起搞定 AI 项目一起在计算机这条路上走得更顺