Notion API
本指南将指导您完成使用 Notion API 从 Notion 页面和数据库加载文档所需的步骤。
概述
Notion 是一个多功能的生产力平台,它将笔记记录、任务管理和数据组织工具整合到一个界面中。
此文档加载器能够获取完整的 Notion 页面和数据库,并将它们转换为 LangChain 文档,这些文档可以随时集成到您的项目中。
设置
- 首先,您需要安装官方的 Notion 客户端和notion-to-md 包作为对等依赖项
- npm
- Yarn
- pnpm
npm install @langchain/community @langchain/core @notionhq/client notion-to-md
yarn add @langchain/community @langchain/core @notionhq/client notion-to-md
pnpm add @langchain/community @langchain/core @notionhq/client notion-to-md
- 创建一个Notion 集成 并安全地记录内部集成密钥(也称为
NOTION_INTEGRATION_TOKEN
)。 - 在您的页面或数据库上添加与新集成的连接。为此,请打开您的 Notion 页面,转到右上角的设置点,向下滚动到
添加连接
,然后选择您的新集成。 - 获取要加载的页面或数据库的
PAGE_ID
或DATABASE_ID
。
URL 路径中的 32 个字符十六进制表示
ID
。例如
PAGE_ID: https://www.notion.so/skarard/LangChain-Notion-API-
b34ca03f219c4420a6046fc4bdfdf7b4
DATABASE_ID: https://www.notion.so/skarard/
c393f19c3903440da0d34bf9c6c12ff2
?v=9c70a0f4e174498aa0f9021e0a9d52de
REGEX:
/(?<!=)[0-9a-f]{32}/
示例用法
import { NotionAPILoader } from "@langchain/community/document_loaders/web/notionapi";
import { RecursiveCharacterTextSplitter } from "@langchain/textsplitters";
// Loading a page (including child pages all as separate documents)
const pageLoader = new NotionAPILoader({
clientOptions: {
auth: "<NOTION_INTEGRATION_TOKEN>",
},
id: "<PAGE_ID>",
type: "page",
});
const splitter = new RecursiveCharacterTextSplitter();
// A page contents is likely to be more than 1000 characters so it's split into multiple documents (important for vectorization)
const pageDocs = await pageLoader.loadAndSplit(splitter);
console.log({ pageDocs });
// Loading a database (each row is a separate document with all properties as metadata)
const dbLoader = new NotionAPILoader({
clientOptions: {
auth: "<NOTION_INTEGRATION_TOKEN>",
},
id: "<DATABASE_ID>",
type: "database",
onDocumentLoaded: (current, total, currentTitle) => {
console.log(`Loaded Page: ${currentTitle} (${current}/${total})`);
},
callerOptions: {
maxConcurrency: 64, // Default value
},
propertiesAsHeader: true, // Prepends a front matter header of the page properties to the page contents
});
// A database row contents is likely to be less than 1000 characters so it's not split into multiple documents
const dbDocs = await dbLoader.load();
console.log({ dbDocs });
API 参考
- NotionAPILoader 来自
@langchain/community/document_loaders/web/notionapi
- RecursiveCharacterTextSplitter 来自
@langchain/textsplitters