探索Oracle AI向量搜索:如何为文档生成嵌入

83 阅读3分钟

引言

在现代人工智能应用中,Oracle AI Vector Search提供了一种基于语义查询数据的功能。通过结合关系型搜索和语义搜索,Oracle AI Vector Search提供了强大的数据处理能力,消除了多系统间的数据碎片化问题。这篇文章将向您展示如何使用Oracle AI Vector Search中的嵌入生成功能来为您的文档生成嵌入。

主要内容

Oracle AI Vector Search优势

Oracle AI Vector Search不仅支持语义搜索,还能利用Oracle数据库的众多强大功能,如分区支持、真实应用集群、并行SQL等。这些功能极大地提高了处理大规模数据的能力。

准备工作

确保您已安装Oracle Python Client驱动以便与Oracle AI Vector Search集成。

# 安装Oracle数据库驱动
pip install oracledb

连接到Oracle数据库

以下是如何通过python-oracledb连接到Oracle数据库的示例代码:

import sys
import oracledb

# 更新您的数据库凭证和连接信息
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模型

在Oracle中直接使用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)

创建凭证

如果使用第三方服务生成嵌入,需要为所选服务创建凭证。以下示例演示如何为HuggingFace和OCIGENAI创建凭证:

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

代码示例

以下代码展示了如何生成嵌入:

from langchain_community.embeddings.oracleai import OracleEmbeddings

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

# 如果您的环境不需要代理,则可以省略'proxy'参数
embedder = OracleEmbeddings(conn=conn, params=embedder_params)
embed = embedder.embed_query("Hello World!")

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

常见问题和解决方案

  1. 连接失败:检查网络连接、数据库凭证和DSN配置。
  2. ONNX模型加载失败:确保模型路径和文件名正确,并确保OracleEmbeddings库成功导入。

总结和进一步学习资源

Oracle AI Vector Search通过集成向量搜索和关系型数据库功能,提供了强大的语义查询能力。了解更多详细信息和其它功能,请参考以下资源:

参考资料

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

---END---