بنقرة واحدة
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