Oracle AI 向量搜索:生成嵌入向量¶
Oracle AI 向量搜索专为人工智能(AI)工作负载设计,使您能够基于语义而非关键词来查询数据。 Oracle AI 向量搜索的最大优势之一在于,非结构化数据的语义搜索可以与业务数据的关系型搜索在单一系统中结合使用。 这不仅功能强大,而且效率显著提升,因为您无需额外部署专门的向量数据库,从而消除了多系统间数据碎片化的痛点。
此外,您的向量数据还能受益于 Oracle 数据库的所有强大功能,例如:
- 分区支持
- 真正应用集群的可扩展性
- Exadata 智能扫描
- 跨地域分布式数据库的分片处理
- 事务处理
- 并行 SQL
- 灾难恢复
- 安全性
- Oracle 机器学习
- Oracle 图数据库
- Oracle 空间与图
- Oracle 区块链
- JSON
本指南演示如何利用 Oracle AI 向量搜索中的嵌入功能,通过 OracleEmbeddings 为您的文档生成嵌入向量。
如果你是 Oracle 数据库的初学者,建议先尝试免费的 Oracle 23 AI,该资源能帮助你快速掌握数据库环境搭建的基础知识。在使用数据库时,通常应避免默认使用系统用户,而是创建专属用户以提升安全性和可定制性。关于用户创建的具体步骤,可参考我们的端到端指南,该指南同时演示了如何在 Oracle 中设置用户。此外,理解用户权限对于有效管理数据库安全至关重要,你可以在官方Oracle 指南中深入学习用户账户与安全管理相关内容。
前提条件¶
确保已安装 Oracle Python 客户端驱动程序,以便实现 llama_index 与 Oracle AI 向量搜索的集成。
%pip install llama-index-embeddings-oracleai
import sys
import oracledb
# Update the following variables with your Oracle database credentials and connection details
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)
对于嵌入向量的生成,用户可选择多种服务提供商方案,包括数据库内嵌生成以及第三方服务(如 OcigenAI、Hugging Face 和 OpenAI)。选择第三方服务商的用户需配置包含必要认证信息的凭证。若用户选择'database'作为提供商,则需将 ONNX 模型加载至 Oracle 数据库中以实现嵌入功能。
加载 ONNX 模型¶
Oracle 支持多种嵌入生成服务提供商,允许用户在专有数据库解决方案与第三方服务(如 OCIGENAI 和 HuggingFace)之间进行选择。该选择将决定生成和管理嵌入向量的具体方法。
重要提示:若用户选择数据库方案,则必须向 Oracle 数据库上传 ONNX 模型;反之,若选择第三方提供商生成嵌入向量,则无需向 Oracle 数据库上传 ONNX 模型。
直接在 Oracle 中使用 ONNX 模型的核心优势在于:通过避免向外部传输数据,显著提升了安全性和性能表现。此外,该方法还能规避通常由网络或 REST API 调用带来的延迟问题。
以下是向 Oracle 数据库上传 ONNX 模型的示例代码:
from llama_index.embeddings.oracleai import OracleEmbeddings
# please update with your related information
# make sure that you have onnx file in the system
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)
创建凭证¶
当选择第三方供应商生成嵌入向量时,用户需要建立凭证以安全访问供应商的终端节点。
重要提示: 若选择使用'database'供应商生成嵌入向量则无需任何凭证。但若用户决定采用第三方供应商,则必须为所选供应商创建专属凭证。
以下为示例说明:
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 向量搜索提供多种生成嵌入向量的方法,既可使用本地托管的 ONNX 模型,也可调用第三方 API。有关配置这些选项的完整说明,请参阅 Oracle AI 向量搜索指南。
注意: 用户可能需要配置代理才能使用第三方嵌入生成服务提供商(不包括使用 ONNX 模型的 'database' 提供商)。
# proxy to be used when we instantiate summary and embedder object
proxy = "<proxy>"
以下示例代码将展示如何生成嵌入向量:
from llama_index.embeddings.oracleai import OracleEmbeddings
"""
# using ocigenai
embedder_params = {
"provider": "ocigenai",
"credential_name": "OCI_CRED",
"url": "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/embedText",
"model": "cohere.embed-english-light-v3.0",
}
# using huggingface
embedder_params = {
"provider": "huggingface",
"credential_name": "HF_CRED",
"url": "https://api-inference.huggingface.co/pipeline/feature-extraction/",
"model": "sentence-transformers/all-MiniLM-L6-v2",
"wait_for_model": "true"
}
"""
# using ONNX model loaded to Oracle Database
embedder_params = {"provider": "database", "model": "demo_model"}
# Remove proxy if not required
embedder = OracleEmbeddings(conn=conn, params=embedder_params, proxy=proxy)
embed = embedder._get_text_embedding("Hello World!")
""" verify """
print(f"Embedding generated by OracleEmbeddings: {embed}")
端到端演示¶
请参阅我们的完整演示指南 Oracle AI 向量搜索端到端演示指南,借助 Oracle AI 向量搜索构建端到端 RAG 流程。