手撸一个 RAG,没那么难
前些天发现了一个巨牛的人工智能学习网站通俗易懂风趣幽默忍不住分享一下给大家。点击跳转到网站https://www.captainai.net/dongkelun上一篇讲了 RAG 是什么——开卷考试先查资料再回答。这篇直接上手。用 Python 搭一个最简单的 RAG 系统从文档导入到问答跑通大概 100 行代码。准备工作你需要的东西Python 3.9一个 OpenAI API Key或者兼容 OpenAI 接口的大模型服务几篇本地文档随便什么 markdown 或者 txt 文件都行然后装几个库pipinstalllangchain langchain-community langchain-openai chromadb解释一下这几个东西LangChain封装了 RAG 的通用流程不用自己从零写Chroma一个纯本地的向量数据库装完就能用不用单独起服务langchain-openai让 LangChain 能调用 OpenAI 的 embedding 和 chat 模型装完就开始。第一步把文档变成向量建一个文件夹docs/放几篇你的文档进去。然后跑下面的脚本importosfromlangchain_community.document_loadersimportDirectoryLoaderfromlangchain.text_splitterimportRecursiveCharacterTextSplitterfromlangchain_openaiimportOpenAIEmbeddingsfromlangchain_community.vectorstoresimportChroma# 1. 加载文档loaderDirectoryLoader(docs/,glob**/*,show_progressTrue)docsloader.load()print(f加载了{len(docs)}个文件)# 2. 切段splitterRecursiveCharacterTextSplitter(chunk_size500,# 每段最多 500 字chunk_overlap50,# 段与段之间重叠 50 字)chunkssplitter.split_documents(docs)print(f切成了{len(chunks)}段)# 3. 生成向量并存入 ChromaembeddingOpenAIEmbeddings(modeltext-embedding-3-small)vectorstoreChroma.from_documents(documentschunks,embeddingembedding,persist_directory./chroma_db,# 存到本地)vectorstore.persist()print(向量库已保存到 ./chroma_db)跑完之后你会看到一个chroma_db/文件夹里面就是你的向量数据库。这个过程每步在干什么加载把文件读进来LangChain 会自动处理 txt、md、pdf 等格式切段大模型输入有长度限制你不能把整篇文章一次性塞进去。切成 500 字一段既够表达完整意思又方便后续检索转向量用 text-embedding-3-small 模型把每段文字转成一组数字1536 维的向量。语义相近的文字向量距离也近存入Chroma 把向量和原文一起存到本地磁盘text-embedding-3-small 是 OpenAI 最便宜的 embedding 模型处理 1000 页文档大概几毛钱。也有免费方案比如 HuggingFace 的all-MiniLM-L6-v2但效果略差一点。第二步检索 回答向量库建好了接下来就是用户提问→检索→生成回答这条线。fromlangchain_openaiimportChatOpenAIfromlangchain.chainsimportRetrievalQA# 1. 加载已有的向量库embeddingOpenAIEmbeddings(modeltext-embedding-3-small)vectorstoreChroma(persist_directory./chroma_db,embedding_functionembedding,)# 2. 创建检索器retrievervectorstore.as_retriever(search_kwargs{k:3})# 3. 创建 QA 链llmChatOpenAI(modelgpt-4o-mini,temperature0)qa_chainRetrievalQA.from_chain_type(llmllm,chain_typestuff,# 把检索结果和问题一起塞给模型retrieverretriever,return_source_documentsTrue,# 返回来源方便验证)# 4. 开问question你们公司的退款政策是什么resultqa_chain.invoke({query:question})print(回答,result[result])print(\n--- 参考来源 ---)fordocinresult[source_documents]:print(f来自{doc.metadata[source]}{doc.page_content[:100]}...)跑完你会看到类似这样的输出回答 我们公司支持 7 天无理由退货运费由买家承担…… --- 参考来源 --- 来自 docs/refund-policy.md支持 7 天无理由退货商品不影响二次销售…… 来自 docs/faq.mdQ退货需要什么条件A自签收之日起 7 日内……看到参考来源那部分了吗这是 RAG 比纯模型好的地方——它能告诉你我是从哪看到的。你觉得答案不对可以点过去核实。一些可能有用的调整一次检索多少段上面代码里search_kwargs{k: 3}表示每次检索取最相似的 3 段。如果你的文档比较长可以调大到 5 或 8。太多了模型会分心太少了可能漏关键信息。用本地模型如果你不想走 API也可以用本地模型做 embedding 和回答# embedding 用本地的fromlangchain_community.embeddingsimportHuggingFaceEmbeddings embeddingHuggingFaceEmbeddings(model_nameall-MiniLM-L6-v2)# 问答用本地 LLM需要先装 Ollama# ollama pull llama3.2fromlangchain_community.llmsimportOllama llmOllama(modelllama3.2)效果取决于你电脑的性能和模型大小。一般来说本地 embedding 模型够用但本地 LLM 回答质量明显不如 GPT-4o-mini。混合方案比较实用embedding 用本地免费的回答用 API。文件变了怎么办文档更新了你不需要重建整个库。可以增量添加vectorstore.add_documents(new_chunks)或者删掉chroma_db/文件夹重新跑一遍——反正 embedding 很快重跑也就几十秒。总结跑通 RAG 就这三步文档 → 向量加载、切段、embedding向量 → 数据库存到 Chroma提问 → 检索 → 回答查向量库 丢给大模型全流程不超过 100 行代码。剩下的事情就是优化怎么切段更合理、怎么让检索更准、怎么让回答更靠谱——那是另一篇文章的事了。你上篇学到了 RAG 的概念这篇用代码跑了一遍流程。下篇聊聊市面上的 RAG 工具怎么选。

相关新闻

如何将MacBook触控板变成精准电子秤:TrackWeight完整指南

如何将MacBook触控板变成精准电子秤:TrackWeight完整指南

如何将MacBook触控板变成精准电子秤:TrackWeight完整指南 【免费下载链接】TrackWeight Use your Mac trackpad as a weighing scale 项目地址: https://gitcode.com/gh_mirrors/tr/TrackWeight 你是否曾想过,你的MacBook触控板除了点击和滑动&am…

2026/8/11 8:52:07 阅读更多 →
自动售货机端侧AI推理部署实战:从YOLOv11n到RK3588的全链路工程实践~YH

自动售货机端侧AI推理部署实战:从YOLOv11n到RK3588的全链路工程实践~YH

2026年被业界定义为"端侧AI规模化落地的元年",这一趋势在自动售货机行业尤为显著。传统云端推理方案面临延迟不稳定、带宽成本高、网络依赖性强三大瓶颈,而端侧AI方案正在快速替代这一模式。本文基于RK3588平台,从硬件选型、模型部…

2026/8/11 8:52:07 阅读更多 →
Ollama 生成 React 组件省了 3 天,却让我多花了 2 周改 Bug——AI 写前端的真实成本清单

Ollama 生成 React 组件省了 3 天,却让我多花了 2 周改 Bug——AI 写前端的真实成本清单

Ollama 生成 React 组件省了 3 天,却让我多花了 2 周改 Bug--AI 写前端的真实成本清单 AI 辅助前端开发的陷阱与实战解决方案:从崩溃到稳定的全流程复盘 为什么选择 Ollama 作为开发起点 当产品经理在周一晨会上甩来 15 个复杂表单的需求时,我面临着一个典型的技术决策点:是手…

2026/8/11 8:51:07 阅读更多 →

最新新闻

Ryujinx终极指南:如何在PC上免费畅玩4300+ Switch游戏的完整解决方案

Ryujinx终极指南:如何在PC上免费畅玩4300+ Switch游戏的完整解决方案

Ryujinx终极指南:如何在PC上免费畅玩4300 Switch游戏的完整解决方案 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 你是否梦想在电脑上体验《塞尔达传说:王国之…

2026/8/11 16:16:05 阅读更多 →
Adobe插件安装革命:3分钟掌握ZXPInstaller终极指南

Adobe插件安装革命:3分钟掌握ZXPInstaller终极指南

Adobe插件安装革命:3分钟掌握ZXPInstaller终极指南 【免费下载链接】ZXPInstaller Open Source ZXP Installer for Adobe Extensions 项目地址: https://gitcode.com/gh_mirrors/zx/ZXPInstaller 还在为Adobe插件的复杂安装流程而烦恼吗?面对.zxp…

2026/8/11 16:16:05 阅读更多 →
java多线程面试题总结

java多线程面试题总结

文章目录 1,线程和进程的区别 2,创建线程的几种方式 3,线程的执行的几种状态 4,同步代码块和同步方法的区别 5,监视器内部是如何线程同步的?程序应该做哪种级别的同步? 6,什么是死锁(deadlock)? 7,如何保证N个线程可以访问N个资源同时又不导致死锁? 8 start() 和…

2026/8/11 16:16:05 阅读更多 →
5个实用技巧彻底解锁Wand专业版功能:告别时间限制的终极指南

5个实用技巧彻底解锁Wand专业版功能:告别时间限制的终极指南

5个实用技巧彻底解锁Wand专业版功能:告别时间限制的终极指南 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer Wand-Enhancer是一款专为W…

2026/8/11 16:16:05 阅读更多 →
Windows风扇控制终极指南:用FanControl实现静音与性能的完美平衡

Windows风扇控制终极指南:用FanControl实现静音与性能的完美平衡

Windows风扇控制终极指南:用FanControl实现静音与性能的完美平衡 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_T…

2026/8/11 16:16:05 阅读更多 →
spring集成jwt、权限从jwt拿还是从网关拿好

spring集成jwt、权限从jwt拿还是从网关拿好

文章目录引入依赖0.12(较新)0.7(过时)boot项目中应用配置文件中添加拦截器配置jwt拦截器LoginController权限从jwt直接拿还是从网关拿好?单应用为什么难做jwt?经过网关校验jwt,为什么直接在header中添加jwt不生效?问题jwt是明文吗?那么还安全吗?引入依赖 0.12…

2026/8/11 16:15:05 阅读更多 →

日新闻

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/vi/v…

2026/8/11 0:00:02 阅读更多 →
前后端分离项目中控制台与接口工具数据差异排查指南

前后端分离项目中控制台与接口工具数据差异排查指南

1. 问题现象解析:控制台与Apifox的数据差异 最近在调试一个前后端分离项目时,遇到了一个典型问题:后端服务在本地开发环境控制台能正常输出查询数据,但通过Apifox测试时却返回空结果。这种"控制台有数据,接口工具…

2026/8/11 0:00:03 阅读更多 →
AI编程实战:从Claude Code踩坑到游戏开发入门

AI编程实战:从Claude Code踩坑到游戏开发入门

1. 从“AI能帮我做游戏”到“AI让我重新学编程”最近身边不少朋友,尤其是一些非技术背景、但对游戏开发有浓厚兴趣的朋友,都在问我同一个问题:“听说现在用Claude Code这种AI编程工具,小白也能做游戏了,是真的吗&#…

2026/8/11 0:00:03 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/11 1:08:05 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/11 1:08:05 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/11 1:08:05 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/10 17:07:33 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/11 1:08:06 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/10 17:07:33 阅读更多 →