Unlocking the Power of Oracle AI Vector Search: From Setup to Embeddings

115 阅读2分钟

Oracle AI Vector Search: Generate Embeddings

引言

在当今数据驱动的世界中,如何有效搜索和分析大量非结构化数据是企业面临的重大挑战。Oracle AI Vector Search通过在单一系统中结合语义搜索和关系搜索,为这一挑战提供了解决方案。这种集成不仅有效减少了数据分散的问题,还增强了搜索效率。本文将深入探讨如何利用OracleEmbeddings在Oracle AI中生成文档的嵌入。

主要内容

1. 连接到Oracle数据库

首先,确保您已安装Oracle Python Client driver,用于在Python环境中集成Oracle AI Vector Search。

# 安装Oracle Python Client driver
pip install oracledb

以下是连接到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)

2. 加载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)

3. 创建凭证

对于选择第三方提供者的用户,如Hugging Face或OcigenAI,需要创建凭证以安全访问其API端点。

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

4. 生成嵌入

一旦设置完成,您可以通过以下代码生成嵌入:

from langchain_community.embeddings.oracleai import OracleEmbeddings

embedder_params = {"provider": "database", "model": "demo_model"}

# 设置代理以提高访问稳定性
proxy = "<proxy>"

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

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

常见问题和解决方案

  1. 连接失败问题:检查数据库连接字符串及用户凭据是否正确。
  2. ONNX模型加载失败:确保模型文件路径正确,并检查Oracle数据库的配置是否支持ONNX模型的加载。
  3. 生成嵌入超时:考虑使用API代理服务提升访问稳定性。

总结和进一步学习资源

Oracle AI Vector Search通过将语义搜索与关系型数据结合,提供了一种强大的数据分析方式。本文详细介绍了如何通过加载ONNX模型和创建第三方提供商凭证来在Oracle中生成嵌入。欲了解更多细节和高级设置,请参考以下资源:

参考资料

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