为数据库和应用设计基于 OCI Generative AI 的 SQL 代理
此参考体系结构概述了旨在促进自然语言 (NL) 与 Oracle Database 交互的 SQL 代理。
该代理基于 Oracle Cloud Infrastructure (OCI) 和 Oracle Cloud Infrastructure Generative AI ( OCI Generative AI ) 模型构建,支持用户通过强大的可扩展系统执行文本到 SQL 查询、数据分析和报告,该系统专为处理数百个表的方案而设计。
SQL 代理还可以与检索增强生成 (Retrieval Augmented Generation,RAG) 集成到一个更通用的体系结构中,使用户能够结合对结构化和非结构化数据的分析。
体系结构
该解决方案的核心包括一组 Python 组件,这些组件基于适用于 Python 的 Oracle Cloud Infrastructure SDK 和开源库 LangChain:
- 路由器:标识请求类型(SQL 生成和数据检索或数据分析),并将其定向到相应的处理管道。该组件基于具有专用提示的 LLM。
- 方案管理器:管理与数据库方案相关的所有元数据。它在为每个 NL 请求提供用于 SQL 生成和所有关联元数据的表列表(“受限方案”)方面发挥着至关重要的作用。它利用数据库中的 23ai 数据库和语义搜索来查找与用户 NL 请求相关的表。
- SQL 生成器:将 NL 请求转换为连接“数据”数据库上的可执行 SQL 语句。它使用 LLM 模型集来提高准确性并提高正确生成的 SQL 语句的成功率。LLM 模型由 OCI Generative AI 服务提供。
- SQL 高速缓存:存储最频繁请求的 NL 指令(及其 SQL 等效项)。
- SQL 执行程序:启用生成的 SQL 语句的语法验证并执行该指令。
- AI 数据分析器:分析存储的对话数据,为分析请求或报告生成生成生成响应。
下图说明了逻辑体系结构。
插图 oci-genai-sql-agent-logical.png 的说明
oci-genai-sql-agent-logical-oracle.zip
该解决方案的一个独特特点是它灵活地管理数据库模式,由矢量搜索和生成式 AI 提供支持。
在设置过程中,将使用大语言模型 (Large Language Model,LLM) 为每个数据库表生成一个全面的概要。此概要包括表方案、相关业务查询和示例数据。摘要与 OCI Generative AI 嵌入模型创建的嵌入向量一起存储在 23ai 数据库中。
用户提交查询时,语义搜索会标识查询组合的候选表,而重新排名机制会细化此列表以确保获得最佳结果。
SQL 代理管理与用户的对话历史记录。通过 conversation_id 链接的交换消息使用 Oracle Cloud Infrastructure Cache with Redis ( OCI Cache with Redis ) 存储。
SQL 代理通过 REST API 公开,符合 Open-API,并使用 FastAPI 库实施。此 REST API 可以连接到任何用户界面(图表建议使用 Oracle Digital Assistant、使用 Oracle APEX 构建的 UI 或通用 Web UI)。
与 Oracle Cloud Infrastructure Application Performance Monitoring Cloud Service 集成以收集各种 OCI 组件的使用情况统计信息和响应时间,该集成基于浏览更多部分中的使用 Oracle Cloud 增强 RAG 解决方案的可观察性链接中所述的方法。
下图描述了物理体系结构,其中涉及所有 OCI 服务。
oci-genai-sql-agent-arch-oracle.zip
该体系结构具有以下组件:
- OCI 生成式 AI 嵌入模型
将文本转换为向量嵌入内容,以便在应用程序中用于语义搜索,文本分类或文本集群处理。OCI Generative AI 嵌入模型可将您输入的每个短语、句子或段落转换为具有 384(轻型模型)或 1024 个数字的数组,具体取决于您选择的嵌入模型。
可以使用这些嵌入在上下文或类别中相似的短语中查找相似性。嵌入通常存储在向量数据库中。嵌入主要用于语义搜索,其中搜索函数侧重于它正在搜索的文本的含义,而不是基于关键字查找结果。
- OCI 生成式 AI 聊天模型
通过 AI 聊天界面提出问题并获得对话式回复。提示 OCI Generative AI 聊天模型以生成文本。您可以用自然语言提问,还可以选择将文档、电子邮件和产品评论等文本提交给聊天模型,并通过文本提供智能答案。对于某些模型,您可以提交图像并询问有关图像的问题。聊天模型会保留您之前提示的上下文,您可以继续与跟进问题进行聊天。
- 应用程序性能监视
Oracle Cloud Infrastructure Application Performance Monitoring 可提供应用性能的深度可见性,并支持快速诊断问题,以提供一致的服务水平。这包括监视分布在客户端、第三方服务和后端计算层、内部部署或云中的多个组件和应用程序逻辑。
- APEX 服务
Oracle APEX 是一个低代码开发平台,您可以在该平台上构建可扩展的、功能丰富的、安全的企业应用程序,这些应用程序可以在安装 Oracle Database 的任何位置部署。您无需成为众多技术的专家即可提供复杂的解决方案。Oracle APEX 包含用户界面主题、导航控制、表单处理程序和灵活报告等内置功能,可加快应用程序开发过程。
- API 网关
使用 Oracle Cloud Infrastructure API Gateway ,您可以发布具有可从网络内访问的专用端点的 API,并根据需要向公共互联网公开这些 API。这些端点支持 API 验证、请求和响应转换、CORS、验证和授权以及请求限制。
- 自治数据仓库
Oracle Autonomous Data Warehouse 是一个自我驱动、自我保护和自我修复的数据库服务,针对数据仓库工作负载进行了优化。您不需要配置或管理任何硬件,或者安装任何软件。Oracle Cloud Infrastructure 可处理数据库创建以及数据库备份、打补丁、升级和调优。
- 使用 Redis 进行高速缓存
Oracle Cloud Infrastructure Cache with Redis 是一个基于开源 Redis 的全面、内存中托管缓存解决方案。这一全托管式服务可加快数据读取和写入速度,显著提高应用响应时间和数据库性能,从而改善客户体验。
- 计算服务
借助 Oracle Cloud Infrastructure Compute ,您可以在云中预配和管理计算主机。您可以通过配置启动计算实例,以满足对 CPU、内存、网络带宽和存储的资源要求。创建计算实例后,可以安全地访问该实例,重新启动该实例,附加和分离卷,并在不再需要时终止该实例。
推荐
- 数据库访问
应实施此解决方案,以便仅允许对数据库中的数据进行“只读”访问。即使有可能,通过提示中的说明禁止 DDL 和 DML 指令,为了提高安全性,与“数据”数据库的连接也应使用 READ ONLY 数据库用户来完成。
- 安全
使用 Oracle Cloud Guard 主动监视和维护 OCI 中资源的安全性。Oracle Cloud Guard 使用检测器配方,您可以定义检测器配方来检查资源是否存在安全漏洞,以及监视操作员和用户是否有风险活动。检测到任何配置错误或不安全活动时,Oracle Cloud Guard 会根据您可以定义的响应器配方建议更正操作并协助执行这些操作。
对于需要最高安全性的资源,Oracle 建议您使用安全区域。安全区域是与 Oracle 定义的基于优秀实践的安全策略配方关联的区间。例如,安全区域中的资源必须无法从公共 Internet 访问,并且必须使用客户管理的密钥对它们进行加密。在安全区域中创建和更新资源时,OCI 会根据安全区域配方中的策略验证操作,并拒绝违反任何策略的操作。
- Cloud Guard
克隆和定制 Oracle 提供的默认配方,以创建定制检测器和响应器配方。通过这些配方,您可以指定哪种类型的安全违规会生成警告,以及允许对它们执行哪些操作。例如,您可能希望检测可见性设置为公共的对象存储桶。
在租户级别应用 Cloud Guard,以涵盖最广泛的范围并减轻维护多个配置的管理负担。
还可以使用“托管列表”功能将某些配置应用于检测器。
- 安全区域
对于需要最高安全性的资源,Oracle 建议您使用安全区域。安全区域是与 Oracle 定义的基于优秀实践的安全策略配方关联的区间。例如,安全区域中的资源必须无法从公共 Internet 访问,并且必须使用客户管理的密钥对它们进行加密。在安全区域中创建和更新资源时,Oracle Cloud Infrastructure 会根据安全区域配方中的策略验证操作,并拒绝违反任何策略的操作。
- 网络安全组 (NSG)
可以使用 NSG 定义一组适用于特定 VNIC 的入站和出站规则。我们建议使用 NSG 而非安全列表,因为 NSG 使您能够将 VCN 的子网体系结构与应用的安全要求分开。
注意事项
计划在 OCI 上运行此解决方案时,请考虑以下安全详细信息。
- 安全
在生产设置中,SQL 代理的所有组件都应部署在专用网络中。
只能通过 OCI API 网关访问 REST API。负载平衡器旨在支持在多个 VM 上部署所有 Python 组件,以实现更高的可靠性和可扩展性。
要访问 OCI Generative AI 服务,需要正确设置 OCI Generative AI 策略。