> ## Documentation Index
> Fetch the complete documentation index at: https://langchain-docs-zh.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Oracle AI 向量搜索生成集成

> 使用 LangChain Python 集成 Oracle AI 向量搜索生成嵌入模型。

Oracle AI Database 支持通过 **语义**（而非关键词）查询数据的工作负载。它将 **非结构化内容的语义搜索** 与 **业务数据的关系过滤** 整合到一个系统中——从而无需引入独立的向量数据库即可构建检索工作流（如 RAG），同时避免数据分散到多个平台。

本指南演示如何使用 `OracleEmbeddings` 为您的内容生成嵌入。

> **为什么在（或通过）Oracle生成嵌入？**
> 您可以在保持数据治理和运营保障（安全、事务、可用性）与AI工作流紧密关联的同时，选择适合环境的环境适配的嵌入模型。

### 前置条件

安装 `langchain-oracledb`。`python-oracledb` 驱动会自动作为依赖安装。

```bash pip theme={null}
pip install -qU langchain-oracledb
```

```bash uv theme={null}
uv add langchain-oracledb
```

### 连接到Oracle数据库

以下示例代码将展示如何连接到Oracle数据库。默认情况下，python-oracledb 以“薄模式”运行，直接连接Oracle数据库。该模式无需Oracle客户端库。但使用客户端库时（“厚模式”）可获取更多功能。两种模式均完整支持Python数据库API v2.0规范。请参考 [此指南](https://python-oracledb.readthedocs.io/en/latest/user_guide/appendix_a.html#featuresummary) 查看各模式支持的功能。若无法使用薄模式，可能需要切换至厚模式。

```python theme={null}
import sys

import oracledb

# Please update with your username, password, hostname, port and service_name
username = "<username>"
password = "<password>"
dsn = "<hostname>:<port>/<service_name>"

connection = oracledb.connect(user=username, password=password, dsn=dsn)
print("Connection successful!")
```

对于嵌入生成，用户可选择数据库内置方案或第三方服务（如OcigenAI、Hugging Face、OpenAI）。选择第三方服务需配置包含认证信息的凭证。若选择“数据库”方案，则需将ONNX模型加载至Oracle数据库。

### 加载ONNX模型

Oracle支持多种嵌入服务提供商，用户可在数据库原生方案与第三方服务（如OCIGENAI、HuggingFace）间选择。该选择将决定嵌入生成与管理的方法。

***重要***：若选择数据库方案，必须将ONNX模型上传至Oracle数据库。若选择第三方服务，则无需上传ONNX模型至Oracle数据库。

直接在Oracle使用ONNX模型的优势在于：无需传输数据至外部方，从而提升安全性和性能；同时避免网络或REST API调用带来的延迟。

以下是上传ONNX模型至Oracle数据库的示例代码：

```python theme={null}
from langchain_oracledb.embeddings.oracleai import OracleEmbeddings

# Update the directory and file names for your ONNX model
# make sure that you have onnx file in the system
onnx_dir = "DEMO_DIR"
onnx_file = "tinybert.onnx"
model_name = "demo_model"

try:
    OracleEmbeddings.load_onnx_model(conn, onnx_dir, onnx_file, model_name)
    print("ONNX model loaded.")
except Exception as e:
    print("ONNX model loading failed!")
    sys.exit(1)
```

### 创建凭证

选择第三方服务生成嵌入时，需创建包含认证信息的凭证以安全访问服务端点。

***重要***：选择“数据库”方案无需凭证。但若使用第三方服务，必须创建对应服务的凭证。

以下是创建凭证的示例：

```python theme={null}
try:
    cursor = conn.cursor()
    cursor.execute(
        """
       declare
           jo json_object_t;
       begin
           -- HuggingFace
           dbms_vector_chain.drop_credential(credential_name  => 'HF_CRED');
           jo := json_object_t();
           jo.put('access_token', '<access_token>');
           dbms_vector_chain.create_credential(
               credential_name   =>  'HF_CRED',
               params            => json(jo.to_string));

           -- OCIGENAI
           dbms_vector_chain.drop_credential(credential_name  => 'OCI_CRED');
           jo := json_object_t();
           jo.put('user_ocid','<user_ocid>');
           jo.put('tenancy_ocid','<tenancy_ocid>');
           jo.put('compartment_ocid','<compartment_ocid>');
           jo.put('private_key','<private_key>');
           jo.put('fingerprint','<fingerprint>');
           dbms_vector_chain.create_credential(
               credential_name   => 'OCI_CRED',
               params            => json(jo.to_string));
       end;
       """
    )
    cursor.close()
    print("Credentials created.")
except Exception as ex:
    cursor.close()
    raise
```

### 生成嵌入

Oracle AI Vector Search 支持通过本地ONNX模型或第三方API生成嵌入。配置这些替代方案的完整指南请参考 [Oracle AI Vector Search用户指南](https://docs.oracle.com/en/database/oracle/oracle-database/23/arpls/dbms_vector_chain1.html#GUID-C6439E94-4E86-4ECD-954E-4B73D53579DE)。

***注意***：使用第三方嵌入生成服务时可能需要配置代理（“数据库”方案通过ONNX模型无需代理）。

```python theme={null}
# proxy to be used when we instantiate summary and embedder object
proxy = "<proxy>"
```

以下示例代码将展示如何生成嵌入：

```python theme={null}
from langchain_oracledb.embeddings.oracleai import OracleEmbeddings
from langchain_core.documents import Document

"""
# using ocigenai
embedder_params = {
    "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",
}

# using huggingface
embedder_params = {
    "provider": "huggingface",
    "credential_name": "HF_CRED",
    "url": "https://api-inference.huggingface.co/pipeline/feature-extraction/",
    "model": "sentence-transformers/all-MiniLM-L6-v2",
    "wait_for_model": "true"
}
"""

# using ONNX model loaded to Oracle Database
embedder_params = {"provider": "database", "model": "demo_model"}

# If a proxy is not required for your environment, you can omit the 'proxy' parameter below
embedder = OracleEmbeddings(conn=conn, params=embedder_params, proxy=proxy)
embed = embedder.embed_query("Hello World!")

""" verify """
print(f"Embedding generated by OracleEmbeddings: {embed}")
```

### 全流程演示

请参考完整演示指南 [Oracle AI Vector Search端到端演示指南](https://github.com/langchain-ai/langchain/blob/v0.3/cookbook/oracleai_demo.ipynb) 构建RAG全流程。

***

> 官方原文：[src/oss/python/integrations/embeddings/oracleai.mdx](https://github.com/langchain-ai/docs/blob/main/src/oss/python/integrations/embeddings/oracleai.mdx) · 非官方翻译，译文由 AI 生成，以英文原文为准。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.