Oracle Database 23ai 引入了一项改变游戏规则的功能:Oracle AI Vector Search。这项新功能使您能够将向量嵌入与业务数据一起存储,从而为更高级的语义查询打开了大门。通过利用嵌入模型,您可以将非结构化数据转换为向量嵌入,从而增强从数据中提取有意义的见解和联系的能力。要了解有关向量嵌入和嵌入模型的更多信息,请查看此 链接。在 APEX 24.2 版本中,我们现在在搜索配置中包含了AI矢量搜索支持。
让我们探讨一下这一创新功能的工作原理及其与Oracle APEX的无缝集成。我们还将了解有关矢量提供程序、PL/SQL API等的更多信息,我们将利用它们来创建搜索配置。
在这篇博文中,我们将探讨如何将Oracle AI Vector Search与Oracle APEX结合使用
我们将了解如何:
- 将向量列添加到表中
- 创建向量提供者
- 从向量提供者检索向量嵌入
- 创建搜索类型为 Oracle Vector Search 的搜索配置
- 创建 Oracle AI 矢量搜索页面
在数据库表中添加向量列
什么是AI矢量搜索?
AI矢量搜索使用高级嵌入模型将数据表示为数学向量。与传统的文本搜索不同,矢量搜索允许语义查询,识别各种数据类型之间的相似性。无论是人脸识别、查找相关图像还是进行高级文本搜索,矢量嵌入都可以检索高度相关的结果。
矢量数据类型
VECTOR数据类型随Oracle Database 23ai的发布而引入,为在数据库中存储向量嵌入和业务数据提供了基础。使用嵌入模型,您可以将非结构化数据转换为向量嵌入,然后可用于对业务数据进行语义查询。
请参阅以下在表定义中使用VECTOR数据类型的基本示例:创建表文档(doc_id INT、doc_text CLOB、doc_vector VECTOR);
什么是向量提供者
矢量提供程序是将文本转换为嵌入的关键。这种转变可以通过多种方式进行,包括:
- 本地数据库ONNX模型:直接在数据库中运行以实现高效处理,并具有将数据保留在数据库中以增强隐私性的额外优势。
- 生成人工智能服务:生成嵌入的人工智能服务。
- 用户定义的自定义 PL/SQL 函数:根据您的特定需求量身定制的自定义 PL/SQL 函数。
矢量提供程序是工作区级别的资源,使它们可以跨同一工作区中的所有应用程序访问。它们确保一致性和可重用性,同时保持无缝集成。
导出和导入载体提供者
Oracle APEX 简化了跨不同环境的矢量提供程序的管理。导出应用程序时,任何关联的矢量提供程序都包含在导出文件中。将应用程序导入到另一个工作区后,Oracle APEX 会检查是否已存在具有相同静态ID的矢量提供程序。如果是,应用程序将使用现有的提供程序。否则,Vector Provider会自动在目标工作区中创建,确保迁移过程顺利高效。
创建向量提供者
- 通过 Oracle APEX Workspace 主页上的 App Builder 导航到 Workspace Utilities。然后,单击 Oracle APEX 24.2 中引入的 Vector Providers。
- 单击“创建”开始,然后输入矢量提供程序的唯一名称和静态 ID 。静态 ID 必须是唯一的,并且在将服务与APEX_AI包 APEX_AI.GET_VECTOR_EMBEDDINGS 一起使用时将被引用。
- 选择提供商类型:
- 数据库ONNX模型:
- 指定ONNX模型所有者(从分配给您的工作区的架构中选择)。
- 选择ONNX模型名称(用于生成嵌入的模型)。
- 生成式人工智能服务:选择人工智能提供商。选项包括 OCI、OpenAI 或 Cohere。 APEX会根据选择自动调整界面。
- 自定义PL/SQL:输入自定义函数名称(将输入转换为嵌入并返回 VECTOR 数据类型的 PL/SQL 函数)。
- 数据库ONNX模型:
- 单击“创建”进行保存。
注意:如果您使用数据库ONNX模型,请确保您已将这些ONNX模型直接导入到分配给工作区的架构中。要了解有关如何加载ONNX模型的更多信息,请查看此博客文章。
从向量提供者检索向量嵌入
Oracle AI 矢量搜索使用矢量嵌入 - 捕获文本、图像和音频等数据背后含义的数学表示。与精确匹配单词的关键字搜索不同,矢量搜索侧重于上下文和含义,提供更准确的结果。
它将数据映射到多维空间,其中相似的概念更加紧密地结合在一起,反映了它们的语义关系。这种方法使搜索在不同类型的内容中更具创新性和更相关。
在APEX中设置搜索配置之前,建议将数据转换为向量嵌入并存储在向量数据类型列中。从 APEX 24.2 开始,新的PL/SQL API APEX_AI.GET_VECTOR_EMBEDDINGS 可使用多个签名来简化此过程。您还可以使用此API插入或更新矢量数据。
示例1:
1 | SELECT |
示例2:
1 | UPDATE EBA_PROJECT_MILESTONES |
在上面的示例中,p_service_static_id 指的是我们在上一节中创建的 Vector Provider Static ID。
创建搜索类型为 Oracle Vector Search 的搜索配置
Oracle AI Vector Search 配置需要 Oracle Database 23ai 或更高版本。在创建 Oracle AI Vector Search 配置之前,您需要完成上述所有步骤。
以下是创建 Oracle Vector Search 配置的方法:
- 导航到Workspace主页,单击App Builder,然后选择您的应用程序。打开共享组件,然后单击导航和搜索下的搜索配置。
- 单击“创建”。为您的配置命名(例如,Search Movies - Vector),选择Oracle Vector Search作为类型,然后单击Next。
- 通过选择矢量提供者来设置源以生成嵌入(例如 ONNX 模型)。选择源类型(表或 SQL 查询)并选择包含向量列的表所有者和表名称(例如,POPULAR_MOVIES)。单击“下一步” 。
- 映射列。要将搜索类型创建为Oracle矢量搜索,我们需要将矢量属性与列映射一起映射。
- 主键列:选择键列(例如ID)。
- 矢量列:选择矢量数据列(例如OVERVIEW_V)。
- 标题列:选择标题列(例如,TITLE)。
- 描述列:选择描述列(例如,概述)。
- 图标来源:设置图标的显示方式,例如使用缩写。
- 单击“创建搜索配置”进行保存。
自定义矢量属性
创建矢量搜索配置后,您可以通过自定义矢量属性来进一步细化它以满足您的特定要求。
例如,在矢量属性下,您可以:
- 根据所需的精度,将搜索类型设置为精确或近似。
- 选择最适合您的用例的距离度量,例如余弦、点、欧几里德、欧几里德平方、汉明或曼哈顿。
此外,在图标和显示下,您可以配置:
- 最大向量距离定义允许的相似性阈值。
- 要返回的最大行数控制显示的结果数。
这些调整有助于定制搜索行为和结果呈现,以完全符合您的应用程序的需求。
- 创建 Oracle 矢量搜索页面
创建页面向导可帮助您轻松设置搜索功能。它会创建一个搜索字段,并允许您在设置过程中选择搜索配置。如果需要,您还可以稍后在页面设计器中添加更多搜索配置。
搜索页面包括搜索字段和搜索结果区域。在页面设计器中,搜索结果区域使用直接映射到共享组件中定义的搜索配置的搜索源。这确保了搜索功能集成良好且易于管理。
查看此 链接 以了解有关如何在 Oracle APEX 中创建搜索页面的更多信息。
使用用于Oracle矢量搜索的 APEX_SEARCH.SEARCH API增强搜索灵活性
除了搜索配置中 Oracle Vector Search 的令人兴奋的功能外, APEX_SEARCH.SEARCH PL/SQL API 现在还支持搜索配置中的 Oracle AI Vector Search。开发人员可以使用多个搜索配置静态ID来跨各种配置和技术进行组合搜索。这使开发人员能够在任何地方使用搜索配置,例如在卡片区域中。业务数据触手可及,您可以轻松执行矢量搜索,同时集成各种来源。
以下是如何使用它的示例:
1 | SELECT * |
这种灵活性增强了APEX应用程序中搜索功能的多功能性。
Oracle APEX 24.2 在搜索配置中引入了 Oracle AI Vector Search,支持高级语义搜索功能。通过与 Oracle Database 23ai 的 Oracle AI Vector Search 功能集成,您可以创建利用矢量嵌入的搜索配置来获得更准确和上下文感知的结果。此功能允许无缝定制和集成,从而更轻松地在 APEX 应用程序中实现强大的搜索功能。