Appearance
02-text-splitter.ts
文本切分器示例,将长文档切分成适合的块大小。
功能介绍
这个示例演示了如何使用 RecursiveCharacterTextSplitter 将长文档切分成较小的块。切分后的块更适合向量化和检索,也便于放入模型的上下文窗口。
使用场景
- 长文档预处理,适合模型输入限制
- 准备文档用于向量化和检索
- 控制每个块的大小和重叠程度
- 保持上下文连贯性的同时切分文档
学习要点
- 使用
RecursiveCharacterTextSplitter从@langchain/textsplitters创建切分器 chunkSize参数控制每个块的最大字符数chunkOverlap参数控制块之间的重叠(保持上下文连贯性)- 调用
splitDocuments()方法进行切分 - 进行环境变量检查和错误处理
源码
typescript
import "dotenv/config";
import { Document } from "@langchain/core/documents";
import { RecursiveCharacterTextSplitter } from "@langchain/textsplitters";
import { loadLocalFile } from "./_shared/loadLocalFile.js";
async function main() {
try {
console.log("=== Text Splitter 示例 ===\n");
const docs: Document[] = await loadLocalFile("src/04-rag/data/langchain-concepts.md");
// 创建切分器
const splitter = new RecursiveCharacterTextSplitter({
chunkSize: 100,
chunkOverlap: 20,
});
const chunks: Document[] = await splitter.splitDocuments(docs);
console.log("切分后的块数量:", chunks.length);
console.log("\n");
chunks.forEach((chunk: Document, i: number) => {
console.log(`--- 块 ${i + 1} ---`);
console.log(chunk.pageContent);
console.log();
});
} catch (error) {
console.error("Error during text splitter example:", error);
process.exit(1);
}
}
main().catch(console.error);运行方式
bash
npm run dev src/04-rag/02-text-splitter.ts