探索Oracle AI向量搜索的文档处理能力

引言

在现代数据驱动的世界中,能够根据语义而非关键词来查询数据是AI应用程序的强大能力之一。Oracle AI Vector Search结合Oracle数据库强大的功能,提供了在单一系统中处理非结构化和结构化数据的能力。这篇文章将探讨如何利用Oracle AI Vector Search的文档处理功能来加载和分割文档。

主要内容

Oracle AI Vector Search的优势

Oracle AI Vector Search不仅能够处理结构化的业务数据,还能处理非结构化的数据,无需额外引入专门的向量数据库。这减少了在多系统间的数据碎片化问题,并提高了数据访问的效率和安全性。

功能亮点

  • 分区支持
  • Exadata智能扫描
  • 地理分布式数据库的分片处理
  • Oracle机器学习集成

文档处理概述

对于刚开始接触Oracle数据库的用户,可以通过免费的Oracle 23 AI来入门。在使用数据库时,推荐创建自定义用户以提高安全性。如何创建用户的详细指南提供了相应步骤及用户权限管理的知识。

先决条件

确保安装了Oracle Python客户端驱动,便于使用Langchain与Oracle AI Vector Search集成。

# 安装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)

创建和插入数据表

创建一个表,并插入一些样例文档以测试。

try:
    cursor = conn.cursor()

    drop_table_sql = """DROP TABLE IF EXISTS demo_tab"""
    cursor.execute(drop_table_sql)

    create_table_sql = """CREATE TABLE demo_tab (id NUMBER, data CLOB)"""
    cursor.execute(create_table_sql)

    insert_row_sql = """INSERT INTO demo_tab VALUES (:1, :2)"""
    rows_to_insert = [
        (1, "示例文档内容1"),
        (2, "示例文档内容2"),
        (3, "示例文档内容3"),
    ]
    cursor.executemany(insert_row_sql, rows_to_insert)

    conn.commit()

    print("Table created and populated.")
    cursor.close()
except Exception as e:
    print("Table creation failed.")
    cursor.close()
    conn.close()
    sys.exit(1)

加载文档

OracleDocLoader提供了处理150多种不同文件格式的能力,无需针对不同格式使用多个加载器。下面是如何使用OracleDocLoader的示例代码:

from langchain_community.document_loaders.oracleai import OracleDocLoader

loader_params = {
    "owner": "<owner>",
    "tablename": "demo_tab",
    "colname": "data",
}

loader = OracleDocLoader(conn=conn, params=loader_params)
docs = loader.load()

print(f"Number of docs loaded: {len(docs)}")

分割文档

借助OracleTextSplitter,可以将文档分割为更小的部分,以便生成嵌入。下面是示例代码:

from langchain_community.document_loaders.oracleai import OracleTextSplitter

splitter_params = {"normalize": "all"}
splitter = OracleTextSplitter(conn=conn, params=splitter_params)

list_chunks = []
for doc in docs:
    chunks = splitter.split_text(doc.page_content)
    list_chunks.extend(chunks)

print(f"Number of Chunks: {len(list_chunks)}")

常见问题和解决方案

  • 连接失败: 确保用户名、密码和DSN的正确性。
  • 表创建失败: 检查SQL语法和权限。

总结和进一步学习资源

Oracle AI Vector Search结合Oracle数据库强大的功能,使得语义搜索和业务数据查询变得高效和便捷。要深入学习Oracle AI Vector Search,可以参考以下资源:

参考资料

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

—END—

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值