Loader 与 Splitter:让 RAG 能消化任何知识

一句话核心

● Loader:把各种来源(网页、PDF、Word、YouTube 等)转化为统一的 Document 对象。
● Splitter:把大文档切成合适大小的小块(chunk),确保检索效率和精度。

为什么需要 Loader 和 Splitter?

● RAG 的知识来源五花八门,不能手写 Document,需要用 Loader 自动化读取。
● 大文档直接向量化会丢失细节,必须用 Splitter 切成有重叠的小块,保证上下文连贯。

代码实现流程

  1. 加载网页内容(Loader)
import { CheerioWebBaseLoader } from "@langchain/community/document_loaders/web/cheerio";

const loader = new CheerioWebBaseLoader(
  "https://juejin.cn/post/xxx",           // 目标 URL
  { selector: '.main-area p' }             // 只提取指定区域
);
const docs = await loader.load();           // 得到 Document 数组

● 关键:@langchain/community 包含 180+ 社区 loader(PDF、CSV、YouTube 等)。
● 输出:Document 对象(含 pageContent 和 metadata)。
2. 分割文档器(Splitter)

import { RecursiveCharacterTextSplitter } from "@langchain/textsplitters";

const splitter = new RecursiveCharacterTextSplitter({
  chunkSize: 500,                          // 每块最大字符数
  chunkOverlap: 50,                         // 块间重叠,保留上下文
  separators: ["。", "!", "?"]              // 优先按句子分割
});
const splitDocs = await splitter.splitDocuments(docs); // 切成小块

● 作用:避免单块信息过多/过少,重叠部分防止切断关键语义。
● 输出:多个小型 Document,可直接用于向量化。
3. 完整 RAG 流程(loader + splitter + embeddings + retrieval)

// 初始化模型
const embeddings = new OpenAIEmbeddings({ model: "text-embedding-v3" });
const model = new ChatOpenAI({ model: "qwen-plus" });

// 加载 → 分割 → 向量化存储
const rawDocs = await loader.load();
const splitDocs = await splitter.splitDocuments(rawDocs);
const vectorStore = await MemoryVectorStore.fromDocuments(splitDocs, embeddings);

// 检索 + 生成
const retriever = vectorStore.asRetriever({ k: 2 });   // 取最相似 2 块
const relevant = await retriever.invoke(question);

// 增强生成
const prompt = `基于文章片段回答:\n${relevant.map(d => d.pageContent).join("\n")}\n问题:${question}`;
const answer = await model.invoke(prompt);

补充

● Loader 社区包:将外部数据源转为统一 Document(pageContent + metadata)。LangChain 社区包含 180+ 数据源加载器,如@langchain/community。
● Splitter 核心参数:chunkSize(块大小)、chunkOverlap(重叠)、separators(分割符优先级)。
● 切块原则:优先按句子分割,保留语义完整,重叠避免上下文断裂。
● 向量化:分割后的文档块才交给嵌入模型,否则大文档会丢失细节。

总结

Loader 把万物转成文档,Splitter 把文档切成适口小块,RAG 才能吃下真实世界的复杂知识。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值