Oracle AI Vector Search实战:生成语义嵌入

# Oracle AI Vector Search实战:生成语义嵌入

老铁们,今天咱们来聊聊Oracle AI Vector Search以及如何生成语义嵌入(embeddings)。说白了,这个功能可以让你在查询数据时,基于语义而不是关键词,这对于处理非结构化数据显得尤其强大。

## 技术背景介绍

Oracle AI Vector Search让我们可以在同一系统中将非结构化数据的语义搜索和业务数据的关系搜索结合起来。无需添加专门的向量数据库,避免了因为多系统而带来的数据分裂问题。此外,你还可以使用Oracle数据库的所有强大功能,比如分区支持、集群可扩展性、智能扫描、分布式分片处理、事务、并行SQL、灾备、安全性等。

如果你刚接触Oracle数据库,建议看看免费的[Oracle 23 AI](https://www.oracle.com)去设置你的数据库环境。为了安全和定制化,工作中建议创建自己的用户而不是使用系统用户。

## 原理深度解析

Oracle提供多种嵌入生成方式,包括数据库内生成和第三方服务(如OcigenAI、Hugging Face和OpenAI)生成。选择数据库作为提供者时,需要在Oracle数据库中加载ONNX模型,这样可以获得更好的安全性和性能。

## 实战代码演示

### 安装必要依赖

```bash
# 确保你已经安装了Oracle Python客户端驱动
pip install oracledb

连接Oracle数据库

我们来看一下如何连接到Oracle数据库的代码示例。

import sys
import oracledb

# 更新你的数据库连接信息
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模型是使用本地提供者生成嵌入的第一步。

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

# 使用ONNX模型从Oracle数据库中生成嵌入
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}")

优化建议分享

  • 如需使用第三方服务生成嵌入,建议在你的环境中配置一个代理以提升性能和稳定性。
  • 使用OracleEmbeddings时,可以通过合适的参数配置来提升生成速度和准确率。

补充说明和总结

这一整套流程不仅让你灵活地生成嵌入,还能结合Oracle Database的强大功能实现更复杂的RAG(Retrieval-Augmented Generation)管道,以及相关的图形和区块链分析。

当然,如果你在开发过程中碰到任何问题,随时可以在评论区和大伙交流。今天的技术分享就到这里,希望对大家有帮助。

---END---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值