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.rhkb.cn/news/462249.html

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

相关文章

Windows 命令提示符(cmd)中输入 mysql 并收到错误消息“MySQL不是内部或外部命令,也不是可运行的程序或批处理文件?

目录 背景: 过程&#xff1a; 1.找到MySQL安装的路径 2.编辑环境变量 3.打开cmd&#xff0c;输入mysql --version测试成功 总结: 背景: 很早之前安装了Mysql数据库&#xff0c;想查询一下当前安装的MySQL客户端的版本号&#xff0c;我在命令行界面输入mysql --verion命令回…

履带式排爆演习训练机器人技术详解

履带式排爆演习训练机器人是现代反恐、救援及危险环境处理领域中的重要工具。它们结合了先进的机械设计、智能感知、精确控制及高效算法&#xff0c;能够在复杂、危险的环境中执行排爆、侦察、取样等多种高风险任务&#xff0c;极大地保障了人员安全。 技术特点 1. 卓越的地面…

基于SSM医院门诊互联电子病历管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;医生管理&#xff0c;项目分类管理&#xff0c;项目信息管理&#xff0c;预约信息管理&#xff0c;检查信息管理&#xff0c;系统管理 用户账号功能包括&#xff1a;系统首页&…

PVE定时开启关闭虚拟机,实现PVE中群晖虚拟机的定时开机和关闭

如果在PVE中安装了群晖&#xff0c;又不想每天关闭PVE(不在家&#xff0c;怕服务器起不来)&#xff0c;因此想每天定时关闭开启黑群晖和其他虚拟机释放资源。 在网上查了很多&#xff0c;说在crontab添加命令 00 2 * * * pvesh create /nodes/pve/qemu/102/status/stop 00 6 …

【数据结构】宜宾大学-计院-实验六

实验 6 栈和队列&#xff08;综合实验&#xff09; 实验目的&#xff1a;实验内容&#xff1a;进制转换问题&#xff1a;第1题测试结果&#xff1a;第1题代码实现&#xff1a; 括号匹配问题&#xff1a;第2题测试结果&#xff1a;第2题代码实现&#xff1a; 回文字符串问题&…

java并发编程-CAS详解

一定要看这个链接的视频&#xff0c;讲解十分清楚&#xff01;&#xff01;&#xff01; 【【Java并发】面试官问我CAS、乐观锁、悲观锁&#xff0c;我反手就是骑脸输出】 https://www.bilibili.com/video/BV1ff4y1q7we/?share_sourcecopy_web&vd_sourceafbacdc02063c57e7…

【C/C++】qsort函数的学习与使用

零.导言 在之前的文章中&#xff0c;我介绍了冒泡排序&#xff0c;即按ASCII码值把元素从小到大排序&#xff08;文章链接我放在了第五部分&#xff0c;有兴趣的小伙伴可以求看看&#xff09;。而今天我将继续介绍qsort函数&#xff0c;这个函数可以起到和冒泡排序一样的作用&a…

华为实时视频使用FLV播放RTSP流

import flvjs from ‘flv.js’; 安装flv <video style"width:100%;height:100%;" ref"videoHWRef" ></video>// src 华为rtsp流 rtsp://admin:Huaweivideo10.10.8.151:554/xxx/trackID1// url 需要后端提供视频源地址playVideo() {if (fl…

【STM32】通过 DWT 实现毫秒级延时

目录 零、前言一、DWT1、DEMCR2、DWT_CTRL3、DWT_CYCCNT 二、实现代码三、测试 零、前言 在 FreeRTOS 中&#xff0c;SysTick 被用于作为调度器的一部分进行任务调度&#xff0c;那么如果我需要使用软件模拟通信&#xff0c;例如软件 I2C&#xff0c;需要使用 delay&#xff0…

如何在Linux系统中使用Ansible进行自动化部署

如何在Linux系统中使用Ansible进行自动化部署 Ansible简介 安装Ansible 在Debian/Ubuntu系统中安装 在CentOS/RHEL系统中安装 启动Ansible服务 Ansible基本概念 Inventory Playbook Module 配置Ansible 测试Ansible配置 执行Ansible Playbook Ansible模块 文件模块 包管理模块…

「Mac畅玩鸿蒙与硬件20」鸿蒙UI组件篇10 - Canvas 组件自定义绘图

Canvas 组件在鸿蒙应用中用于绘制自定义图形,提供丰富的绘制功能和灵活的定制能力。通过 Canvas,可以创建矩形、圆形、路径、文本等基础图形,为鸿蒙应用增添个性化的视觉效果。本篇将介绍 Canvas 组件的基础操作,涵盖绘制矩形、圆形、路径和文本的实例。 关键词 Canvas 组件…

从零开始构建 ChatGPT

今天&#xff0c;我们要介绍的是一个名为 LLMs-from-scratch 的 GitHub 项目&#xff0c;它由开发者 rasbt 精心打造&#xff0c;旨在一步步教你如何使用 PyTorch 从零开始实现一个类似 ChatGPT 的大型语言模型&#xff08;LLM&#xff09;。 这是一个教育性质的开源项目&…

【Git】Git常用命令

目录 1 前言2 git命令2.1 branch2.2 checkout2.3 pull and push2.4 config2.4.1 Proxy 2.5 tag2.6 rebase2.7 patch2.8 remote2.9 submodule2.10 rm2.10 gitignore2.11 某个commit更改了哪些文件2.12 clean 3 结束语 1 前言 本章记录总结在使用git过程中常用的一些命令&#x…

redis分布式锁在项目中的应用总结

项目应用 应用1 redis分布式锁实现两个操作的原子性 需求&#xff1a;实现一人一单业务逻辑时&#xff08;如果能走到这个逻辑&#xff0c;代表库存是充足的&#xff09;&#xff0c;我们需要 先查询订单 如果订单不存在即没有买过则创建订单 这两个步骤我们要保证是原子…

前端 react 面试题(二)

文章目录 hooks的使用规则为什么hooks要确保在函数组件的最顶层,而不能放置在循环或者条件语句中。react的事件模型react的合成事件是如何实现的react事件传参,可以使用箭头函数或bind方法,这两种哪一种更好使用箭头函数:使用`bind`方法:react的事件模型和vue的区别React …

1分钟解决Excel打开CSV文件出现乱码问题

一、编码问题 1、不同编码格式 CSV 文件有多种编码格式&#xff0c;如 UTF - 8、UTF - 16、ANSI 等。如果 CSV 文件是 UTF - 8 编码&#xff0c;而 Excel 默认使用的是 ANSI 编码打开&#xff0c;就可能出现乱码。例如&#xff0c;许多从网络应用程序或非 Windows 系统生成的 …

【python】OpenCV—Tracking(10.4)—Centroid

文章目录 1、任务描述2、人脸检测模型3、完整代码4、结果展示5、涉及到的库函数6、参考 1、任务描述 基于质心实现多目标&#xff08;以人脸为例&#xff09;跟踪 人脸检测采用深度学习的方法 核心步骤&#xff1a; 步骤#1&#xff1a;接受边界框坐标并计算质心 步骤#2&…

GraphQL系列 - 第2讲 Spring集成GraphQL

目录 一、maven依赖二、Schema 定义三、代码集成3.1 创建模型类3.2 创建服务类3.3 创建控制器类 四、单元测试五、实际 HTTP 请求测试5.1 查询单个 Person5.2 查询所有 People5.3 添加 Person 六、其他6.1 开启graphiql6.2 开启schema查看端点 一、maven依赖 首先&#xff0c;…

Golang | Leetcode Golang题解之第526题优美的排列

题目&#xff1a; 题解&#xff1a; func countArrangement(n int) int {f : make([]int, 1<<n)f[0] 1for mask : 1; mask < 1<<n; mask {num : bits.OnesCount(uint(mask))for i : 0; i < n; i {if mask>>i&1 > 0 && (num%(i1) 0 |…

模拟栈的实现

栈的概念 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈 顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出 LIFO &#xff08; Last In First Out &#xff09;的原则。 压栈&…