解锁Oracle AI Vector Search的潜力:生成嵌入

80 阅读2分钟

引言

在当今的技术世界中,能够在一个系统中结合语义搜索与关系搜索的能力是无比强大的。Oracle AI Vector Search正是为此而生。通过允许开发者进行语义搜索,它能让您仅靠语义而非关键词来查询数据。本篇文章将深入探讨如何利用OracleEmbeddings在Oracle AI Vector Search中生成文档的嵌入。

主要内容

Oracle AI Vector Search的优势

Oracle AI Vector Search不仅能在单一系统中整合语义与关系搜索,还能消除数据碎片化的痛点。此外,用户可以利用Oracle Database的强大功能,如分区支持、扩展性、安全性以及Oracle Machine Learning等。

嵌入生成的基本设置

首先,确保系统安装了Oracle Python客户端驱动:

# 安装Oracle Python客户端驱动
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)

加载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

代码示例:生成嵌入

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

# 使用ONNX模型生成嵌入
embedder_params = {"provider": "database", "model": "demo_model"}
embedder = OracleEmbeddings(conn=conn, params=embedder_params)
embed = embedder.embed_query("Hello World!")

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

常见问题和解决方案

  1. 连接失败:确保Oracle数据库的DSN和凭证准确无误。
  2. ONNX模型加载失败:确认模型文件路径正确且系统权限允许。
  3. API访问问题:在某些地区,可能需要使用API代理服务以提高访问稳定性。可以使用proxy参数设置。

总结和进一步学习资源

通过Oracle AI Vector Search,用户能够在一个平台上执行高效的语义和关系搜索,大大简化了数据管理流程。要深入了解,请参阅以下资源:

参考资料

  1. Oracle 官方文档
  2. Python-oracledb 入门指南

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

---END---