深入探讨Oracle AI Vector Search:生成嵌入的实用指南
引言
Oracle AI Vector Search被设计用于人工智能(AI)工作负载,允许基于语义而非关键词来查询数据。这种语义搜索可以与业务数据的关系搜索结合在一个系统中,消除了数据在多个系统间碎片化的痛点。本文将详细介绍如何使用Oracle AI Vector Search中的嵌入功能(Embeddings Capability)来为您的文档生成嵌入(Embeddings)。
主要内容
Oracle AI Vector Search的优势
Oracle AI Vector Search在一个单一的系统中集成了语义搜索和关系搜索,且具备如下优势:
- 分区支持
- 实时应用集群(RAC)可扩展性
- Exadata智能扫描
- 跨地理分布数据库的分片处理
- 事务处理
- 并行SQL
- 灾难恢复
- 安全性
- Oracle机器学习
- Oracle图数据库
- Oracle空间和图形
- Oracle区块链
- JSON支持
这些特性使您的嵌入向量受益于最强大的数据库功能。
代码示例
在开始之前,请确保您安装了Oracle Python客户端驱动,以便将Langchain与Oracle AI Vector Search集成。
# 安装oracledb
pip install oracledb
连接到Oracle数据库
以下示例代码展示了如何连接到Oracle数据库。默认情况下,python-oracledb在“Thin”模式下运行,直接连接到Oracle数据库,不需要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
生成嵌入
Oracle AI Vector Search提供了多种生成嵌入的方法,可以使用本地托管的ONNX模型或第三方API。如果使用第三方提供商,可能需要配置代理:
import sys
from langchain_community.embeddings.oracleai import OracleEmbeddings
from langchain_core.documents import Document
# 使用ONNX模型生成嵌入
embedder_params = {"provider": "database", "model": "demo_model"}
# 如果环境不需要代理,则可以省略'proxy'参数
proxy = "<proxy>" # 代理配置,提高访问稳定性
embedder = OracleEmbeddings(conn=conn, params=embedder_params, proxy=proxy)
embed = embedder.embed_query("Hello World!")
# 验证嵌入生成
print(f"Embedding generated by OracleEmbeddings: {embed}")
常见问题和解决方案
网络限制
由于某些地区的网络限制,开发者可能需要考虑使用API代理服务以提高访问稳定性。
连接失败
确保您的数据库凭据和连接详细信息正确无误,并且网络连接稳定。
模型加载失败
检查ONNX文件的路径是否正确,同时确保所需权限已被授予。
总结和进一步学习资源
本文介绍了如何使用Oracle AI Vector Search生成嵌入,从数据库连接、加载ONNX模型到生成嵌入,并提供了常见问题的解决方案。如果您希望深入学习,请参考以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---