Spring AI 整体介绍_关键组件快速入门_prompt_embedding等

Spring AI:Java开发者的AI集成新利器

在过去,Java开发者在构建AI应用时面临着缺乏统一框架的问题,导致不同AI服务的集成过程复杂且耗时。Spring AI应运而生,旨在为基于Java的应用程序提供一个标准化、高效且易于使用的AI开发平台。它继承了Spring生态系统的设计原则,如可移植性和模块化,使得开发者能够利用熟悉的POJOs(Plain Old Java Objects)来快速搭建智能应用。通过Spring AI,开发者只需编写一次代码,就能轻松切换不同的AI服务提供商,极大简化了项目迁移和技术栈升级的过程。此外,Spring AI还提供了对多种生成式AI模型的支持,包括文本生成、图像处理等,并引入了诸如Prompt Template等功能以增强人机交互体验,完美融合了现代AI技术与传统的Java面向对象编程范式。

Spring AI核心能力概览

Spring AI 拥有以下主要能力,这些能力旨在简化AI应用的开发过程,并确保开发者能够高效地利用不同AI服务和模型。

关键概念一句话介绍:

模型(Model)

一句话说明:支持多种生成式模型的接入与切换。

  • 输入:用户提供的文本、图片或语音等数据。

  • 输出:基于所选模型生成的对应类型的数据,如对话回复、图片或语音文件。

  • 关键要素:支持阿里云通义系列模型,包括但不限于对话、文生图、文生语音等。

提示(Prompt)与提示词模板(Prompt Template)

一句话说明:通过预定义的模板生成特定格式的提示,以指导模型产生期望的结果。

  • 输入:动态参数值。

  • 输出:根据模板生成的具体提示字符串。

  • 关键要素:使用@Value加载模板文件,并通过PromptTemplate.create()方法结合实际参数生成最终的提示。

嵌入(Embedding)

一句话说明:将文本转换成固定长度的向量表示。

  • 输入:任意长度的文本。

  • 输出:一个定长的浮点数数组。

  • 关键要素:适用于需要进行语义相似度计算或分类任务的场景,虽然在提供的资料中没有直接提及,但这是许多AI框架的基本功能之一。

结构化输出(Structured Output)

一句话说明:从模型返回的非结构化文本中提取结构化信息。

  • 输入:模型产生的原始输出。

  • 输出:按照预设格式组织好的结构化数据。

  • 关键要素:利用OutputParser实现自动从字符串到POJO对象的映射,简化了后续处理步骤。

检索增强生成(RAG)

一句话说明:结合外部知识库检索和生成模型,提供更准确的答案。

  • 输入:查询请求以及相关文档内容。

  • 输出:基于检索结果和上下文生成的回答。

  • 关键要素:需设置VectorStore用于存储和检索向量表示的知识项,同时配置DocumentRetriever以获取最相关的文档片段。

函数调用(Function Calling)

一句话说明:允许模型调用外部定义的功能,以执行特定的任务。

  • 输入:符合函数签名要求的参数。

  • 输出:函数执行后的返回值。

  • 关键要素:定义Java函数并通过@Bean注解注册,然后在聊天时告知模型可用的功能列表,模型将决定何时调用它们。

向量存储

一句话说明:为RAG等高级特性提供必要的基础设施支持。

  • 输入:待索引的文档或其他形式的数据。

  • 输出:可被快速检索的向量数据库条目。

  • 关键要素:向量相似度作为Key的一个key value存储 ,负责管理所有已索引项目的向量表示。

Spring Cloud Alibaba子项目:AI集成利器

Spring AI Alibaba是Spring Cloud Alibaba的一个子项目,专为集成AI能力而设计。它基于Spring生态系统的设计原则,旨在简化与不同AI提供商(如阿里云、OpenAI等)的接口对接过程。通过Spring AI Alibaba,开发者可以实现一次编码、多模型支持的目标,只需调整配置即可切换不同的AI服务提供者。其核心优势在于标准化了各种AI服务的调用方式,极大降低了开发和迁移成本。此外,Spring AI Alibaba还支持流式输出及多种实用功能,如Prompt Template、OutputParser等,进一步丰富了应用开发的可能性。

Spring AI Alibaba打造聊天应用详细体感例子

为了实现一个基于Spring AI Alibaba、支持Prompt和流式返回的聊天API,您需要遵循以下步骤。这些步骤将指导您从环境配置到具体代码实现,以确保可以成功集成Spring AI Alibaba完成目标功能。

1. 确认开发环境
  • JDK版本:至少为JDK 17。
  • Spring Boot版本:推荐使用3.3.x或更高版本。
2. 在阿里云申请通义千问的API Key

访问阿里云百炼页面,登录账号并按照指引开通“百炼大模型推理”服务。获取API Key后,请妥善保存,因为后续配置中需要用到它。

3. 配置系统变量

在本地环境中设置AI_DASHSCOPE_API_KEY环境变量,并将其值设为您刚才获得的API Key。例如,在Linux或MacOS上,您可以运行:

export AI_DASHSCOPE_API_KEY=您的API-Key

同时,通过application.properties文件注入此API Key:

spring.ai.dashscope.api-key=${AI_DASHSCOPE_API_KEY}
4. 添加Maven仓库与依赖

由于Spring AI Alibaba当前版本可能未被添加至主流Maven仓库,因此需额外指定Spring官方的仓库地址。在您的pom.xml中加入如下配置:

<repositories><repository><id>sonatype-snapshots</id><url>https://oss.sonatype.org/content/repositories/snapshots</url><snapshots><enabled>true</enabled></snapshots></repository><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><releases><enabled>false</enabled></releases></repository></repositories>

接着,添加对spring-ai-alibaba-starter及其所需其他依赖项的支持:

<dependencies><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter</artifactId><version>1.0.0-M2</version></dependency><!-- Spring Boot starter web for REST API --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies>
5. 创建ChatController处理请求

定义一个ChatController类来处理用户的输入,并利用ChatClient进行响应。这里展示了一个基本示例,包括如何使用Prompt模板以及如何流式地返回结果给客户端。

@RestController
@RequestMapping("/chat")
public class ChatController {private final ChatClient chatClient;@Value("classpath:prompt-template.st")private Resource promptResource;public ChatController(ChatClient.Builder builder) {this.chatClient = builder.build();}@GetMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)public Flux<String> chatStream(@RequestParam String input) {PromptTemplate promptTemplate = new PromptTemplate(promptResource);Prompt prompt = promptTemplate.create(Map.of("input", input));return chatClient.prompt(prompt).stream().content();}
}

其中,prompt-template.st是放置在src/main/resources下的提示词模板文件,内容如下所示:

You are a helpful assistant. Respond to the following message:
{input}
6. 启动应用

现在,您已经完成了所有必要的配置与编码工作。启动您的Spring Boot应用程序,并通过访问http://localhost:8080/chat/stream?input=您的消息来测试您的聊天API是否按预期工作。

以上步骤详尽地介绍了如何构建一个具备Prompt处理能力并且能够以流形式返回聊天结果的应用程序。确保每一步都准确无误地执行,特别是环境变量设置和依赖管理部分,这对于项目的顺利运行至关重要。

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

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

相关文章

浅说差分算法(下)

我们上节课学了一维的差分&#xff0c;但其实还有二维差分&#xff0c;只是比较难写。 差分 二维差分的定义 二维差分是指对于一个n*m的矩阵a&#xff0c;要求支持操作pro(x1,y1,x2,y2,a)&#xff0c;表示对于以(x1,y1)为左上角&#xff0c;(x2,y2)为右下角的矩形区域&#…

生产车间质量管理有什么用?怎么做?

在生产车间的质量管理中&#xff0c;科学有效的管理方法和严格规范的执行流程是至关重要的&#xff0c;它能够帮助企业提高产品质量、降低次品率、确保生产过程的稳定性和效率。然而&#xff0c;许多企业在生产车间质量管理方面存在诸多问题&#xff0c;常常会面临以下困境&…

多微批量自动加好友

在数字化时代&#xff0c;微信不仅是社交通讯的工具&#xff0c;更是一个拥有庞大用户基础的流量平台。对于企业而言&#xff0c;微信是打造私域流量池的理想选择之一。然而&#xff0c;随着微信号的增多&#xff0c;手动添加好友和备注变得既繁琐又耗时。幸运的是&#xff0c;…

UNI VFX Missiles Explosions for Visual Effect Graph

Unity URP和HDRP的通用视觉效果 使用在视觉效果图中制作的高性能GPU粒子系统。 无需进入视觉效果图编辑器即可轻松自定义VFX。 使用(VFX)事件——一个游戏对象可存储多个效果,这些效果可通过C#或视觉脚本触发。 总共32个事件(不包括“停止”事件)。 ❓ 什么是(VFX)事件?…

Cpp::STL—容器适配器Stack和Queue的讲解和模拟实现(15)

文章目录 前言一、适配器模式概念分类 二、Stack核心作用代码实现 三、Queue核心作用代码实现 四、deque双端队列貌似兼收并蓄&#xff1f;实则也难以兼得~ 总结 前言 适配器也是STL六大组件之一&#xff0c;请跟我一起领悟它的智慧&#xff01;   正文开始&#xff01; 一、…

consumer 角度讲一下i2c外设

往期内容 I2C子系统专栏&#xff1a; I2C&#xff08;IIC&#xff09;协议讲解-CSDN博客SMBus 协议详解-CSDN博客I2C相关结构体讲解:i2c_adapter、i2c_algorithm、i2c_msg-CSDN博客内核提供的通用I2C设备驱动I2c-dev.c分析&#xff1a;注册篇内核提供的通用I2C设备驱动I2C-dev.…

浅析建造者模式

建造者模式 一、基础知识介绍 1. 问题引出 上图面存在的问题&#xff1a;产品和产品创建的过程是封装在一起的。耦合性太强 解决方法: 将二者解耦和 2.建造者模式介绍 将复杂对象的构造过程抽象出来&#xff0c;用户不用知晓里面的构建细节 3.四个角色 建造者模式的四个角…

Java项目-基于springboot框架的财务管理系统项目实战(附源码+文档)

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 开发运行环境 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/…

【element-tiptap】如何修改选中内容时的背景颜色?

前言&#xff1a;element-tiptap 用鼠标选中内容的时候&#xff0c;背景颜色跟系统设置的主题有关&#xff0c;比如的我的就是卡哇伊的pink&#xff0c;默认是淡蓝色 但是我们观察一下语雀&#xff0c;背景颜色是它规定好的颜色 这篇文章来探索一下&#xff0c;怎么自己规定选…

实操上手TinyEngine低代码引擎插件化开发

1.背景介绍 1.1 TinyEngine 低代码引擎简介 低代码开发是近些年非常热门的一种开发方式&#xff0c;用户可以通过可视化的方式&#xff0c;简单拖拽&#xff0c;不写代码或者编写少量代码&#xff0c;类似搭积木一样搭建业务应用。 TinyEngine是一个强大的低代码引擎&#x…

企业博客SEO优化:8个必备工具与资源指南

在当今数字化时代&#xff0c;企业博客已远远超越了传统意义上的信息展示平台。它不仅是企业展示品牌形象、传递品牌价值的重要窗口&#xff0c;更是吸引潜在客户、增强用户粘性、提升网站流量和搜索引擎排名的关键。通过精心策划和高质量的内容创作&#xff0c;企业博客能够建…

ChatGPT4o、o1 谁才是最佳大模型?

如何选择合适的 ChatGPT 模型&#xff1f;OpenAI 更新细节与 GPTs 的深入解析 随着人工智能的发展&#xff0c;ChatGPT 已成为众多用户的强大助手&#xff0c;广泛应用于写作、编程、学习和商业等多个领域。然而&#xff0c;面对 OpenAI 提供的众多模型&#xff08;如 GPT-4、…

idea中,git提交时忽略某些本地修改.将文件从git暂存区移除

我们有时候在本地调试代码时&#xff0c;某些配置文件需要修改成本地环境中。当改完后&#xff0c;需要提交代码时&#xff0c;这些文件又不能推到git上。如下图&#xff1a; 当出现这种情况&#xff0c;我们每次都需要手动去将不需要提交的文件的对号去掉。文件多了后&#x…

[Redis] 在Linux中安装Redis并连接图形化工具详细过程(附下载链接)

前言 安装Redis之前应该在虚拟机中安装Linux系统&#xff0c;这里使用centos7版本 [linux] 在VMware中安装linux、文件下载及详细安装过程&#xff08;附下载链接&#xff09;-CSDN博客 安装Linux后&#xff0c;更换yum源为阿里云并安装gcc依赖 [Linux] CentOS7替换yum源为阿…

Rust 语言持续崛起,即将冲击 TIOBE 指数前十,能否成为编程语言新王者?

Rust 语言持续崛起&#xff0c;即将冲击 TIOBE 指数前十&#xff0c;能否成为编程语言新王者&#xff1f; 2024 年 10 月&#xff0c;全球编程语言 TIOBE 排行榜再次更新&#xff0c;各大编程语言在各自领域中继续发挥着独特的优势。官方的标题是&#xff1a; Rust排名稳步攀升…

【代码随想录Day47】单调栈Part02

42. 接雨水 题目链接/文章讲解&#xff1a;代码随想录 视频讲解&#xff1a;单调栈&#xff0c;经典来袭&#xff01;LeetCode:42.接雨水_哔哩哔哩_bilibili 思路概述 问题理解&#xff1a;我们需要计算在给定柱子高度之间可以接住的雨水总量。雨水的量取决于柱子的高度和它们…

PP-ChatOCRv3—文档场景信息抽取v3产线使用教程

文档场景信息抽取v3产线使用教程 1. 文档场景信息抽取v3产线介绍 文档场景信息抽取v3&#xff08;PP-ChatOCRv3&#xff09;是飞桨特色的文档和图像智能分析解决方案&#xff0c;结合了 LLM 和 OCR 技术&#xff0c;一站式解决版面分析、生僻字、多页 pdf、表格、印章识别等常…

有同学问:拿到大厂JAVA OFFER,但是会不会不稳定,有失业风险?!

昨天在直播里面有一个同学说拿到了大厂的offer&#xff0c;但是最近看了很多很多的报道&#xff0c;说大厂Java会不会也失业&#xff1f; 前两天也有家长私信咨询说孩子去了外企&#xff0c;拿着23K的工资&#xff0c;会不会也不稳定&#xff1f; 现在很多同学看了新闻报道或…

热门解压短视频素材资源网站推荐

解压短视频素材哪里找&#xff1f;今天我们来盘点一些优质的解压短视频素材下载平台。如果你也在寻找热门解压视频素材&#xff0c;这份资源清单一定能帮到你&#xff5e; 蛙学网 蛙学网是国内领先的视频素材网站&#xff0c;涵盖了各种类型的解压视频资源&#xff0c;如手艺制…

【专题】计算机网络之物理层

计算机网络体系结构&#xff1a; 1. 物理层的基本概念 物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流&#xff0c;而不是指具体的传输媒体。 作用&#xff1a;尽可能屏蔽掉不同传输媒体和通信手段的差异。 用于物理层的协议也常称为物理层规程 (procedu…