RAG知识库预处理全流程拆解:网页爬取+语义分块实战教程

文章目录

    • 一、做RAG最头疼的不是大模型,是五花八门的原始数据
    • 二、Loader:搞定所有异构文件的万能适配器
      • 2.1 社区生态有多夸张?180+加载器全覆盖
    • 三、网页爬虫专用Loader:Cheerio底层逻辑拆解
      • 3.1 三步搞定网页正文提取
      • 3.2 极简可运行代码示例
    • 四、文本切割才是RAG灵魂,千万别整段丢进向量库
      • 4.1 完整网页直接入库,纯属自杀式操作
      • 4.2 递归字符切割器:智能顺着语义断点分割
      • 4.3 chunkOverlap重叠区间,解决语义断层问题
    • 五、完整可运行全链路代码,逐行拆解细节
      • 代码细节补充
    • 六、完整流水线流程梳理
    • 七、现在AI遍地写代码,程序员核心竞争力在哪?
      • 三个不可替代的核心能力
    • 八、全文总结&后续拓展方向
      • 核心要点复盘
      • 后续拓展链路

P.S. 目前国内还是很缺AI人才的,希望更多人能真正加入到AI行业,共同促进行业进步,增强我国的AI竞争力。想要系统学习AI知识的朋友可以看看我精心打磨的教程 http://blog.csdn.net/jiangjunshow,教程通俗易懂,高中生都能看懂,还有各种段子风趣幽默,从深度学习基础原理到各领域实战应用都有讲解,我22年的AI积累全在里面了。注意,教程仅限真正想入门AI的朋友,否则看看零散的博文就够了。

一、做RAG最头疼的不是大模型,是五花八门的原始数据

很多新手一上手做检索增强生成,上来就死磕OpenAI、本地大模型参数,调了三天发现问答效果稀烂,到最后才反应过来:源头数据根本没处理干净。

就像你去饭店点火锅,光纠结蘸料好不好吃,结果后厨给你端上来带泥带冰碴的生肉,蘸料再高级也救不了这锅菜。知识库预处理就是给食材清洗改刀,一步偷懒,后面全是无效工作。

我们日常能拿到的知识素材,格式乱到离谱:

  • 办公Word、PDF论文,排版嵌套多层
  • 各类网页文章、动态渲染资讯页
  • 视频字幕、社交平台零散推文

这些乱七八糟的内容,不能直接丢给向量库。LangChain给了一套统一标准,所有素材最终都要转换成Document对象,两个核心字段:pageContent存纯文本,metadata存来源、时间等附加信息。

Document就相当于AI圈子的通用饭盒,不管你是包子、米饭、麻辣烫,全都得装进同款盒子,向量数据库才认识。Loader就是专门打包饭盒的流水线工人。

二、Loader:搞定所有异构文件的万能适配器

2.1 社区生态有多夸张?180+加载器全覆盖

LangChain把底层基础接口放在@langchain/core,所有具体文件解析逻辑全部丢进@langchain/community社区包。

官方只搭骨架,各路开发者疯狂填充工具,现在社区攒出一百八十多种Loader,相当于外卖平台一百八十种打包工具,PDF、音频、网页全给你安排明白,甚至自己写个专属Loader提交开源都没问题。

Loader的核心工作就两件事:适配不同文件解析规则,统一输出Document数组,后面切割、向量化流程完全不用区分原始素材类型。

三、网页爬虫专用Loader:Cheerio底层逻辑拆解

3.1 三步搞定网页正文提取

处理网页首选CheerioWebBaseLoader,不用无头浏览器,轻量高效,整套流程分三步:

  1. 发送HTTP请求,拉取完整网页HTML源码
  2. Cheerio解析HTML生成DOM树,写法和前端jQuery一模一样
  3. 通过CSS选择器精准筛选正文节点,提取纯文本生成Document

后端开发不用再啃复杂DOM遍历、写一堆容错正则,直接用前端写页面的选择器语法找内容,相当于给后端开了外挂,抓文章正文比正则稳十倍。

3.2 极简可运行代码示例

import{CheerioWebBaseLoader}from"@langchain/community/document_loaders/web/cheerio";// 指定文章链接+正文段落选择器constloader=newCheerioWebBaseLoader('目标文章链接',{selector:'.main-area p'});// 输出段落对应的Document数组constdocs=awaitloader.load();

💡温馨提示
不传selector会抓取整个页面body,导航栏、广告、侧边栏垃圾文本全混进去,检索直接报废,生产环境必须精准限定选择器。

四、文本切割才是RAG灵魂,千万别整段丢进向量库

4.1 完整网页直接入库,纯属自杀式操作

绝大多数大模型上下文窗口只有4k、8k字符,一篇长网页直接塞进去直接超限;其次检索的最小单元需要独立语义,整篇文章做向量,用户提问只能匹配整篇,精准度直接归零。

把整篇文章当一个块,就像字典只有一个词条,你查某个汉字,直接给你整本字典,想找的内容埋在几千字里,模型根本抓不住重点。

4.2 递归字符切割器:智能顺着语义断点分割

RecursiveCharacterTextSplitter核心思路是递归试探分隔符,优先级从高到低:句号、感叹号、问号,再降级换行、空格。

分割逻辑:优先用高优先级标点拆分,拆分后每段长度达标就停止;段落超长,自动用下一档分隔符继续切,最大程度保证句子完整不被拦腰截断。

粗暴按固定字数切割,一句话劈成两半,前半段存第一块、后半段存第二块,用户问相关内容,检索只命中一半,回答牛头不对马嘴,递归切割完美避开这个坑。

4.3 chunkOverlap重叠区间,解决语义断层问题

重叠字符一般设置为块大小的10%-25%,相邻分块末尾、开头保留重复文本。

哪怕分割刚好卡在句子中间,前后两块都携带完整上下文,不管检索命中哪一块,都能拿到完整逻辑。

好比电视剧上下集,每集结尾重复上一集最后五分钟剧情,不用来回翻找上下文,向量检索的召回率直接拉高一大截。唯一缺点是向量库存储量小幅上涨,属于用空间换精度。

五、完整可运行全链路代码,逐行拆解细节

import"dotenv/config";import"cheerio";import{CheerioWebBaseLoader}from"@langchain/community/document_loaders/web/cheerio";import{RecursiveCharacterTextSplitter}from'@langchain/textsplitters';// 1. 初始化网页加载器,限定正文区域constcheerioLoader=newCheerioWebBaseLoader('掘金文章链接',{selector:'.main-area p'});// 2. 拉取网页,生成段落Document数组constdocuments=awaitcheerioLoader.load();// 3. 配置语义切割参数consttextSplitter=newRecursiveCharacterTextSplitter({chunkSize:400,separators:['。','!','?'],chunkOverlap:100,});// 4. 执行分割,输出待向量化文档constsplitDocuments=awaittextSplitter.splitDocuments(documents);console.log(splitDocuments);

代码细节补充

只配置三个中文标点做分隔符,是优先保障句子完整;如果分割后段落依旧超长,工具内部会自动启用换行、空格等后备分隔符,不用手动补充层级。

示例400字符块搭配100字符重叠,刚好25%重叠率,适配绝大多数中文技术文档;小说、短文案可以下调重叠,专业论文建议提升至30%。

六、完整流水线流程梳理

原始URL → HTTP请求拉取HTML → Cheerio按选择器提取正文 → 生成单段落Document数组 → 递归语义分割 → 带重叠的标准文本块 → 向量化存入向量数据库

整套流程就是食材清洗、改刀分装流水线,前面每一步精细处理,后面向量检索、LLM问答才能少踩坑,前端调模型半天不如预处理多花十分钟。

七、现在AI遍地写代码,程序员核心竞争力在哪?

现在AI能一键生成完整RAG代码,复制粘贴就能跑,但绝大多数人只会复制,不懂参数背后的取舍逻辑。

AI相当于只会按菜谱做菜的学徒,你是掌勺大厨,AI能把菜做熟,但火候、刀工、食材搭配的取舍,只有你能把控。

三个不可替代的核心能力

  1. 精准构建上下文:写高效提示词,搭建干净无噪音的知识库素材;
  2. 设计稳定Agent循环:处理爬虫重试、异常捕获、状态管理;
  3. 知识库架构调优:块大小、重叠率、分隔符策略直接决定检索质量,没有固定标准答案,需要结合业务场景调试。

简单的增删改查代码AI能全覆盖,但RAG预处理、知识库架构这种权衡型工作,是AI架构师和普通开发的分界线。

八、全文总结&后续拓展方向

核心要点复盘

  • Loader是异构数据统一转换器,标准化输出Document对象;
  • Cheerio网页加载器依靠CSS选择器精准过滤网页冗余噪音;
  • 递归文本分割优先遵循自然语言语义边界,重叠区间弥补分割断层;
  • 预处理是RAG底层基石,劣质分块直接导致检索失效。

行业老话:垃圾进,垃圾出。向量库再贵、大模型再强,原始文本切得乱七八糟,问答效果永远上不去,预处理看似基础,实则是整套系统的胜负手。

后续拓展链路

分割完成的Document,接入Embeddings向量化模型,存入Chroma、Pinecone等向量库,就能搭建完整可用的RAG问答系统,后续可以继续优化清洗规则、自定义分块策略适配垂直行业知识库。

P.S. 目前国内还是很缺AI人才的,希望更多人能真正加入到AI行业,共同促进行业进步,增强我国的AI竞争力。想要系统学习AI知识的朋友可以看看我精心打磨的教程 http://blog.csdn.net/jiangjunshow,教程通俗易懂,高中生都能看懂,还有各种段子风趣幽默,从深度学习基础原理到各领域实战应用都有讲解,我22年的AI积累全在里面了。注意,教程仅限真正想入门AI的朋友,否则看看零散的博文就够够了