SpringAI整合OpenAI系列(四)
前言
原本我是计划写Spring AI中的Embedding和向量数据的使用,但是暂时这个项目出现了一个问题,当我的提示词到达一定规模的时候,这个规模不会很大,调用OpenAI的模型会导致OpenAI无法抓取我需求的重点,或者忽视我的结构化输出,为了解决这个问题,我最近在研究RAG类系统如何实现。
这里我想讲讲RAG的概念


Spring AI 在开篇就描述RAG相关的概念
我理解这个索引增强生成(RAG)是将数据融入提示词,从而生成准确的响应,这个数据,就是我们的资源文档,举个例子讲吧,比如我在上期提到的思路中实现简单的BI报表功能的思路:
-
先提取用户的问题和需求
-
整合原始的资源文档和数据结构文件
-
调用OpenAI的模型,生成相应的SQL
-
动态执行SQL后,结构化处理数据
-
前端处理数据,呈现不同数据结构类型的报表
这个流程中数据就是第二步中的资源文件和数据结构文件,如果用文本的形式调用大模型进行处理,字符内容量过多时,就会导致大模型抓不住重点,可能返回的答案就不是我们需要的答案了,那如何处理这个问题呢?解决办法就是RAG(索引增强生成)
首先我们看架构图的上半部分:ETL,
-
提取(Extract):从文档中提取有价值的信息
-
转换(Transform):将提取的信息进行转换,找到合适的存储和索引。
-
加载(Load):将转换后的信息存储到向量数据库中,以便后续快速检索
其中Transform我们就需要使用Spring AI中Embedding的能力,我们如果利用OpenAI的模型,那么就需要Spring AI利用OpenAI提供的接口,对文件进行Embedding,然后存储到向量数据库中。 我先对这两种技术的作用进行解释。
问题 我现在实现这个BI报表的问题,就是上文说的,OpenAI不能准确的返回我需要执行的SQL。我现在还在尝试对这个问题解决,处理这个问题的方法,我网上找资料主要有以下的策略:
-
压缩与抽象化输入
-
在输入给大模型之前,先对输入进行压缩或抽象化处理。可以提炼出最关键信息并构造一个简洁的概要或概念性提问,避免模型一次性处理过多冗余信息。
-
例如,如果用户输入了复杂的数据结构或多种相关定义,可以将这些内容简化为核心概念,去除多余细节。
-
-
使用向量数据库进行信息检索
-
将相关名词解释和数据结构预先存储在向量数据库中,当用户输入问题时,先通过向量数据库检索相关的文档片段,再将这些片段作为上下文传给大模型。这样可以有效减少输入的冗余信息,只将最相关的内容提供给模型,保证模型生成的 SQL 和输出结果更精准。
-
使用 RAG (检索增强生成) 技术来帮助优化这个过程,确保模型有足够的信息来生成正确的 SQL 查询。
-
-
动态调整提示词(Prompt Engineering)
-
在生成 SQL 查询时,利用提示词工程(Prompt Engineering)技术动态调整输入内容的格式,使得关键信息更加突出。例如,可以设计一种模板,指导模型关注数据表结构、查询条件等重要部分,减少不必要的冗余。
-
使用适当的关键词和指令,引导模型聚焦于与 SQL 生成最相关的部分。
-
-
反馈式交互
-
在生成报表的过程中,引入一个反馈机制,让模型每次生成部分 SQL 或结构化输出后,先展示一部分结果,用户确认后再继续生成剩余内容。这样,用户可以根据生成的中间结果进行调整,避免一次性生成过长的 SQL 或报表输出。
-
想法 因为最近了解到模型蒸馏的方法,所以RAG的方案我决定先放一放,关于大模型的应用,我觉得大模型通过并发,蒸馏相关领域模型的方案更适合落地,所以我接下去的内容更会偏向,模型训练的通过SpringAI辅助生成软标签的形式落地,所以Spring AI中Embedding的能力我先放一放,大家可以持续关注《SpringAI 整合 OpenAI 系列》。
还有由衷的建议,大家数仓体系建设的时候,无比要考虑数据质量问题,后期我也会出一个关于《数仓体系建设的系列》,数仓体系的建设的不好,会使得数据分析难度大大提高,准确率大大的降低
前言
原本我是计划写Spring AI中的Embedding和向量数据的使用,但是暂时这个项目出现了一个问题,当我的提示词到达一定规模的时候,这个规模不会很大,调用OpenAI的模型会导致OpenAI无法抓取我需求的重点,或者忽视我的结构化输出,为了解决这个问题,我最近在研究RAG类系统如何实现。
这里我想讲讲RAG的概念


Spring AI 在开篇就描述RAG相关的概念
我理解这个索引增强生成(RAG)是将数据融入提示词,从而生成准确的响应,这个数据,就是我们的资源文档,举个例子讲吧,比如我在上期提到的思路中实现简单的BI报表功能的思路:
-
先提取用户的问题和需求
-
整合原始的资源文档和数据结构文件
-
调用OpenAI的模型,生成相应的SQL
-
动态执行SQL后,结构化处理数据
-
前端处理数据,呈现不同数据结构类型的报表
这个流程中数据就是第二步中的资源文件和数据结构文件,如果用文本的形式调用大模型进行处理,字符内容量过多时,就会导致大模型抓不住重点,可能返回的答案就不是我们需要的答案了,那如何处理这个问题呢?解决办法就是RAG(索引增强生成)
首先我们看架构图的上半部分:ETL,
-
提取(Extract):从文档中提取有价值的信息
-
转换(Transform):将提取的信息进行转换,找到合适的存储和索引。
-
加载(Load):将转换后的信息存储到向量数据库中,以便后续快速检索
其中Transform我们就需要使用Spring AI中Embedding的能力,我们如果利用OpenAI的模型,那么就需要Spring AI利用OpenAI提供的接口,对文件进行Embedding,然后存储到向量数据库中。 我先对这两种技术的作用进行解释。
问题 我现在实现这个BI报表的问题,就是上文说的,OpenAI不能准确的返回我需要执行的SQL。我现在还在尝试对这个问题解决,处理这个问题的方法,我网上找资料主要有以下的策略:
-
压缩与抽象化输入
-
在输入给大模型之前,先对输入进行压缩或抽象化处理。可以提炼出最关键信息并构造一个简洁的概要或概念性提问,避免模型一次性处理过多冗余信息。
-
例如,如果用户输入了复杂的数据结构或多种相关定义,可以将这些内容简化为核心概念,去除多余细节。
-
-
使用向量数据库进行信息检索
-
将相关名词解释和数据结构预先存储在向量数据库中,当用户输入问题时,先通过向量数据库检索相关的文档片段,再将这些片段作为上下文传给大模型。这样可以有效减少输入的冗余信息,只将最相关的内容提供给模型,保证模型生成的 SQL 和输出结果更精准。
-
使用 RAG (检索增强生成) 技术来帮助优化这个过程,确保模型有足够的信息来生成正确的 SQL 查询。
-
-
动态调整提示词(Prompt Engineering)
-
在生成 SQL 查询时,利用提示词工程(Prompt Engineering)技术动态调整输入内容的格式,使得关键信息更加突出。例如,可以设计一种模板,指导模型关注数据表结构、查询条件等重要部分,减少不必要的冗余。
-
使用适当的关键词和指令,引导模型聚焦于与 SQL 生成最相关的部分。
-
-
反馈式交互
-
在生成报表的过程中,引入一个反馈机制,让模型每次生成部分 SQL 或结构化输出后,先展示一部分结果,用户确认后再继续生成剩余内容。这样,用户可以根据生成的中间结果进行调整,避免一次性生成过长的 SQL 或报表输出。
-
想法 因为最近了解到模型蒸馏的方法,所以RAG的方案我决定先放一放,关于大模型的应用,我觉得大模型通过并发,蒸馏相关领域模型的方案更适合落地,所以我接下去的内容更会偏向,模型训练的通过SpringAI辅助生成软标签的形式落地,所以Spring AI中Embedding的能力我先放一放,大家可以持续关注《SpringAI 整合 OpenAI 系列》。
还有由衷的建议,大家数仓体系建设的时候,无比要考虑数据质量问题,后期我也会出一个关于《数仓体系建设的系列》,数仓体系的建设的不好,会使得数据分析难度大大提高,准确率大大的降低
&spm=1001.2101.3001.5002&articleId=149166078&d=1&t=3&u=426b24bf0a5144798899687078802714)
1603

被折叠的 条评论
为什么被折叠?



