一键导入
langchain-document-loaders
使用 LangChain 中的文档加载器集成指南,用于处理 PDF、网页、文本文件和 API
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
使用 LangChain 中的文档加载器集成指南,用于处理 PDF、网页、文本文件和 API
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Mac 系统深度清理和优化工具。使用 Mole (mo 命令) 执行系统清理、磁盘分析、应用卸载、系统优化等任务。 触发场景(当用户提到以下任一内容时使用此 skill): - 清理 Mac、清理磁盘、释放空间、清理缓存、清理系统 - 卸载应用、删除应用、移除应用及其残留 - 磁盘分析、查看磁盘占用、大文件查找、空间分析 - 系统优化、系统维护、刷新系统、重建缓存 - 系统状态、系统监控、CPU/内存/磁盘监控 - 清理 node_modules、清理构建产物、清理项目依赖 - 清理安装包、删除 dmg/pkg 文件 - Mac 清理工具、类似 CleanMyMac 的功能 - "我的 Mac 太慢了"、"磁盘空间不足"、"电脑卡顿" - 即使没有明确说 "Mole",只要涉及上述场景就应使用
快速搭建和配置 pnpm monorepo 项目结构,包含 TypeScript、tsup 构建、私有 npm registry 配置。当用户需要"创建 monorepo"、"初始化 monorepo 项目"、"配置 pnpm workspace"、"设置 monorepo 构建"、"monorepo setup"时使用。特别适合需要统一管理多个包、配置构建工具、处理 TypeScript 路径问题的场景。即使用户只是说"帮我搭建项目结构"或"配置构建",如果涉及多包管理也应该使用此 skill。
智能拆分暂存区的代码变更为多个符合 Conventional Commits 规范的逻辑提交。当用户需要将大量变更按逻辑关系分组提交时使用,比如"拆分这些提交"、"把暂存区的变更分成多个 commit"、"按功能分别提交"、"split commits"等场景。特别适合处理包含多个模块、多种类型文件(配置、代码、测试、文档)的复杂变更集。
OKR 优化与质量评估专家。当用户需要:(1) 评估现有 OKR 的质量,(2) 优化模糊或不可量化的关键结果,(3) 检查 OKR 是否符合核心原则(聚焦、可量化、有挑战),(4) 将任务型 KR 转化为结果型 KR,(5) 提供具体的改进建议时使用。触发词包括"帮我优化 OKR"、"检查这个 OKR"、"这个 KR 写得好吗"、"如何量化这个目标"。
基于 git commits 自动生成 CHANGELOG.md 变更日志。支持语义化版本、分类整理、多格式输出。触发场景包括"生成变更日志"、"更新 CHANGELOG"、"版本记录"。
GitHub PR 代码审查技能。检查代码质量、安全性、性能和最佳实践,生成结构化审查报告。触发场景包括"审查 PR"、"代码检查"、"review pull request"。
| name | langchain-document-loaders |
| description | 使用 LangChain 中的文档加载器集成指南,用于处理 PDF、网页、文本文件和 API |
| language | js |
文档加载器将来自各种来源和格式的数据提取到 LangChain 的标准化文档格式中。它们对于构建 RAG 系统至关重要,因为它们将原始数据转换为可处理的文本块和元数据。
pageContent(文本)和 metadata(来源信息、页码等)的对象| 加载器类型 | 最适合 | 包 | 主要特性 |
|---|---|---|---|
| PDFLoader | PDF 文件 | @langchain/community | 提取文本和页码 |
| CheerioWebBaseLoader | 网页(静态) | @langchain/community | 使用 Cheerio 进行 HTML 解析 |
| PlaywrightWebBaseLoader | 网页(动态) | @langchain/community | JavaScript 渲染的内容 |
| TextLoader | 纯文本文件 | langchain/document_loaders/fs/text | 简单文本文件 |
| JSONLoader | JSON 文件/API | langchain/document_loaders/fs/json | 提取特定 JSON 字段 |
| CSVLoader | CSV 文件 | @langchain/community | 表格数据 |
| DirectoryLoader | 多个文件 | langchain/document_loaders/fs/directory | 从目录批量加载 |
| GithubRepoLoader | GitHub 仓库 | @langchain/community | 克隆和加载仓库文件 |
| NotionLoader | Notion 页面 | @langchain/community | Notion 工作区数据 |
选择 PDFLoader 如果:
选择 CheerioWebBaseLoader 如果:
选择 PlaywrightWebBaseLoader 如果:
选择 TextLoader 如果:
import { PDFLoader } from "@langchain/community/document_loaders/fs/pdf";
// 加载 PDF 文件
const loader = new PDFLoader("path/to/document.pdf");
const docs = await loader.load();
console.log(`加载了 ${docs.length} 页`);
docs.forEach((doc, i) => {
console.log(`第 ${i + 1} 页:`, doc.metadata);
console.log(doc.pageContent.substring(0, 100));
});
// 每页都是单独的文档
// metadata 包括:source、pdf.totalPages、loc.pageNumber
import { CheerioWebBaseLoader } from "@langchain/community/document_loaders/web/cheerio";
// 加载单个 URL
const loader = new CheerioWebBaseLoader(
"https://docs.langchain.com"
);
const docs = await loader.load();
console.log(docs[0].pageContent);
console.log(docs[0].metadata); // { source: url, ... }
// 使用自定义选择器
const loaderWithSelector = new CheerioWebBaseLoader(
"https://news.ycombinator.com",
{
selector: ".storylink", // 仅提取特定元素
}
);
// 多个 URL
const loaderMultiple = new CheerioWebBaseLoader([
"https://example.com/page1",
"https://example.com/page2",
]);
const allDocs = await loaderMultiple.load();
import { PlaywrightWebBaseLoader } from "@langchain/community/document_loaders/web/playwright";
// 用于 JavaScript 渲染的页面
const loader = new PlaywrightWebBaseLoader("https://spa-app.com", {
launchOptions: {
headless: true,
},
gotoOptions: {
waitUntil: "networkidle", // 等待 JS 完成
},
evaluateOptions: {
// 自定义评估函数
evaluate: (page) => page.evaluate(() => document.body.innerText),
},
});
const docs = await loader.load();
import { TextLoader } from "langchain/document_loaders/fs/text";
const loader = new TextLoader("path/to/file.txt");
const docs = await loader.load();
// 返回包含整个文件内容的单个文档
console.log(docs[0].pageContent);
console.log(docs[0].metadata.source); // 文件路径
import { JSONLoader } from "langchain/document_loaders/fs/json";
// 使用特定字段提取加载 JSON
const loader = new JSONLoader(
"path/to/data.json",
["/texts/*/content"] // JSONPointer 以提取特定字段
);
const docs = await loader.load();
// 示例 JSON:{ "texts": [{ "content": "...", "id": 1 }] }
// 每个匹配的字段都成为一个文档
import { CSVLoader } from "@langchain/community/document_loaders/fs/csv";
const loader = new CSVLoader("path/to/data.csv", {
column: "text", // 用作 page_content 的列
separator: ",",
});
const docs = await loader.load();
// 每行都成为一个文档
// 其他列存储在 metadata 中
import { DirectoryLoader } from "langchain/document_loaders/fs/directory";
import { TextLoader } from "langchain/document_loaders/fs/text";
import { PDFLoader } from "@langchain/community/document_loaders/fs/pdf";
// 从目录加载所有文件
const loader = new DirectoryLoader(
"path/to/documents",
{
".txt": (path) => new TextLoader(path),
".pdf": (path) => new PDFLoader(path),
}
);
const docs = await loader.load();
console.log(`从目录加载了 ${docs.length} 个文档`);
import { GithubRepoLoader } from "@langchain/community/document_loaders/web/github";
const loader = new GithubRepoLoader(
"https://github.com/langchain-ai/langchainjs",
{
branch: "main",
recursive: true,
ignorePaths: ["node_modules/**", "dist/**"],
maxConcurrency: 5,
}
);
const docs = await loader.load();
// 每个文件都成为一个文档
import { CheerioWebBaseLoader } from "@langchain/community/document_loaders/web/cheerio";
const loader = new CheerioWebBaseLoader("https://blog.com/post");
const docs = await loader.load();
// 添加自定义元数据
const enrichedDocs = docs.map(doc => ({
...doc,
metadata: {
...doc.metadata,
loadedAt: new Date().toISOString(),
category: "blog",
},
}));
import { PDFLoader } from "@langchain/community/document_loaders/fs/pdf";
const loader = new PDFLoader("large-file.pdf");
// 使用 lazy() 处理大文件 - 流式传输文档
for await (const doc of loader.lazy()) {
console.log("正在处理页面:", doc.metadata.loc.pageNumber);
// 一次处理一页,而不将所有页面加载到内存中
}
✅ 从各种来源加载
✅ 带元数据提取
✅ 高效处理
✅ 自定义提取
❌ 从加密/受保护的文件中提取
❌ 直接处理二进制数据
❌ 处理所有 PDF 类型
❌ 绕过速率限制
// ❌ 如果未安装 pdf-parse 将失败
import { PDFLoader } from "@langchain/community/document_loaders/fs/pdf";
const loader = new PDFLoader("file.pdf");
// ✅ 首先安装依赖项
// npm install pdf-parse
const loader = new PDFLoader("file.pdf");
const docs = await loader.load(); // 有效!
修复:安装所需的依赖项:npm install pdf-parse
// ❌ 可能因 CORS 或阻止而失败
const loader = new CheerioWebBaseLoader("https://protected-site.com");
await loader.load(); // 错误!
// ✅ 检查 robots.txt 并使用适当的加载器
// 对于客户端阻止,在 Node.js 中运行(服务端)
// 对于动态内容,使用 Playwright
const loader = new PlaywrightWebBaseLoader("https://protected-site.com");
修复:对于被阻止的站点,使用 PlaywrightWebBaseLoader 或检查 robots.txt。
// ❌ 将巨大的 PDF 加载到内存中
const loader = new PDFLoader("huge-book.pdf");
const docs = await loader.load(); // 可能会崩溃!
// ✅ 使用延迟加载
for await (const doc of loader.lazy()) {
processDocument(doc);
// 一次只有一页在内存中
}
修复:对大文件使用 lazy() 方法。
// ❌ 相对路径可能无法按预期工作
const loader = new TextLoader("./data/file.txt");
// ✅ 使用绝对路径或 path 模块
import path from "path";
const filePath = path.join(process.cwd(), "data", "file.txt");
const loader = new TextLoader(filePath);
修复:使用绝对路径或 path 模块以确保可靠性。
// ❌ 对动态内容使用 Cheerio
const loader = new CheerioWebBaseLoader("https://react-app.com");
const docs = await loader.load();
// 内容为空或不完整!
// ✅ 对 JavaScript 渲染的页面使用 Playwright
const loader = new PlaywrightWebBaseLoader("https://react-app.com", {
gotoOptions: { waitUntil: "networkidle" }
});
修复:对 SPA 和动态内容使用 Playwright。
// ❌ 错误的 JSON 指针格式
const loader = new JSONLoader("data.json", ["texts.content"]);
// ✅ 正确的 JSON 指针格式(以 / 开头)
const loader = new JSONLoader("data.json", ["/texts/0/content"]);
修复:JSON 指针必须以 / 开头并使用 / 作为分隔符。
// ❌ 扩展名不匹配
const loader = new DirectoryLoader("docs", {
"txt": (path) => new TextLoader(path), // 错误!
});
// ✅ 包括点
const loader = new DirectoryLoader("docs", {
".txt": (path) => new TextLoader(path),
".pdf": (path) => new PDFLoader(path),
});
修复:文件扩展名必须包括点(.txt、.pdf)。
# 社区加载器
npm install @langchain/community
# PDF 支持
npm install pdf-parse
# 用于动态网页的 Playwright
npm install playwright
npx playwright install