Skip to main content
兼容性:仅在 Node.js 上可用。
Oracle AI Database 支持 AI 工作负载,您可以按含义(语义)而非仅关键词来查询数据。它将非结构化内容的语义搜索业务数据的关系型过滤结合在一个系统中——因此您可以构建检索工作流(如 RAG),而无需引入单独的向量数据库或将数据分散在多个平台上。 本指南演示如何使用 OracleEmbeddings 为您的内容生成嵌入。
为什么在 Oracle 中(或通过 Oracle)生成嵌入? 您可以将数据治理和操作保证(安全性、事务、可用性)保持在 AI 工作流附近——同时选择适合您环境的嵌入提供程序模型。

概述

集成详情

本地Python 支持
OracleEmbeddings@oracle/langchain-oracledb

设置

要使用 OracleEmbeddings,请安装 @oracle/langchain-oracledb 助手(以及 @langchain/core),并确保您的系统满足 Oracle Database 驱动程序先决条件。

凭据

导出凭据(或从您的秘密管理器加载)用于拥有您的向量表和 ONNX 模型的 Oracle 用户。
export ORACLE_USER=testuser
export ORACLE_PASSWORD=testuser
export ORACLE_DSN="localhost:1521/free"
如果您计划调用第三方提供程序(例如,OCI Generative AI 或 Hugging Face),您必须首先在 Oracle Database 内创建凭据。请参阅 Oracle AI Vector Search 指南 了解 PL/SQL 助手过程。

安装

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

实例化嵌入

import oracledb from "oracledb";
import { OracleEmbeddings } 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 embeddings = new OracleEmbeddings(connection, {
  provider: "database",
  model: "DEMO_MODEL",
});

// 完成后关闭连接(或池)以避免资源泄漏。
// await connection.close();
构造函数的第三个参数是可选的 proxy 字符串。当出站请求必须通过 HTTP 代理时使用它(例如,从私有网络内调用 Hugging Face 时)。

在 Oracle Database 内部运行 ONNX 模型

Oracle Database 支持各种嵌入提供程序,使用户能够在专有数据库解决方案和第三方服务(如 OCIGENAI 和 HuggingFace)之间进行选择。此选择决定了生成和管理嵌入的方法。 重要:如果用户选择数据库选项,则必须将 ONNX 模型上传到 Oracle Database。相反,如果选择第三方提供程序进行嵌入生成,则无需将 ONNX 模型上传到 Oracle Database。 直接在 Oracle 内使用 ONNX 模型的一个重要优势是,它通过消除将数据传输到外部方的需要,提供了增强的安全性和性能。此外,此方法避免了通常与网络或 REST API 调用相关的延迟。 以下是将 ONNX 模型上传到 Oracle Database 的示例代码:
import { OracleEmbeddings } from "@oracle/langchain-oracledb";

await OracleEmbeddings.loadOnnxModel(
  connection,
  "/path/to/model",
  "all-minilm-l12-v2.onnx",
  "DEMO_MODEL",
);

const dbEmbeddings = new OracleEmbeddings(connection, {
  provider: "database",
  model: "DEMO_MODEL",
});

const singleVector = await dbEmbeddings.embedQuery(
  "Summarize hybrid search patterns in Oracle Database.",
);
console.log(singleVector.length);

调用托管嵌入提供程序

provider 切换为通过 OCI Generative AI 或 Hugging Face 路由嵌入请求。提供您使用 Oracle 的 DBMS_VECTOR_CHAIN 助手创建的凭据名称,如果需要,还需提供代理。
const ociEmbeddings = new OracleEmbeddings(connection, {
  provider: "ocigenai",
  credential_name: "OCI_CRED",
  url: "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/embedText",
  model: "cohere.embed-english-light-v3.0",
}, process.env.HTTP_PROXY);

const hfEmbeddings = new OracleEmbeddings(connection, {
  provider: "huggingface",
  credential_name: "HF_CRED",
  url: "https://api-inference.huggingface.co/pipeline/feature-extraction/",
  model: "sentence-transformers/all-MiniLM-L6-v2",
});

// 完成后清理:
// await connection.close();

为检索嵌入文档

使用相同的嵌入实例准备内容,用于 Oracle Database 中的向量存储或混合检索。
import { OracleDocLoader, OracleTextSplitter } from "@oracle/langchain-oracledb";

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

const docs = await loader.load();

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

const chunks = await splitter.splitText(docs[0].pageContent);
const vectors = await embeddings.embedDocuments(chunks);

console.log(`Generated ${vectors.length} vectors`);

后续步骤


API 参考

有关所有 OracleEmbeddings 选项的详细文档,请访问 Oracle LangChain Oracle DB 仓库