RAG——从0到1快速搭建RAG应用 📅 发布时间:2026/7/5 3:18:03 👁️ 浏览次数: 目录一、技术框架与选型1.1、技术框架与选型1.1.1、LangChain1.1.2、索引流程 (文档解析模块:pypdf)1.1.3、索引流程 (文档分块模块:RecursiveCharacterTextSplitter)1.1.4、索引 / 检索流程 (向量化模型:bge-small-zh-v1.5)1.1.5、索引 / 检索流程 (向量库:Faiss)1.1.5、生成流程 (大语言模型:通义千问 Qwen)1.2、技术框架与选型的流程图二、开发环境与技术库2.1、创建并激活虚拟环境2.2、安装技术依赖库2.2.1、安装技术依赖库2.2.2、安装技术依赖库的命令2.2.3、下载 bge-small-zh-v1.5 模型三、RAG 核心流程代码3.1、模块库的引入3.2、索引流程3.3、检索流程3.4、生成流程3.5、测试脚本本文来源:极客时间vip课程笔记注:后续技术类文章会同步到我的公众号里,搜索公众号小志的博客感兴趣的读友可以去找来看看。一、技术框架与选型这篇文章中的选型并非适用于所有场景的最佳方案,而是基于当前广泛应用和流行的技术模块。关于这些模块的具体特点以及可能的替代选型,我们会在后续文章中进行详细分析与解读。1.1、技术框架与选型1.1.1、LangChainLangChain 是专为开发基于大型语言模型(LLM)应用而设计的全面框架,其核心目标是简化开发者的构建流程,使其能够高效创建 LLM 驱动的应用。1.1.2、索引流程 (文档解析模块:pypdf)pypdf 是一个开源的 Python 库,专门用于处理 PDF 文档。pypdf 支持 PDF 文档的创建、读取、编辑和转换操作,能够有效提取和处理文本、图像及页面内容。1.1.3、索引流程 (文档分块模块:RecursiveCharacterTextSplitter)采用 LangChain 默认的文本分割器 -RecursiveCharacterTextSplitter。该分割器通过层次化的分隔符(从双换行符到单字符)拆分文本,旨在保持文本的结构和连贯性,优先考虑自然边界如段落和句子。1.1.4、索引 / 检索流程 (向量化模型:bge-small-zh-v1.5)bge-small-zh-v1.5 是由北京人工智能研究院(BAAI,智源)开发的开源向量模型。虽然模型体积较小,但仍然能够提供高精度和高效的中文向量检索。该模型的向量维度为 512,最大输入长度同样为 512。1.1.5、索引 / 检索流程 (向量库:Faiss)Faiss 全称 Facebook AI Similarity Search,由 Facebook AI Research 团队开源的向量库,因其稳定性和高效性在向量检索领域广受欢迎。1.1.5、生成流程 (大语言模型:通义千问 Qwen)通义千问 Qwen 是阿里云推出的一款超大规模语言模型,支持多轮对话、文案创作、逻辑推理、多模态理解以及多语言处理,在模型性能和工程应用中表现出色。采用云端 API 服务,注册有 1,000,000 token 的免费额度。1.2、技术框架与选型的流程图流程图LangChain:提供用于构建 LLM RAG 的应用程序框架。索引流程:使用 pypdf 对文档进行解析并提取信息;随后,采用RecursiveCharacterTextSplitter 对文档内容进行分块(chunks);最后,利用 bge-small-zh-v1.5 将分块内容进行向量化处理,并将生成的向量存储在 Faiss 向量库中。检索流程:使用 bge-small-zh-v1.5 对用户的查询(Query)进行向量化处理;然后,通过 Faiss 向量库对查询向量和文本块向量进行相似度匹配,从而检索出与用户查询最相似的前 top-k 个文本块(chunk)。生成流程:通过设定提示模板(Prompt),将用户的查询与检索到的参考文本块组合输入到 Qwen 大模型中,生成最终的 RAG 回答。二、开发环境与技术库我们采用 Python 编程语言,Python 版本 3.8 及以上,运行于 Linux 操作系统下。结合上述的技术框架与选型,我们的开发环境需要按照以下步骤进行准备:2.1、创建并激活虚拟环境目的是隔离项目依赖,避免项目之间冲突。先在命令行窗口中执行指令定位到具体的 RAG 项目文件夹,然后在命令行中执行以下指令:# 创建名为rag_env的虚拟环境 python3-m venv rag_env # 激活虚拟环境 source rag_env/bin/activate2.2、安装技术依赖库2.2.1、安装技术依赖库安装langchain和langchain_communityLLM RAG 的技术框架及其扩展。安装pypdf处理 PDF 文档的解析库。安装sentence-transformers运行指定文本嵌入模型 bge-small-zh-v1.5 的模型库。安装faiss-cpu高效相似度搜索的 Faiss 向量库。安装dashscope与阿里云 Qwen 大模型 API 的集成库。2.2.2、安装技术依赖库的命令首先,升级 pip 版本,以确保兼容性,在命令行中执行以下指令。# 升级pip版本以确保兼容性 pip install--upgrade pip然后,安装上述技术依赖库,在命令行中执行以下指令:pip install langchain langchain_community pypdf sentence-transformers faiss-cpu dashscope如果无法连接,可以使用国内镜像站点,在命令行中执行以下指令:pip install langchain langchain_community pypdf sentence-transformers faiss-cpu dashscope-i https://pypi.tuna.tsinghua.edu.cn/simple2.2.3、下载 bge-small-zh-v1.5 模型该模型的文件已包含在 Gitee 上托管的项目中的 bge-small-zh-v1.5 文件夹内,你可以直接下载到 RAG 项目的根目录中,模型大小 95.8M,在命令行中执行以下指令:git clone https://gitee.com/techleadcy/rag_app.git下载完成后,检查 rag_app 项目中 bge-small-zh-v1.5 文件夹中是否包含pytorch_model.bin 文件。该库中同时包含了本文章的 RAG 核心流程代码 rag_app_lesson2.py 及测试 PDF 文档 test_lesson2.pdf。三、RAG 核心流程代码在实战过程中,你不仅可以快速构建 RAG 应用,还能够在研发过程中深入理解其背后的技术逻辑与核心原理。为此,我在代码的每一行添加了必要的注释,并对每段流程代码进行了归纳和解释,旨在通过实战代码增强你对 RAG 技术的理解。整个流程代码分为模块库的引入、索引流程、检索流程、生成流程以及测试代码几部分进行精细讲解,具体的代码位于 Gitee 项目库中的 rag_app_lesson2.py 文件中。3.1、模块库的引入模块库引入的代码如下:from langchain_community.document_loadersimportPyPDFLoader#PDF文档提取 from langchain_text_splittersimportRecursiveCharacterTextSplitter# 文档拆分chunk from sentence_transformersimportSentenceTransformer# 加载和使用Embedding模型importfaiss#Faiss向量库importnumpyas np # 处理嵌入向量数据,用于Faiss向量检索importdashscope#调用Qwen大模型 from httpimportHTTPStatus#检查与Qwen模型HTTP请求状态importos# 引入操作系统库,后续配置环境变量与获得当前文件路径使用 os.environ["TOKENIZERS_PARALLELISM"]="false"# 不使用分词并行化操作,避免多线程或多进程环境中运行多个模型引发冲突或死锁 # 设置Qwen系列具体模型及对应的调用API密钥,从阿里云百炼大模型服务平台获得 qwen_model="qwen-turbo"qwen_api_key=
2026年3月4隔夜暗盘挂单排行榜 推荐好文:每年节约五六千交易费不香吗如何获取龙虎榜是否有量化参与如何获取股东减持信息没必要从5000多只股票里选买入哪只,因为5000多只股票里只有不到10%也就是约500只有资金投票上涨哪只, 剩余的都是杂毛, 炒股就是看龙头找主线.从隔夜挂单里选择, 再叠加我们之前分享的如何… 2026/7/3 16:36:07
混合云大数据架构:如何实现跨云数据无缝集成? 混合云大数据架构:如何实现跨云数据无缝集成? 关键词:混合云、大数据架构、跨云集成、数据同步、云原生技术 摘要:本文从企业多云部署的实际需求出发,通过生活案例类比、技术原理拆解、实战代码演示,系统讲… 2026/5/17 8:28:46
丝杆模组润滑自检指南 在自动化设备高速运转的背后,丝杆模组作为精密传动部件,其寿命与性能高度依赖润滑系统的稳定性。然而,许多工程师常陷入“定期加油”的误区,却忽视了润滑不足或过度润滑带来的隐性风险。那么,如何通过直观信号判断丝杆… 2026/5/17 8:28:45
多层金属的“异质变形“为什么是矫平工艺的终极难题? 在金属板材加工领域,复合板(又称金属层状复合材料)正越来越多地应用于石油化工、海洋工程、核电和食品制药等行业。校平机作为消除板材残余应力、恢复平整度的关键设备,在面对复合板时遇到了与单质金属完全不同的技术挑战。复合板… 2026/7/5 3:16:58
opencode最新版本安装使用 1.中文官网文档 https://opencode.ai/zh 2.安装步骤(windows推荐使用) win R 打开windows命令终端,执行安装命令 curl -fsSL https://opencode.ai/install | bash通过安装结果,opencode的环境变量没有写入成功,我… 2026/7/5 3:14:57
Codex Desktop 接入 PackyCode / PackyAPI 后 401 报错排查:Key、Base URL 和模型名怎么对应 摘要在 Codex Desktop 中使用 PackyCode 或 PackyAPI 时,常见报错包括 401 Unauthorized、Invalid API key、Model is not available、stream disconnected before completion 等。很多问题并不是 Key 真的过期,而是 Key、Base URL、模型名称和 Codex 配… 2026/7/5 3:14:57
OpenAI Python库是什么?一文看懂通用大模型统一调用标准 开篇 很多刚接触大模型开发的新手会有一个误区:OpenAI Python库只能调用GPT系列模型。实际恰恰相反,如今国内几乎所有开源大模型(通义千问Qwen3、Llama、DeepSeek、GLM等),只要通过vLLM、Text Generation Inference推理… 2026/7/5 3:12:56
预见性切割:机器学习如何提前预警碳带分切机的报废风险 在热转印碳带的生产链条中,分切机是决定成品质量的“最后一道关卡”。这台将宽幅母卷分割为最终商品的设备,一旦发生非计划停机或核心部件报废,带来的不仅是维修成本,更是整批次产品的报废与交付周期的延误。传统维护模式依赖定期… 2026/7/5 3:10:56
django中实现密码加密 在utils_app\utils\ 中新建encryption.py# md5加密 import hashlib from django.conf import settings def md5(data):obj_md5hashlib.md5(settings.SECRET_KEY.encode(utf-8))obj_md5.update(data.encode(utf-8))return obj_md5.hexdigest()在视图中使用from utils_app… 2026/7/5 3:08:56
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/5 0:01:32
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/5 0:01:32
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/5 0:05:36
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/5 0:01:32
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/5 0:01:32
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/5 0:05:36