Skip to main content
兼容性:仅适用于 Node.js。
Oracle 数据库通过将非结构化内容的语义搜索与业务数据的关系查询结合在单一系统中,支持以文档为中心的人工智能工作流。这使得构建检索工作流(如 RAG)变得更加容易,无需将数据和向量分散在多个数据库中。
为什么选择数据库内文档处理? 您可以将 Oracle 数据库的能力——安全性、事务处理、可扩展性和高可用性——应用于加载、分块和存储内容以供 AI 搜索和检索的同一管道中。
如果您刚开始使用 Oracle 数据库,可以考虑探索免费的 Oracle AI Database 26ai,它提供了一种简单的设置方式。在使用数据库时,通常建议避免使用 SYSTEM 用户处理应用程序工作负载;相反,应创建一个具有最低所需权限的专用用户。有关用户管理的背景信息,请参阅官方 Oracle 数据库指南

概述

集成详情

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

加载文档

用户可以通过适当配置加载器参数,灵活地从 Oracle 数据库、文件系统或两者加载文档。有关这些参数的完整详细信息,请查阅 Oracle AI 向量搜索指南 使用 OracleDocLoader 的一个显著优势是它能够处理超过 150 种不同的文件格式,无需为不同类型的文档使用多个加载器。有关支持格式的完整列表,请参阅 Oracle Text 支持的文档格式

设置

要使用 OracleDocLoader,请安装 @oracle/langchain-oracledb 辅助工具(与 @langchain/core 一起),并确保满足 Oracle 数据库驱动程序的先决条件。有关 Oracle 数据库驱动程序的全面信息,请参阅指南

凭据

为拥有源数据的 Oracle 用户设置环境变量(或使用其他密钥管理器)。
export ORACLE_USER=testuser
export ORACLE_PASSWORD=testuser
export ORACLE_DSN="localhost:1521/free"

安装

npm install @oracle/langchain-oracledb @langchain/core

实例化

import oracledb from "oracledb";
import { OracleDocLoader } from "@oracle/langchain-oracledb";

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",
});

// 记得在应用程序关闭时关闭连接(或连接池)。
// await connection.close();

从 Oracle 数据库加载

const docs = await loader.load();
console.log(`已加载 ${docs.length} 个文档`);
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 向量搜索指南
import { OracleTextSplitter } from "@oracle/langchain-oracledb";

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

const chunks = await splitter.splitText(docs[0].pageContent);
console.log(`生成了 ${chunks.length} 个块`);

后续步骤


API 参考

有关 OracleDocLoaderOracleTextSplitter 所有功能和配置选项的详细文档,请前往 Oracle LangChain Oracle DB 仓库