引言
在现代数据驱动的世界中,能够根据语义而非关键词来查询数据是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—