以编程方式使用文档

Oracle Database 通过在单一系统中结合对非结构化内容的语义搜索与对业务数据的关系查询,支持以文档为中心的 AI 工作流。这使得构建检索工作流(如 RAG)变得更加容易,无需在多个数据库之间拆分数据和向量。

> **为什么选择数据库内文档处理?** > 您可以将 Oracle Database 的能力(安全性、事务、可扩展性和高可用性)应用到加载、分块和存储 AI 搜索和检索内容的同一管道中。

如果您刚开始使用 Oracle Database,可以考虑探索 免费的 Oracle AI Database 26ai,它提供了一种简单的设置方法。在使用数据库时,通常建议避免使用 SYSTEM 用户进行应用程序工作负载;相反,应创建一个具有最小必需权限的专用用户。关于用户管理的背景信息,请参阅官方 Oracle Database 指南.

概述

集成详情

兼容性本地PY 支持
OracleDocLoader@oracle/langchain-oracledb仅 Node
OracleTextSplitter@oracle/langchain-oracledb仅 Node

加载文档

用户可以灵活地从 Oracle Database、文件系统或两者加载文档,只需适当配置加载器参数。有关这些参数的详细信息,请参阅 Oracle AI 向量搜索指南.

使用 OracleDocLoader 的一个重要优势是其能够处理超过 150 种不同的文件格式,无需为不同文档类型使用多个加载器。有关支持格式的完整列表,请参阅 Oracle Text 支持的文档格式.

设置

要使用 OracleDocLoader,请安装 @oracle/langchain-oracledb helpers(使用 @langchain/core)并确保满足 Oracle Database 驱动程序的先决条件。有关 Oracle Database 驱动程序的详细信息,请参阅 指南

凭证

设置环境变量(或使用其他密钥管理器)以用于拥有源数据的 Oracle 用户。

安装

npm install @oracle/langchain-oracledb @langchain/core
yarn add @oracle/langchain-oracledb @langchain/core
pnpm add @oracle/langchain-oracledb @langchain/core

实例化

const connection = await oracledb.getConnection({
  user: process.env.ORACLE_USER,
  password: process.env.ORACLE_PASSWORD,
  connectionString: process.env.ORACLE_DSN,
});

const loader = new OracleDocLoader(connection, {
  owner: "TESTUSER",
  tablename: "DEMO_TAB",
  colname: "DATA",
});

// Remember to close the connection (or pool) when your application shuts down.
// await connection.close();

从 Oracle Database 加载

const docs = await loader.load();
console.log(`Loaded ${docs.length} documents`);
console.log(docs[0]?.pageContent.slice(0, 120));

从文件或目录加载

切换加载器参数以摄取本地内容。 OracleDocLoader 自动处理超过 150 种文件格式;请参阅 Oracle Text 支持的格式 获取完整列表。

const fileLoader = new OracleDocLoader(connection, {
  file: "/path/to/sample.pdf",
});

const directoryLoader = new OracleDocLoader(connection, {
  dir: "/path/to/documents",
});

分块文档

文档的大小可能有所不同,从小型到超大型不等。用户通常更喜欢将文档分块成较小的部分,以方便生成嵌入。这个拆分过程有多种自定义选项可供选择。有关这些参数的详细信息,请参阅 Oracle AI 向量搜索指南.

const splitter = new OracleTextSplitter(connection, {
  split: "chars",
  max: 500,
  normalize: "all",
});

const chunks = await splitter.splitText(docs[0].pageContent);
console.log(`Generated ${chunks.length} chunks`);

下一步

API 参考

有关所有详细文档 OracleDocLoaderOracleTextSplitter 功能及配置选项的详细文档,请访问 Oracle LangChain Oracle DB 仓库.