SpringAI-基于java大模型的胡言乱语

ops/2024/9/24 3:01:28/

最近看了一点相关的springAI知识,做个小总结

胡言乱语开始

1.不同的ai调用api一般单独汇总成一个依赖,比如说调用openai的api的依赖是spring-ai-openai-spring-boot-starter。

2.最常用的展示方式是流式对话,AI的数据是一个字一个字生成的,不等AI全部生成才传过来。看上去提高响应速度,给用户一个好体验,主要使用SSE技术。

3.为了让ai有上下文对话能力,需要将历史对答+本次提问组成一个list传输给ai,Message有

  • SystemMessage系统限制信息,该类信息在对话中的权重很大
  • UserMessage用户信息
  • AssistantMessageAI回复信息

等类型,由于ai计费方式按长度计算,所以一般会对这个列表长度进行限制。

4.人设功能,实际上属于提示词Prompt工程的一部分,在openai中人设设定存储在SystemMessage中,该SystemMessage在在对话中的权重很大,ai会优先对这部分反应。一般塞在历史数据list中的第一个。

5.Prompts模板语法,PromptTemplate能够创建结构化提示词,实现了三个接口:

  • PromptTemplateStringActions: 主要用于创建和渲染提示词字符串,返回值类型均是String类型,提示词基本形式。
  • PromptTemplateActions: 主要用于创建Prompt对象,该对象可直接传递给ChatClient以生成响应。
  • PromptTemplateMessageActions:主要用于创建Message对象,这允许我们针对Message对象进行其他的相关操作。

6.OutputParser 生成解析器,可以将AI生成的内容解析为Java对象。实际上是靠Prompt提示词强规范返回输出格式为json

Parser接口用于解析AI生成的内容并将其转换为Java对象返回。 在Spring AI中,OutputParser接口有三个具体的实现类:

  • BeanOutputParser: 通过让AI生成JSON格式的文本,然后通过JSON反序列化为Java对象返回;
  • MapOutputParser: 与BeanOutputParser的功能类似,但会将JSON反序列化为Map对象;
  • ListOutputParser: 让AI生成以逗号分隔的列表;

7.基于数据库的多Key轮询需求,在实际业务场景下,不可能只通过一个Key来保证系统稳定运行,因为一旦超过单key请求上限,就会出现无法请求AI的情况,所以需要实现多Key轮询请求,保证系统不会出现因为单key达到请求限制而无法运行的情况。

8.函数调用功能,在一些大模型中可能集成了函数调用功能,函数调用允许 AI 大模型执行客户端的函数,从而根据需要访问必要的信息或动态地执行任务。

9.不同于对话的ChatClient,绘图使用的ImageClient,需要给出ImageMessage(绘图指令)、ImageOptions(图片数、图片配置、返回的图片格式、绘图模型等)。

10.多模态对话,自行判断对话和图片方式,大概率取决去提示词,为了精准一般使用英文写提示词框架,第一次对话让ai判断使用什么方式,第二次对话调用相应的ChatClient或者ImageClient,当然,也可以要求同时输出文字和图片,通过ChatClient添加同时输出文字和图片的提示词来实现

11.Embeddings技术,将文本或图片等各种之后需要用的信息转换为数值向量。这些向量化后的数值数据对于文本分析和检索有着至关重要的作用。一般需要关注选用的Embedding模型model(比如text-embedding-3)和编码格式encodingFormat(通常float)

12.突破Token限制的取巧方法,上下文太长会超过Token限制导致ai无法根据所有信息进行回复,比如提取一篇几十页的论文的总结或者其中提出的名词的含义,直接提问显得不太显示,这时需要一种能存储大量信息并且能被ai理解的事物,也就是向量数据库,与传统数据库执行的精确性搜索不同,向量数据库执行相似性搜索。相似性搜索的算法有很多,比如计算两个向量之间的距离或者夹角来判断是否相似。

13.RAG技术,向量数据库执行搜索后的结果是一组与用户问题相似的数据,在让AI处理超大文本时,只需将这组数据发送给AI即可,这解决了传入超大文本时突破Token限制,节省大量开销。这就是增强检索生成(RAG),RAG的实现原理:

  • 文本分割成一组文本;
  • 一组文本调用嵌入模型获得一组向量并存储到向量数据库中;
  • 提问时,在向量数据库执行相似性搜索获得与问题相关的一组文本;
  • 将这组文本和问题一并发给AI

如果想使用RAG技术,需要以下几个功能:

  • 文件上传功能和接口
  • 向量数据库的CURD
  • 创建提示词来让AI知道自己要根据查找的内容进行回复
  • 创建对话接口

http://www.ppmy.cn/ops/115082.html

相关文章

Java 集合(数据结构)面试题总结

一、栈和队列的区别 具体的场景应用 栈(Stack)和队列(Queue)是两种基本的数据结构,它们在数据的存取顺序上有不同的规则。以下是它们的主要区别以及具体的应用场景。 1. 栈(Stack) 特点&…

WGCAT工单系统 v1.2.1 支持导出PDF和分享创建工单功能

官网下载:www.wgstart.com WGCAT-v1.2.1 更新说明,2024-09-15发布 1. 新增,工单数据支持导出为PDF文件 2. 新增,可以分享给其他人创建工单,分享创建工单的链接不需要登录,直接可以提交工单数据,…

【编程基础知识】mysql是怎样执行一条sql语句的,涉及到哪些环节步骤是,mysql的整体体系结构是啥样的,有哪些组件

一、步骤 MySQL执行一条SQL语句的过程涉及多个环节和步骤。以下是这一过程的概述: 客户端连接:客户端通过连接器(Connector)向MySQL服务器发起连接请求。身份验证:连接器对用户身份进行验证,确保用户有权…

TypeError: expected string or buffer - Langchain, OpenAI Embeddings

题意:类型错误:期望字符串或缓冲区 - Langchain,OpenAI Embeddings 问题背景: I am trying to create RAG using the product manuals in pdf which are splitted, indexed and stored in Chroma persisted on a disk. When I tr…

Python编码系列—Python代理模式:为对象赋予超能力的魔法

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

基于SpringBoot+定时任务实现地图上绘制车辆实时运动轨迹图

目录 1. 项目结构 2. Maven依赖配置 (pom.xml) 3. 实现后端服务 4. 配置文件 (application.properties) 5. 启动项目 6. 访问页面 实现基于北斗卫星的车辆定位和轨迹图的Maven工程(使用模拟数据),我们将使用以下技术: Spri…

python 实现average mean平均数算法

average mean平均数算法j介绍 “平均数”(Mean)或"平均数算法"是统计学中用于描述一组数据集中趋势的一个基本且重要的概念。它表示了数据集中所有数值的“平均”或“中心”位置。最常见的平均数是算术平均数(Arithmetic Mean&…

论文大杀器!分享4款ai论文写作工具软件

在当今学术研究和论文写作领域,AI技术的应用已经变得越来越普遍。这些工具不仅能够提高写作效率,还能帮助研究人员生成高质量的论文内容。本文将重点介绍四款优秀的AI论文写作工具,并特别推荐千笔-AIPassPaper。 一、千笔-AIPassPaper 传送门…