深入探讨Oracle AI Vector Search:生成嵌入的实用指南

75 阅读3分钟

深入探讨Oracle AI Vector Search:生成嵌入的实用指南

引言

Oracle AI Vector Search被设计用于人工智能(AI)工作负载,允许基于语义而非关键词来查询数据。这种语义搜索可以与业务数据的关系搜索结合在一个系统中,消除了数据在多个系统间碎片化的痛点。本文将详细介绍如何使用Oracle AI Vector Search中的嵌入功能(Embeddings Capability)来为您的文档生成嵌入(Embeddings)。

主要内容

Oracle AI Vector Search的优势

Oracle AI Vector Search在一个单一的系统中集成了语义搜索和关系搜索,且具备如下优势:

  • 分区支持
  • 实时应用集群(RAC)可扩展性
  • Exadata智能扫描
  • 跨地理分布数据库的分片处理
  • 事务处理
  • 并行SQL
  • 灾难恢复
  • 安全性
  • Oracle机器学习
  • Oracle图数据库
  • Oracle空间和图形
  • Oracle区块链
  • JSON支持

这些特性使您的嵌入向量受益于最强大的数据库功能。

代码示例

在开始之前,请确保您安装了Oracle Python客户端驱动,以便将Langchain与Oracle AI Vector Search集成。

# 安装oracledb
pip install oracledb

连接到Oracle数据库

以下示例代码展示了如何连接到Oracle数据库。默认情况下,python-oracledb在“Thin”模式下运行,直接连接到Oracle数据库,不需要Oracle客户端库。

import sys
import oracledb

# 更新以下变量以包含您的Oracle数据库凭据和连接详细信息
username = "<username>"
password = "<password>"
dsn = "<hostname>/<service_name>"

try:
    conn = oracledb.connect(user=username, password=password, dsn=dsn)
    print("Connection successful!")
except Exception as e:
    print("Connection failed!")
    sys.exit(1)

加载ONNX模型

如果选择在数据库内生成嵌入,必须将ONNX模型加载到Oracle数据库中:

from langchain_community.embeddings.oracleai import OracleEmbeddings

# 更新ONNX模型的目录和文件名
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)

创建凭据

选择第三方提供商生成嵌入时,需要创建凭据以安全访问提供商的端点。例如:

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。如果使用第三方提供商,可能需要配置代理:

import sys
from langchain_community.embeddings.oracleai import OracleEmbeddings
from langchain_core.documents import Document

# 使用ONNX模型生成嵌入
embedder_params = {"provider": "database", "model": "demo_model"}

# 如果环境不需要代理,则可以省略'proxy'参数
proxy = "<proxy>"  # 代理配置,提高访问稳定性

embedder = OracleEmbeddings(conn=conn, params=embedder_params, proxy=proxy)
embed = embedder.embed_query("Hello World!")

# 验证嵌入生成
print(f"Embedding generated by OracleEmbeddings: {embed}")

常见问题和解决方案

网络限制

由于某些地区的网络限制,开发者可能需要考虑使用API代理服务以提高访问稳定性。

连接失败

确保您的数据库凭据和连接详细信息正确无误,并且网络连接稳定。

模型加载失败

检查ONNX文件的路径是否正确,同时确保所需权限已被授予。

总结和进一步学习资源

本文介绍了如何使用Oracle AI Vector Search生成嵌入,从数据库连接、加载ONNX模型到生成嵌入,并提供了常见问题的解决方案。如果您希望深入学习,请参考以下资源:

参考资料

  1. Oracle AI Vector Search Documentation
  2. ONNX模型
  3. Hugging Face API

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---