大模型RAG工程化实践:规则检索器实现与演进思路
文章介绍了RAG工程化中的规则检索实现从V1到V2的演进过程。规则检索具有可解释、可控、上线快等优势适合企业内部知识库。通过代码示例展示了如何构建可运行、可解释、可迭代的规则检索系统包括查询降噪、多层规则筛选、打分排序和命中规则记录等。这种实现为后续引入向量库和混合检索奠定了工程基础使AI应用开发走向可控的系统工程。前言上篇文章我们学习到了基本的Rag原理用本地的ollama实现了一个非常简易版本的rag流程。这一篇我们主要来学习下工程化的优化用来给大模型更加准确的上下文我们要知道模型再强如果某些知识不在模型训练的范围之内甚至在网络上搜索不到很准确的信息特别是在企业内部有很多文档和信息是网络上没有的那么直接问大模型输入上下文不可靠输出就很难稳定。这就是 RAGRetrieval-Augmented Generation检索增强生成在 AI 应用开发里最工程化的价值把我该给模型什么上下文这件事从玄学变成可控的检索系统。这一篇我们用一个完全可运行的小例子专注讲清楚RAG里面这个R检索的部分如何在没有向量库、没有 embedding 的情况下先实现一个可解释、可控、可迭代的“规则检索器”并展示从 V1 到 V2 的演进思路。虽然没有用到哪些高级组件但是手写的代码一步步迭代其实我们更加能明白工程化为什么要做这些事情为后面引入向量库做混合检索做了铺垫。本文代码对应 examples/rag/chapter02/ 下三个文件ex04ragretrieverulev1.py规则检索 V1基础可用ex05retrieveresult.pyV2 的结果结构可解释性ex05ragretrieverulev2.py规则检索 V2打分 命中规则规则检索它是什么适合什么时候用在 RAG 里“检索”并不只有向量检索。我们完全可以先从规则检索起步。1.1 规则检索 vs 向量检索我们现在更需要哪个规则检索优点可解释、可控、上线快、无依赖不需要向量库 / embedding缺点覆盖面有限规则维护成本会上升适合内部知识库早期、文档结构清晰、关键词/项目代号明显、需要强可控的场景向量检索优点语义召回强对同义改写更友好缺点解释性弱需要 embedding、向量库调参chunk、topk、阈值更“工程化”适合知识面大、表达多样、需要更强召回的场景一个很实用的路线先用规则检索把系统跑起来保证可控 可解释再逐步引入向量检索补召回最终形成混合检索。RAG里面的R就是在用各种方式来提高检索的质量一个是找到更多可能的信息第二个是在可能的信息里面找到最相关的一些信息。下面的多个规则来检索就是为了找到更多的信息保证不会漏掉有用的信息然后里面的给信息打分就是为了找到最相关最匹配的文段。1.2 规则检索 vs 搜索引擎技术思路很相似我们在举一个例子和我们平常用到非常多的浏览器搜索一样如果你熟悉搜索引擎的工作原理会发现规则检索的思路其实很相似查询预处理搜索引擎会分词、去停用词、拼写纠错我们的 normalize_query 也是去噪声词、提取关键词关键词匹配搜索引擎用倒排索引关键词 → 文档列表我们直接在 page_content 中匹配关键词评分排序搜索引擎用 TF-IDF、BM25 等综合评分我们的 V2 用 score 机制内容命中3、项目名2 等过滤机制搜索引擎按时间、类型、站点过滤我们按 metadata项目、类型、权限过滤可解释性搜索引擎会高亮匹配词我们的 V2 用 hit_rules 记录命中原因核心区别搜索引擎面向全网亿级数据目标是找到相关网页用户自己阅读RAG 规则检索面向企业内部知识库千到万级目标是找到精确文档给 LLM 做上下文所以 RAG 检索对精确性要求更高宁可少召回也不能误导 LLM而搜索引擎更注重召回率宁可多召回让用户自己筛选。这三个文件在做什么先建立整体视角它们合起来的目标很简单 给定用户 query从一组 Document 里挑出最相关的 top_k 条。我们可以把它理解成一个最小 RAG 检索模块在代码里我们用 langchain的core.documents.Document 来承载文档内容与元数据pagecontent metadata而不是自己在造一个对象是为了以后无缝接入 LangChain 的后续链路。V1能跑起来的规则检索ex04ragretrieverulev1.pyV1 的关键词简单、直观、可运行。它做了两件关键事把 query 做降噪变成高信息密度关键词normalize_query注这一步其实非常重要如果我们把这个步骤去掉在我们使用纯规则去匹配的情况下比如只用了关键词然后问题是“什么是蓝精灵协议”这个就匹配不出来。或者用户的问题有很多的没用信息“今天我吃了三个冰淇淋两个水果告诉我什么是蓝精灵协议” 这也很令人头痛用户带了很多没用的信息甚至比要检索的东西还多这个在真实场景里面是极有可能发生的。所以需要做降噪去掉无用的信息就是噪声我们这里主要是为了方便演示所以只做了简单的规则去掉什么是“请介绍”等简单的词语你只要明白要有个处理的过程就行具体真正的生产场景比这个复杂太多。按一组规则筛选 Document并返回 top_kretrieve3.1 Query 降噪把自然语言变成关键词V1 的 normalize_query 用非常朴素但有效的方法去掉“什么是/请介绍/吗/”等口水词按空格和标点切分去掉过短的 token核心片段与源码一致做了缩短便于阅读def normalize_query(query: str)-List[str]: q query.lower().strip() noise_patterns [r什么是, r请介绍, r介绍一下, r是什么, r如何, r怎么, r吗, r\?, r] for p in noise_patterns: q re.sub(p,, q) tokens re.split(r\s||,|。||;, q) tokens [t.strip()for t in tokens if len(t.strip())2] return tokens我们会发现这一步不智能但它是工程上最划算的第一步。因为它把后续规则命中率显著提高同时可解释、可调。3.2 V1 的五层规则从强到弱V1 的 retrieve 里规则是分层的非常重要强规则短路项目名直命中如 aurora-42就直接返回保证我问项目就一定拿到项目文档关键词命中任何关键词出现在正文就收集为候选metadata 过滤例如问协议,就只保留 doc_type protocol去重TopK 截断我们可以把它当成一条可控管道每一步都能解释。3.3 运行 V1在项目根目录执行python examples/rag/chapter02/ex04_rag_retrieve_rule_v1.py我们会看到每个 query 返回的 Document 列表。这就是最小可用的规则检索器不花哨但能把检索这件事落地。V2加入打分与可解释性ex05retrieveresult.py ex05ragretrieverulev2.pyV1 的问题是 命中了就是命中但“谁更相关”缺少排序依据也很难解释“为什么命中”。虽然反复执行得到的结果是一样的但是你没法解释哪一条应该是放到最前面最可能是用户想问的。那么咱们就升级到V2版本。V2 的升级目标很明确每个候选文档都有一个score每个候选文档记录命中规则 hit_rules解释性最后按 score 排序取 top_k4.1 用数据类承载“可解释结果”ex05retrieveresult.py 定义了一个非常干净的结构from dataclasses import dataclass from langchain_core.documents importDocument from typing importList dataclass classRetrieveResult: document:Document score: int hit_rules:List[str]这个结构特别关键它把检索结果从 Document 本体里拆开避免把评分与解释塞进 metadata变得混乱。4.2 V2 的打分规则工程上最常用的套路V2 做了三类规则并给不同权重R1内容关键词命中3R2项目名命中2R3协议类过滤命中2同时把每次命中的规则写进 hit_rules例如content_hit:蓝精灵协议project_hit:aurora-42protocol_match核心逻辑def retrieve(query: str, top_k: int 3)-List[Document]: keywords normalize_query(query) results:List[RetrieveResult][] for doc in DOCUMENTS: score 0 hit_rules [] content_lower doc.page_content.lower() # ---------- R1内容关键词命中 ---------- for kw in keywords: if kw in content_lower: score 3 hit_rules.append(fcontent_hit:{kw}) # ---------- R2项目名命中 ---------- project doc.metadata.get(project,).lower() for kw in keywords: if kw in project: score 2 hit_rules.append(fproject_hit:{kw}) # ---------- R3协议类文档 ---------- if(协议in query orprotocolin query.lower()) \ and doc.metadata.get(doc_type)protocol: score 2 hit_rules.append(protocol_match) if score 0: results.append( RetrieveResult( documentdoc, scorescore, hit_ruleshit_rules ) ) # ---------- 排序 ---------- results.sort(keylambda x: x.score, reverseTrue) # ---------- DEBUG强烈建议我们保留 ---------- for r in results: print(f[score{r.score}] rules{r.hit_rules}) print(r.document.page_content) print(----) return[r.document for r in results[:top_k]]4.3 为什么 V2 更“能上线”因为它解决了 RAG 检索工程化的两大痛点排序可控我们可以通过权重调节更相关的定义解释可追踪线上出现 badcase可以快速定位规则与权重此外V2 还保留了非常建议我们保留的 DEBUG 输出for r in results: print(f[score{r.score}] rules{r.hit_rules})4.4 运行 V2在项目根目录执行python examples/rag/chapter02/ex05_rag_retrieve_rule_v2.py我们会看到每条候选文档的 score 与 hit_rules从而直观看到为什么它排在前面。展示建议生产场景一般怎么定义规则下面给一套更贴近生产的规则定义方式不讲概念直接给方法。核心原则从强到弱、可解释、可开关、可回滚。5.1 先定义强规则必须命中、允许短路强规则通常来自业务里的“唯一标识”命中就直接返回或强加分ID/编号类项目代号aurora-42、工单号、合同号、设备编号、产品型号专有名词类协议名、系统名、模块名、内部缩写固定问法类例如“某某项目启动时间”“某某协议定义是什么”落地建议先做抽取用正则/词典把这些标识从 query 里抽出来类似 V1 的 normalize_query但更“业务化”做索引把文档按 project/doc_type/version/owner 等 metadata 建索引强规则命中直接从索引取候选5.2 再定义加分规则决定排序把“相关性”拆成多条可加权的信号并记录到 hit_rules类似 V2 的做法内容命中关键词出现在 page_content可按词频、位置、标题加权字段命中关键词命中 metadata例如 project、doc_type、tags意图匹配query 含“协议/流程/报错/部署”等意图词 → 只给对应类型文档加分落地建议所有加分都要可追踪像 contenthit:xxx、projecthit:xxx、protocol_match 这样记录命中原因权重用配置管理把 3/2 做成可调参数便于线上快速调优5.3 最后定义过滤规则做安全与边界过滤规则一般用于把“不该给模型看的”或“明显不相关的”剔掉权限过滤按部门/角色/租户过滤最常见版本过滤只保留最新版本或指定版本避免旧文档污染类型过滤问协议只保留 doc_type protocol落地建议过滤优先级高于加分先过滤再排序避免无权限文档进入候选集每条规则可独立开关出问题可以快速回滚线上非常关键总结这篇我们用 chapter02 的三个文件实现了一个可运行,可解释,可迭代 的规则检索器并展示了 V1 → V2 的演进V1规则管道 简单可用V2引入结果结构 打分排序 命中规则解释后续我们可以继续往前走两步就是我后面要写的教程用向量检索补召回embedding vector store做混合检索规则检索做强约束向量检索做召回补充到这里我们会真正把AI 应用开发从调用模型走向可控的系统工程。​最后我在一线科技企业深耕十二载见证过太多因技术更迭而跃迁的案例。那些率先拥抱 AI 的同事早已在效率与薪资上形成代际优势我意识到有很多经验和知识值得分享给大家也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我整理出这套 AI 大模型突围资料包✅AI大模型学习路线图✅Agent行业报告✅100集大模型视频教程✅大模型书籍PDF✅DeepSeek教程✅AI产品经理入门资料完整的大模型学习和面试资料已经上传带到CSDN的官方了有需要的朋友可以扫描下方二维码免费领取【保证100%免费】​​为什么说现在普通人就业/升职加薪的首选是AI大模型人工智能技术的爆发式增长正以不可逆转之势重塑就业市场版图。从DeepSeek等国产大模型引发的科技圈热议到全国两会关于AI产业发展的政策聚焦再到招聘会上排起的长队AI的热度已从技术领域渗透到就业市场的每一个角落。智联招聘的最新数据给出了最直观的印证2025年2月AI领域求职人数同比增幅突破200%远超其他行业平均水平整个人工智能行业的求职增速达到33.4%位居各行业榜首其中人工智能工程师岗位的求职热度更是飙升69.6%。AI产业的快速扩张也让人才供需矛盾愈发突出。麦肯锡报告明确预测到2030年中国AI专业人才需求将达600万人人才缺口可能高达400万人这一缺口不仅存在于核心技术领域更蔓延至产业应用的各个环节。​​资料包有什么①从入门到精通的全套视频教程⑤⑥包含提示词工程、RAG、Agent等技术点② AI大模型学习路线图还有视频解说全过程AI大模型学习路线③学习电子书籍和技术文档市面上的大模型书籍确实太多了这些是我精选出来的④各大厂大模型面试题目详解⑤ 这些资料真的有用吗?这份资料由我和鲁为民博士共同整理鲁为民博士先后获得了北京清华大学学士和美国加州理工学院博士学位在包括IEEE Transactions等学术期刊和诸多国际会议上发表了超过50篇学术论文、取得了多项美国和中国发明专利同时还斩获了吴文俊人工智能科学技术奖。目前我正在和鲁博士共同进行人工智能的研究。所有的视频教程由智泊AI老师录制且资料与智泊AI共享相互补充。这份学习大礼包应该算是现在最全面的大模型学习资料了。资料内容涵盖了从入门到进阶的各类视频教程和实战项目无论你是小白还是有些技术基础的这份资料都绝对能帮助你提升薪资待遇转行大模型岗位。智泊AI始终秉持着“让每个人平等享受到优质教育资源”的育人理念‌通过动态追踪大模型开发、数据标注伦理等前沿技术趋势‌构建起前沿课程智能实训精准就业的高效培养体系。课堂上不光教理论还带着学员做了十多个真实项目。学员要亲自上手搞数据清洗、模型调优这些硬核操作把课本知识变成真本事‌​​​​如果说你是以下人群中的其中一类都可以来智泊AI学习人工智能找到高薪工作一次小小的“投资”换来的是终身受益应届毕业生‌无工作经验但想要系统学习AI大模型技术期待通过实战项目掌握核心技术。零基础转型‌非技术背景但关注AI应用场景计划通过低代码工具实现“AI行业”跨界‌。业务赋能 ‌突破瓶颈传统开发者Java/前端等学习Transformer架构与LangChain框架向AI全栈工程师转型‌。获取方式有需要的小伙伴可以保存图片到wx扫描二v码免费领取【保证100%免费】**​

相关新闻

从单兵作战到团队协作:BMad-METHOD重构AI编程体验,一篇就够,果断收藏

从单兵作战到团队协作:BMad-METHOD重构AI编程体验,一篇就够,果断收藏

BMad-METHOD是一款开源AI开发工具,提供21个专业Agent模拟敏捷开发团队,支持Quick Flow和完整开发路径两种工作模式。它可与Cursor、Claude Code等AI IDE互补使用,引导开发者遵循"分析→规划→实施→复盘"的完整流程,提高…

2026/7/4 22:58:36 阅读更多 →
概率论期末考试真题精讲:贝叶斯公式在实际问题中的应用

概率论期末考试真题精讲:贝叶斯公式在实际问题中的应用

概率论期末考试真题精讲:贝叶斯公式在实际问题中的应用 题目描述 在大学概率论课程中,贝叶斯公式(Bayes’ Theorem)是处理逆向推理问题的核心工具。这类题目不仅考查学生对基本公式的掌握程度,更注重其逻辑推理能力与…

2026/7/3 14:21:05 阅读更多 →
阻抗电路板从设计到量产5大维度让性能不打折

阻抗电路板从设计到量产5大维度让性能不打折

阻抗电路板常被认为 “高成本、高门槛”,但实际上,通过系统化的成本优化,完全可以在保证阻抗性能、良率、可靠性的前提下,把成本降低 20–50%。​一、设计优化:从源头砍掉 30% 成本成本控制的 70% 在设计端&#xff0c…

2026/7/3 14:21:06 阅读更多 →

最新新闻

从TT100K到YOLO:一份完整的交通标志数据集转换与实战指南

从TT100K到YOLO:一份完整的交通标志数据集转换与实战指南

1. 为什么需要转换TT100K数据集格式第一次接触TT100K数据集时,我完全被它复杂的目录结构和标注格式搞懵了。这个由清华大学和腾讯联合发布的交通标志数据集,包含了10万张图片和3万多个标注实例,但它的JSON标注格式和YOLO完全不兼容。当时为了…

2026/7/4 23:19:08 阅读更多 →
数据科学转行实战路径:问题驱动的认知构建法

数据科学转行实战路径:问题驱动的认知构建法

1. 这不是一张“通关地图”,而是一份我带过37个转行学员后画出的实战路标 数据科学学习路径——这个词听起来像一份标准化的课程表,但实际操作中,它更接近于在浓雾里徒步时手绘的地形草图:有标记、有涂改、有折痕,甚至…

2026/7/4 23:19:08 阅读更多 →
2026普通人AI使用指南:看懂参数、混合思考与国产模型三大核心

2026普通人AI使用指南:看懂参数、混合思考与国产模型三大核心

1. 这不是科幻预告片,是普通人下周就该打开手机查的“技术天气预报”2026年4月这个时间点,听起来像科幻小说里随手写的年份,但如果你最近刷过几条国产大模型发布会的短视频,或者留意过身边朋友突然开始用“文心一言新版本”写周报…

2026/7/4 23:17:06 阅读更多 →
Let‘s Encrypt泛域名证书申请与自动化续期实战指南

Let‘s Encrypt泛域名证书申请与自动化续期实战指南

1. 项目概述与核心价值最近在折腾自己的个人博客和几个内部服务,域名下挂了好几个子域名,每次给每个子域名单独申请SSL证书,不仅麻烦,续期更是让人头大。直到我开始用Let‘s Encrypt的泛域名证书,配合自动化续期脚本&a…

2026/7/4 23:17:06 阅读更多 →
多维聚合实战:超越GROUP BY的OLAP数据操作指南

多维聚合实战:超越GROUP BY的OLAP数据操作指南

1. 项目概述:多维聚合中的数据操作,远不止GROUP BY那么简单“Part 20: Data Manipulation in Multi-Dimensional Aggregation”这个标题乍看像教科书某章编号,但实际踩中了数据分析和商业智能工程中最常被低估、最易出错、也最具业务价值的一…

2026/7/4 23:17:06 阅读更多 →
AMD ROCm 7.1.1正式支持Windows:本地AI电影制作全栈落地

AMD ROCm 7.1.1正式支持Windows:本地AI电影制作全栈落地

1. 项目概述:当本地AI电影制作从“概念图”变成“开机键”2025年11月26日,我盯着终端里一行绿色的True输出,手有点抖。不是因为咖啡喝多了,而是因为torch.cuda.is_available()终于没再报错——它真真切切地返回了True,…

2026/7/4 23:15:05 阅读更多 →

日新闻

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 正式发布,这是一个关键的安全修复版本,修复了多个方面的问题,还对部分功能进行了优化。 安全修复亮点 此次发布在安全修复上表现突出。binprot 避免了项目引用计数溢出,mcmc 因安全问题提升了上游版本号&#xf…

2026/7/4 0:04:29 阅读更多 →
终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL(Hello Minecraft! Lau…

2026/7/4 0:06:29 阅读更多 →
KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

1. KMX63与PIC18F66K40的硬件协同架构解析KMX63作为一款三轴加速度计和磁力计组合传感器,与PIC18F66K40微控制器的搭配堪称嵌入式HMI开发的黄金组合。这套硬件组合的核心优势在于KMX63提供的高精度运动感知能力与PIC18F66K40强大的信号处理能力形成了完美互补。KMX6…

2026/7/4 0:06:29 阅读更多 →

周新闻

月新闻