Oracle AI 数据库支持通过以下方式查询数据的 AI 工作负载 **语义** (语义),而不仅仅是关键词。它结合了 **对非结构化内容的语义搜索** 与 **对业务数据的关联过滤** 在单一系统中——这样您就可以构建检索工作流(如 RAG),而无需引入单独的向量数据库和在多个平台之间分散数据。
本指南演示如何使用以下方式为您的内容生成嵌入 OracleEmbeddings.
> **为什么在 Oracle 中(或通过 Oracle)生成嵌入?** > 您可以将数据治理和运维保障(安全、事务、可用性)保留在您的 AI 工作流附近——同时选择适合您环境的嵌入提供程序模型。
概览
集成详情
| 类 | 包 | 本地 | PY 支持 |
|---|---|---|---|
OracleEmbeddings | @oracle/langchain-oracledb | ✅ | ✅ |
设置
要使用 OracleEmbeddings,请安装 @oracle/langchain-oracledb 辅助工具(以及 @langchain/core),并确保满足您系统的 Oracle 数据库驱动程序先决条件。
凭证
导出 Oracle 用户的凭证(或从您的密钥管理器加载),该用户拥有您的向量表和 ONNX 模型。
如果您计划调用第三方提供商(例如 OCI Generative AI 或 Hugging Face),您必须先在 Oracle Database 中创建凭证。请参阅 Oracle AI 向量搜索指南 for the PL/SQL helper procedures.
安装
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 embeddings = new OracleEmbeddings(connection, {
provider: "database",
model: "DEMO_MODEL",
});
// Close the connection (or pool) when you are done to avoid leaking resources.
// 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 的示例代码:
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",
});
// Clean up when finished:
// await connection.close();
嵌入文档以供检索
使用相同的嵌入实例来准备内容,以便在 Oracle Database 中进行向量存储或混合检索。
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`);
后续步骤
- - 使用以下方式存储嵌入
OracleVS进行混合搜索 - - 使用以下方式总结文档
OracleSummary
API 参考
有关所有 OracleEmbeddings 选项的详细文档,请访问 Oracle LangChain Oracle DB 存储库.