Oracle AI:使用SQL来实现融合检索和整个RAG流程

Oracle AI:使用SQL来实现融合检索和整个RAG流程

2025-12-01 07:51  AlfredZhao  阅读(0)  评论(0)    收藏  举报

RAG 都不用写程序了吗?

是的,Oracle 总是习惯把简单留给用户,目前已支持通过一条 SQL 就能实现基础的 RAG 需求。

本文就来深入剖析下这样的一条SQL,并展现下输出效果。

01|实现逻辑

这里先引用最近 AI 大会上的一张图,非常清晰地展现了实现逻辑:

从图片中可以看到,真的是就用这么一条SQL完成了RAG的整个流程。

02|技术拆解

虽然对于暴露给用户只有这么一条SQL,但实际上这条SQL里面调用了很多库内的函数,用户自然可以不关注,但作为技术从业者还是需要理解一下的。

① 用户问题向量化

将用户输入的问题向量化,这里直接调用 vector_embedding() 函数。

Embedding模型可以直接使用已经导入Oracle库内的onnx格式模型,比如我这里使用的是 BGE_BASE,SQL 就类似这样:

select vector_embedding(BGE_BASE USING :question_text AS DATA)

② 执行向量搜索

vector_distance() 函数

查询对应的库内文本信息,依据库内文本信息的向量 和 用户问题的向量 比较结果,选TOP N的记录出来。

实践动手时就会发现,图中有个细节是不对的,估计是工作人员的笔误。

具体在 vector_distance() 函数里面多写了 SELECT,实际应该去掉,正确SQL类似如下:

select content from t_historyorder by vector_distance(v, vector_embedding(BGE_BASE USING :question_text AS DATA))FETCH APPROX FIRST 5 ROWS ONLY

注:

  • 笔者这里是Oracle 23.7的测试环境,以笔者这个版本的实际测试的结果为准
  • 本文所有测试都改成笔者实际测试使用的一张表t_history

③ 组合LLM提示词

将自定义的提示词 + 用户的问题 + TOP N的记录作为上下文 组合成整体的LLM提示词。

WITH TOP5 AS (select content from t_history where type = 'English'order by vector_distance(v, vector_embedding(BGE_BASE USING :question_text AS DATA))FETCH APPROX FIRST 5 ROWS ONLY),
LLM_PROMPT AS (SELECT ('Answer this question using the following context,' || CHR(10) || CHR(10) ||'QUESTION: ' || :question_text || CHR(10) || CHR(10) ||'CONTEXT: ' || CHR(10) || CHR(10) ||LISTAGG(content, CHR(10))) AS prompt_textFROM TOP5
)

注:

  • 这里使用 || 巧妙的拼接了所有需要的内容
  • 使用 LISTAGG(content, CHR(10)) 函数将多行 content 数据合并成单个字符串
  • 谓词条件 type = 'English' 代表只关注 t_history 表中这个类型相关的内容

④ 获得LLM回复结果

最终调用 dbms_vector_chain.utl_to_generate_text() 获取LLM的最终回答。

理想情况下,只需要在上一步的SQL基础上,再加一段:

select dbms_vector_chain.utl_to_generate_text(prompt_text, json(:LLM_paras)) as answer
from LLM_PROMPT;

不过研究发现,这里的 dbms_vector_chain 是一个包,utl_to_generate_text 是包中的一个函数,遗憾的是目前还不能支持国内模型API直接调用。

03|照猫画虎

理解了上面的技术,我们只需要解决一个国内模型API的调用问题,就可以解决很多国内的RAG需求了。

所以这里先尝试自定义一个函数来实现:CHAT_LLM(),功能很简单就是实现调用deepseek官方的api来交互。

下面我们就模拟一个用户需求:

首先,用户已经通过系统记录了日常工作、学习内容;

现在要求实现以下需求:

  • 支持用户输入自然语言描述问题
  • 我们根据问题向量检索到最相关的前5条记录内容,并支持过滤指定分类
  • 程序自动构造组合的提示词
  • 用最终的提示词请求LLM获取最终结果

本质还是直接模仿开头的那张片子来具体实现,只需要:

最终SQL如下:

WITH TOP5 AS (select content from t_history where type = 'English'order by vector_distance(v, vector_embedding(BGE_BASE USING :question_text AS DATA))FETCH APPROX FIRST 5 ROWS ONLY),
LLM_PROMPT AS (SELECT ('Answer this question using the following context,' || CHR(10) || CHR(10) ||'QUESTION: ' || :question_text || CHR(10) || CHR(10) ||'CONTEXT: ' || CHR(10) || CHR(10) ||LISTAGG(content, CHR(10))) AS prompt_textFROM TOP5
)
select CHAT_LLM(prompt_text) as Answer from LLM_PROMPT;

可以先在SQL命令行下测试效果:

-- 首先定义变量
VARIABLE question_text VARCHAR2(100);-- 给变量赋值
BEGIN:question_text := '总结有关日常对话的英文对话';
END;
/-- 完整的显示配置(新增SET ESCAPE OFF)
SET ESCAPE OFF
SET LINESIZE 32767
SET PAGESIZE 0

04|最终效果

因为TOP5格式还有点显示问题在调试ing,所以这里先用TOP1的内容输出效果展示下:

实话讲思路虽然很简单,但是自定义的函数对模型返回的格式处理还是相当头疼,即便有AI辅助也是被折腾的焦头烂额。

关于自定义的CHAT_LLM函数内容本文就先不贴了,因为调试过程中发现功能实现简单,但是细节处理还是需要太多考量的,建议等官方函数支持国内LLM,或者未来测试相对稳定了笔者再跟大家分享后续吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/982457.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kubeadm命令总结

kubeadm命令总结# 查看k8s管理面证书过期时间 kubeadm certs check-expiration 参考资料 https://kubernetes.io/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/ # 基于kubeadm.yaml来生成所有k8s证书…

2025年8大AI论文写作神器推荐:免费生成+低查重率+高效润色全攻略

本文分享2025年8大AI论文写作神器,助力高效完成毕业论文。先由校园咖啡馆里同学的论文苦恼引出分享。介绍了巨鲸写作、ChatGPT、ArXiv等工具。如巨鲸写作能极速生成初稿、智能解析导师意见;ChatGPT可快速生成内容但有…

2025年热门的小便器无水技术厂家最新权威推荐排行榜

2025年热门的小便器无水技术厂家权威推荐排行榜行业背景与市场趋势随着全球水资源短缺问题日益严峻和环保意识不断提升,节水型卫浴设备市场迎来了爆发式增长。据国际水资源管理研究所(IWMI)报告显示,传统冲水小便器…

2025年比较好的发泡蹲便器最新TOP品牌厂家排行

2025年比较好的发泡蹲便器TOP品牌厂家排行行业背景与市场趋势随着全球水资源短缺问题日益严峻和环保意识的不断提升,节水型卫浴产品已成为市场主流趋势。发泡蹲便器作为一种创新型节水洁具,通过泡沫封堵技术实现高效…

大盘风险控制策略分析报告 - 2025年12月01日

大盘风险控制策略分析报告 - 2025年12月01日body { font-family: "Microsoft YaHei", "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; line-height: 1.6; color: rgba(51, 51, 51, 1); max-wi…

负责任AI技术框架与模型安全实践

本文详细介绍了某中心Nova模型系列在负责任AI框架下的技术实践,涵盖模型对齐训练、多重防护机制、红队测试方法和数字水印技术,确保AI系统在强大性能基础上具备安全可信赖的特性。负责任AI技术框架与模型安全实践 某…

数据平台新增图计算引擎与实时地图功能

某中心数据平台Fabric新增原生图数据库与地理空间映射功能,采用基于某社交网络的图计算引擎架构,支持实时数据可视化分析,扩展了数据湖集成能力并增强AI应用支持,同时宣布多项平台更新包括多数据源集成与开发者工具…

Flameshot无法截图使用flathub安装的软件

在 ArchLinux 系统中,在 Gnome 桌面下, 使用flathub安装的Flameshot软件无法截图安装命令 flatpak install flathub org.flameshot.Flameshot添加权限 flatpak permission-set screenshot screenshot org.flameshot.…

python几类安装方法

各类安装方式的核心区别与用途 1. 直接安装(官方安装包)方式:从 Python 官网下载安装包(.pkg/.exe)安装 特点:安装到系统默认路径(macOS:/Library/Frameworks/Python.framework) 会添加到系统 PATH,成为全局…

技术管理:搭建团队研发管理体系的一个框架概述

前言 在如今的 IT 信息、互联网和计算机科技相关行业,竞争激烈。互联网行业的发展已经到了下半场,互联网用户增长趋近饱和;AI 人工智能大模型技术还在如火如荼的发展,这股浪潮席卷着每一个科技公司,互联网产品研发…

Zero Cool

打开图片,发现有一帧有一个二维码,在https://ezgif.com/split/ezgif-372a0fcfe884a0f8.gif.html 分解图片直接扫描扫不出来,在ps里面修改一下长和宽在https://cli.im/deqr/other 扫描得到flag

AI元人文与AI哲学:六十日跋涉后的思想相遇

AI元人文与AI哲学:六十日跋涉后的思想相遇 当两种关于人工智能时代的宏大构想在同一时空维度中浮现,思想的交锋与映照便成为观察这个时代精神图景的最佳窗口。AI元人文构想以六十日八百篇人机协作手稿的密集生长方式…

代码随想录算法训练营第四章 字符串part02

代码随想录算法训练营第四章 字符串part02** 151.翻转字符串里的单词 ** leetcode链接:https://leetcode.cn/problems/reverse-words-in-a-string/ 题目描述:给你一个字符串 s ,请你反转字符串中 单词 的顺序。单词…

Dark night

打开下载的文件,发现有文字被隐写ctrl+a复制全部,粘贴到记事本,发现一串数字将数字转成字符串,得到flag

LAUNCH ES200 EV Insulation Resistance Tester: Essential for EV Safety Electrical Diagnostics

The Critical Role of Insulation Resistance Testing in EV Maintenance: Introducing the LAUNCH ES200 As electric vehicles (EVs) become increasingly prevalent across Europe and America, the demand for saf…

Plain

wireshark打开文件,搜索flag追踪TCP流发现加密编码base64解码得到flag

Optimize EV Battery Performance with LAUNCH EVB624 24-Channel Wireless Equalizer

The Hidden Hazard in EV Battery Packs: Cell Imbalance In the world of electric vehicles, a battery pack’s health is the backbone of performance and reliability. Yet, even the most advanced EVs can fac…

STM32CubeMX 开发笔记:Debug-serial wire 必须选中

如果不选中,下次就没法通过调试接口下载程序了。

http-header

打开网址提示缺少条件查看源码,发现两个加密编码解码得到需要的条件使用扩展改成对应的条件刷新页面,获得flag

HBM

在https://www.iamwawa.cn/morse.html 解码摩斯密码因为只有大写字母和数字猜测是base32加密,解码得到16进制16进制转字符串,得到flag