探索Oracle AI向量搜索:高效嵌入生成的秘密

62 阅读3分钟

探索Oracle AI向量搜索:高效嵌入生成的秘密

在当今的数据驱动时代,通过語義来查询数据的能力使得Oracle AI向量搜索在AI工作负载中脱颖而出。它不仅能够在一个系统内结合结构化业务数据和非结构化数据进行语义搜索,还消除了数据在多个系统之间碎片化的痛苦。在这篇文章中,我们将深入探讨如何利用Oracle AI向量搜索中的嵌入能力,通过OracleEmbeddings为文档生成嵌入。

主要内容

Oracle AI向量搜索的优势

Oracle AI向量搜索集成了Oracle数据库的强大功能,如分区支持、集群可扩展性、并行SQL、灾难恢复和安全性等。这意味着您可以在不失去这些特性优势的情况下进行高效的语义搜索。

嵌入生成的实现方法

您可以选择在数据库内生成嵌入或者使用第三方服务,如OcigenAI和Hugging Face。选择数据库作为嵌入提供商时,您需要将一个ONNX模型上传到Oracle数据库中。

部署ONNX模型

使用Oracle数据库的一个显著优点是直接在数据库内使用ONNX模型,从而提高数据安全性和性能。以下是上传ONNX模型的示例代码:

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模型加载成功。")
except Exception as e:
    print("ONNX模型加载失败!")
    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("凭证创建成功。")
except Exception as ex:
    cursor.close()
    raise

嵌入生成

使用Oracle AI向量搜索可以通过本地ONNX模型或第三方API生成嵌入。下面的代码示例演示了如何生成嵌入:

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"由OracleEmbeddings生成的嵌入:{embed}")

常见问题和解决方案

连接问题

确保数据库连接信息正确,并且网络配置允许访问。对于第三方API,由于某些地区的网络限制,开发者可能需要考虑使用API代理服务。

模型上传失败

检查ONNX模型文件是否存在,文件路径是否正确,以及OracleEmbeddings库的兼容性。

总结和进一步学习资源

Oracle AI向量搜索结合了强大的数据库功能与先进的语义搜索能力,为用户提供了一种高效且安全的嵌入生成方法。对于那些希望更深入了解这项技术的开发者,可以参考以下资源:

参考资料

  • Oracle官方文档
  • OracleEmbeddings库文档

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

---END---