SpringAI整合OpenAI系列(四)

SpringAI整合OpenAI系列(四)

前言

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

这里我想讲讲RAG的概念

Spring AI 在开篇就描述RAG相关的概念

我理解这个索引增强生成(RAG)是将数据融入提示词,从而生成准确的响应,这个数据,就是我们的资源文档,举个例子讲吧,比如我在上期提到的思路中实现简单的BI报表功能的思路:

  1. 先提取用户的问题和需求

  2. 整合原始的资源文档和数据结构文件

  3. 调用OpenAI的模型,生成相应的SQL

  4. 动态执行SQL后,结构化处理数据

  5. 前端处理数据,呈现不同数据结构类型的报表

这个流程中数据就是第二步中的资源文件和数据结构文件,如果用文本的形式调用大模型进行处理,字符内容量过多时,就会导致大模型抓不住重点,可能返回的答案就不是我们需要的答案了,那如何处理这个问题呢?解决办法就是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报表功能的思路:

  1. 先提取用户的问题和需求

  2. 整合原始的资源文档和数据结构文件

  3. 调用OpenAI的模型,生成相应的SQL

  4. 动态执行SQL后,结构化处理数据

  5. 前端处理数据,呈现不同数据结构类型的报表

这个流程中数据就是第二步中的资源文件和数据结构文件,如果用文本的形式调用大模型进行处理,字符内容量过多时,就会导致大模型抓不住重点,可能返回的答案就不是我们需要的答案了,那如何处理这个问题呢?解决办法就是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 系列》。

还有由衷的建议,大家数仓体系建设的时候,无比要考虑数据质量问题,后期我也会出一个关于《数仓体系建设的系列》,数仓体系的建设的不好,会使得数据分析难度大大提高,准确率大大的降低

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值