Spring AI : 让ChatGPT成为你构建应用的核心亮点

本文是一篇介绍spring ai的文章,主要介绍了生成文本内容,以及读取图片中内容两个能力。

之所以介绍这两个能力,是因为 大模型目前最适合做的事情有两个:

1) 非结构化数据的结构化(图片转文字,转excel)

2) 基于结构化数据做文字和图片的输出

这两个能力可以有效的提高应用与用户的交互效率。

目录

Java接入大模型

Spring AI:统一接口的Java大模型应用框架

Spring AI Alibaba概览

通义千问Qwen简介:阿里巴巴云开发的先进语言模型,在MMLU、TheoremQA和GPQA等多项权威评测中超越Llama 3 70B,位居Hugging Face开源大模型排行榜榜首,展现出色性能与广泛应用前景。

SpringBoot集成Spring AI Alibaba实现对话模型

环境要求

申请API Key

配置环境变量与项目属性

添加仓库和依赖

创建Controller类

使用Spring AI Alibaba实现图像识别的详尽示例

1. 前置准备

2. 申请开通资源

3. 配置百炼 API KEY

4. 开通通义万象图像生成模型

5. 添加Spring仓库和依赖

6. 构建读图代码

7. 运行项目

Spring AI 介绍:

当前在Java中调用大模型时,往往缺乏一个成熟且易于使用的AI应用框架。为了解决这个问题,Spring作为老牌的Java应用框架厂商,推出了Spring AI。它借鉴了langchain的一些核心设计理念,并结合了Java面向对象编程的优势,旨在提供一种更高效、灵活的方式来与各种大模型进行交互。Spring AI的核心优势在于其统一了不同AI服务提供商(如OpenAI、阿里云等)的接口实现,使得开发者只需编写一次代码,通过简单的配置更改即可轻松切换至不同的AI实现,极大地提升了开发效率和可维护性。此外,该框架还有专门的团队负责维护和更新。本次示例将以Spring AI Alibaba接入通义大模型为例,展示如何利用这一强大工具来快速构建基于Java的大模型应用;当然,在熟悉整个过程后,开发者也可以根据自身需求,方便地替换为自己所需的其他大模型支持。

Spring AI Alibaba简介:

Spring AI Alibaba是Spring AI针对阿里云生态的实现,它继承了Spring生态系统的设计原则如可移植性和模块化设计,并专注于将这些原则应用于AI领域。作为国内最好的Spring AI实现之一,Spring AI Alibaba整合了阿里巴巴的最佳实践,提供了与Spring Cloud Alibaba相似的集成度和易用性。通过Spring AI Alibaba,开发者能够轻松地在应用程序中接入各种AI能力,包括但不限于模型调用、Prompt模板、RAG(检索增强生成)、文生图以及文字识别等。本文将以Prompt模板和模型调用为例,展示如何利用Spring AI Alibaba来丰富您的项目功能。

通义千问Qwen简介:

通义千问Qwen是阿里巴巴云推出的一种先进的语言模型,在多个权威基准测评中表现出色。它在MMLU、TheoremQA和GPQA等评测指标上超越了Llama 3 70B,并在Hugging Face的开源大模型排行榜Open LLM Leaderboard上位居第一,展示了其卓越的性能和广泛的应用潜力。

另外,在真人参与评测的arena里面,它不仅在思南平台 上仅次于国际知名的GPT和Claude系列,还在 Hugging Face的视觉模型竞技场 中稳居中国首位。

SpringBoot集成Spring AI Alibaba实现对话模型

为了基于Spring Boot集成Spring AI Alibaba,并完成一个简单的对话模型,构建支持prompt的流返回接口的项目,你需要按照以下步骤进行操作。根据提供的我了解的信息,以下是详细的执行步骤:

环境要求

  • JDK版本需要在17(含)以上。
  • Spring Boot版本需在3.3.x以上。

申请API Key

首先,前往阿里云百炼页面开通“百炼大模型推理”服务,并创建一个新的API Key。请记录下这个Key,之后将它配置到你的项目中。

配置环境变量与项目属性

设置环境变量以存储您的API Key:

export AI_DASHSCOPE_API_KEY=${REPLACE-WITH-VALID-API-KEY}

并在application.properties文件中加入API Key配置:

spring.ai.dashscope.api-key: ${AI_DASHSCOPE_API_KEY}

添加仓库和依赖

由于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>

同时,在dependencies部分添加对spring-ai-alibaba-starter的依赖:

<dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter</artifactId><version>1.0.0-M2</version></dependency>

创建Controller类

定义一个Controller类来处理GET请求,该请求将接收用户输入并通过ChatClient调用通义千问模型,最后返回Flux形式的结果。记得启用跨域资源共享(CORS)以允许来自不同源的请求。

@RestController
@RequestMapping("/ai")
@CrossOrigin(origins = "*") // 允许所有来源的CORS
public class ChatController {private final ChatClient chatClient;@Value("classpath:correct-and-expand.st")Resource resource;public ChatController(ChatClient.Builder builder) {this.chatClient = builder.build();}@GetMapping("/steamChat")public Flux<String> steamChat(@RequestParam String input) {PromptTemplate promptTemplate = new PromptTemplate(resource);Prompt prompt = promptTemplate.create(Map.of("input", input));return chatClient.prompt(prompt).stream().content();}
}

这段代码首先注入了ChatClient实例,然后通过构造函数接受一个Prompt模板路径用于动态生成提示内容。当访问/ai/steamChat?input=...时,会根据传入参数调用AI模型并以流的形式返回结果。

确保已经正确设置了项目的入口点以及相关配置后,启动应用程序。现在,你应该能够通过指定的URL向聊天机器人发送消息,并获得相应的回复了。

此解决方案充分利用了Spring AI Alibaba提供的功能,包括但不限于使用ChatClient进行文本生成、应用Prompt模板定制化输入以及利用Stream API实现异步响应。

使用Spring AI Alibaba实现图像识别的详尽示例

1. 前置准备

在开始之前,请确保满足以下条件:

  • JDK版本为JDK 17或更高。
  • Spring Boot版本为3.3.x或更高。

2. 申请开通资源

  1. 访问阿里云百炼页面并登录您的阿里云账号。
  1. 选择开通“百炼大模型推理”服务,并等待开通成功的短信通知。
  1. 开通成功后,再次登录阿里云百炼页面,点击右上角的小人图标,选择API-KEY选项,然后点击【创建新的API-KEY】生成一个API-KEY。请记录这个key,后续需要配置使用。

3. 配置百炼 API KEY

在终端中运行以下命令来配置百炼 API KEY:

export AI_DASHSCOPE_API_KEY=${REPLACE-WITH-VALID-API-KEY}

${REPLACE-WITH-VALID-API-KEY}替换为您实际的API-KEY值。

4. 开通通义万象图像生成模型

  1. 打开百炼控制台。
  1. 在左侧列表栏中选择模型广场,找到图像生成模块下的通义万象模型。
  1. 点击通义万象模型对应的“API调用”按钮。
  1. 在打开的页面左上角,找到模型英文名(qwen-vl-max-latest),这是后面配置时需要指定的模型名称。

5. 添加Spring仓库和依赖

首先,在项目的pom.xml文件中添加Spring自己的仓库以及snapshot仓库,如下所示:

<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>

接着,在pom.xml文件中添加spring-ai-alibaba-starter依赖项以及Spring Boot的父依赖项:

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.4</version><relativePath/> <!-- lookup parent from repository -->
</parent><dependencies><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter</artifactId><version>1.0.0-M3.1</version></dependency>...other dependencies...
</dependencies>

6. 构建读图代码

创建一个新的Controller类ChatModelController,并在其中注入ChatClient实例。同时设置默认Prompt为“识别图中的文字”,默认模型为“qwen-vl-max-latest”。

@RestController
@RequestMapping("/ai")
public class ChatModelController {private static final Logger logger = LoggerFactory.getLogger(ChatModelController.class);@Value("classpath:qrcode.png")private Resource imageResource;private final ChatModel chatModel;public ChatModelController(ChatModel chatModel) {this.chatModel = chatModel;}private static final String DEFAULT_PROMPT = "识别图中的文字";private static final String DEFAULT_MODEL = "qwen-vl-max-latest";@GetMapping("/imageRecognition")public Flux<String> imageRecognition(@RequestParam(value = "prompt", required = false, defaultValue = DEFAULT_PROMPT) String prompt,HttpServletResponse response)throws Exception {response.setCharacterEncoding("UTF-8");List<Media> mediaList = List.of(new Media(MimeTypeUtils.IMAGE_PNG,imageResource));UserMessage message = new UserMessage(prompt, mediaList);message.getMetadata().put(DashScopeChatModel.MESSAGE_FORMAT, MessageFormat.IMAGE);Flux<ChatResponse> fluxResponse = chatModel.stream(new Prompt(message,DashScopeChatOptions.builder().withModel(DEFAULT_MODEL).withMultiModel(true).build()));Flux<String> fluxString = fluxResponse.map(resp -> resp.getResult().getOutput().getContent());return fluxString;}
}

确保将二维码图片命名为qrcode.png,并将其放置在src/main/resources/目录下。

7. 运行项目

完成上述步骤后,您可以启动项目并访问http://localhost:8080/ai/imageRecognition来让模型识别本地二维码图片,并以流式返回结果。

通过以上详细步骤,您就可以基于Spring AI Alibaba实现二维码图像识别功能了。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Qt(openCV的应用)

1. OpenCV简介 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉库&#xff0c;它提供了丰富的图像处理和计算机视觉功能。该库由英特尔公司发起&#xff0c;并在 BSD 许可证下发布&#xff0c;因此它是免费的&#xff0c;且开放源代…

Excel快速转换文档word工具

【注意事项&#xff1a;】 1、目前支持Win10/11 x64操作系统&#xff0c;已亲测可正常运行。 2、工具解压后在 \excel_docx\excel\目录中提供了转换前的标准模板“testcase.xlsx”&#xff0c;测试童鞋在使用Zentao、JIRA等测试工具导出excel&#xff08;.xlsx后缀&#xff0…

uniapp 集成 uview

注意&#xff1a;HBuildX新建项目时必须选择vue2版本&#xff0c;vue3会不支持uview 下载安装方式&#xff1a; uview安装网站&#xff1a;uView2.0重磅发布&#xff0c;利剑出鞘&#xff0c;一统江湖 - DCloud 插件市场 配置&#xff1a; 1.安装sass插件 // 安装sass npm i …

想要搭建陪玩系统小程序,这几点不容忽视,陪玩系统源码框架

随着互联网经济的持续稳定发展&#xff0c;游戏市场的“封印”逐渐被打开&#xff0c;搭建陪玩平台成为一个新的热点。提起陪玩系统相信大家也不陌生&#xff0c;漫漫单排路如果有一个大神能带自己躺赢那是再好不过了&#xff0c;于是陪玩系统运营而生。想要搭建陪玩平台&#…

【论文笔记】Dense Connector for MLLMs

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 基本信息 标题: Dense Connector for MLLM…

[论文阅读]A Survey of Embodied Learning for Object-Centric Robotic Manipulation

Abstract --以对象为中心的机器人操纵的Embodied learning是体现人工智能中一个快速发展且具有挑战性的领域。它对于推进下一代智能机器人至关重要&#xff0c;最近引起了人们的极大兴趣。与数据驱动的机器学习方法不同&#xff0c;具身学习侧重于通过与环境的物理交互和感知反…

vscode的一些使用心得

问题1&#xff1a;/home目录空间有限 连接wsl或者remote的时候&#xff0c;会在另一端下载一个.vscode-server&#xff0c;vscode的插件都会安装进去&#xff0c;导致空间增加很多&#xff0c;可以选择更换这个文件的位置 参考&#xff1a;https://blog.csdn.net/weixin_4389…

Vue前端开发之自定义动画样式

在上一小节中&#xff0c;我们介绍了动画的实现源于6个类别样式&#xff0c;它们的名称默认前缀是一个“v”字母或者指定的名称&#xff0c;如“sc”&#xff0c;其实&#xff0c;也可以不使用这些固定的类别样式&#xff0c;开发者可以自定义任意的类别样式&#xff0c;供动画…

【709】基于SSM+vue的“萌宠小知识”网站设计与实现

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统萌宠小知识信息管理难度大&#xff0c;容错率低&#xff…

《机器学习by周志华》学习笔记-神经网络-05RBF径向基函数网络

1、背景 1988年,Broomhead和Lowe用径向基函数(Radialbasis function, RBF)提出分层网络的设计方法,从而将神经网络的设计与数值分析和线性适应滤波相挂钩。 2、概念 RBF(Radial Basis Function,径向基函数)网络是一种单隐层前馈神经网络,即该网络只有3层,输入层、隐含…

11.1组会汇报-基于区块链的安全多方计算研究现状与展望

基础知识 *1.背书&#xff0c;这个词源来自银行票据业务&#xff0c;是指票据转让时&#xff0c;原持有人在票据背面加盖自己的印鉴&#xff0c;证明该票据真实有效、如果有问题就可以找原持有人。 区块链中的背书就好理解了。可以简单的理解为验证交易并声明此交易合法&…

MSC“名实之辩”:精准鉴定只为精准治疗

前 言 MSC是一群来源广泛、能够体外增殖分化的异质性细胞。MSC具有免疫调节、促进组织修复等作用&#xff0c;应用于多种疾病的治疗。由于科学进程、习惯等原因&#xff0c;MSC具有多种名称。自先秦以来&#xff0c;就有“名实之辩”&#xff0c;今日我们就讲一讲MSC的名称与…

CST联合Isight进行天线DOE设计

本期我们转载一篇国外工程师Matthias MEIENHOFER&#xff0c;利用CST和Isight联合进行DOE设计的案例。 本文通过模拟设计一个双频带&#xff08;GSM和WLAN&#xff09;天线来研究天线的几何尺寸变化和性能的关系。如果我们改变天线里的某些宽度或长度参数&#xff0c;天线的性…

微信小程序寓言童话创作APP设计与实现

文章目录 项目介绍具体实现截图技术介绍mvc设计模式小程序框架以及目录结构介绍错误处理和异常处理java类核心代码部分展示详细视频演示源码获取 项目介绍 本文通过对现有寓言童话创作APP的调研和分析&#xff0c;取其精华去其糟粕&#xff0c;遵循软件工程方法进行系统分析、…

越来越多人不喜欢十六薪了

十六薪是个坑 大家好,我是青玉白露。 最近刷各种论坛&#xff0c;发现有个有意思的职场现象。 不少人开始对"十五薪"、“十六薪”敬而远之。 曾经让人眼红的福利,现在却成了让人望而却步的"坑"。这是咋回事呢? 乍一看,十五薪确实挺诱人。比如月薪3万,年收…

【命令执行waf绕过】

一、绕过空格 二、绕过黑名单 三、绕过长度限制 四、练习 发现了两个文件&#xff0c;cat读取&#xff0c;但是被过滤了&#xff1a; 用 I F S IFS IFS绕过读出index的源码&#xff0c;发现过滤了很多东西&#xff0c;黑名单过滤&#xff1a; 字符串拼接绕过&#xff1a; …

MongoDB笔记02-MongoDB基本常用命令

文章目录 一、前言二、数据库操作2.1 选择和创建数据库2.2 数据库的删除 3 集合操作3.1 集合的显式创建3.2 集合的隐式创建3.3 集合的删除 四、文档基本CRUD4.1 文档的插入4.1.1 单个文档插入4.1.2 批量插入 4.2 文档的基本查询4.2.1 查询所有4.2.2 投影查询&#xff08;Projec…

六、SpringMVC的视图

文章目录 1. ThymeleafView2. 转发视图3. 重定向视图4. 视图控制器view-controller 1. ThymeleafView 2. 转发视图 3. 重定向视图 4. 视图控制器view-controller

springboot系列十三: 异常处理

springboot异常处理 基本介绍拦截器VS过滤器默认异常页面应用实例debug取出状态码和错误信息 全局异常基本说明应用实例Debug处理流程 自定义异常基本说明应用实例Debug处理流程注意事项和细节 基本介绍 1.默认情况下&#xff0c;SpringBoot 提供 /error 处理所有错误的映射&a…

无人机手势控制工作原理和算法!

一、无人机手势控制的工作原理 无人机手势控制的工作原理基于计算机视觉技术和图像识别技术。具体来说&#xff0c;无人机上配备的摄像头会捕捉用户的手势动作&#xff0c;并将这些图像数据传输到无人机内置的处理器中。处理器通过内置的算法对图像进行处理和解析&#xff0c;…