AI驱动的Java开发框架:Spring AI Alibaba实战部署教程

news2024/11/17 11:25:46

前言

随着生成式 AI 的快速发展,基于 AI 开发框架构建 AI 应用的诉求迅速增长,涌现出了包括 LangChain、LlamaIndex 等开发框架,但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言,并非十分友好和丝滑。
因此,我们基于 Spring AI 发布并快速演进 Spring AI Alibaba,通过提供一种方便的 API 抽象,帮助 Java 开发者简化 AI 应用的开发。同时,提供了完整的开源配套,包括可观测、网关、消息队列、配置中心等。
——阿里云云原生微服务技术负责人,Spring AI Alibaba 发起人彦林

在这里插入图片描述
无意间看到关于彦林老师在刚刚结束的2024云栖大会上关于Spring AI Alibaba的汇报,由于我在校期间会经常使用LangChain框架基于Python语言搭建智能体应用,结合本人现在也从事Java研发工作,对这种基于Spring开发范式搭建AI应用的框架非常感兴趣,于是结合现有公开的资料,完成了基于Spring AI Alibaba的demo项目部署工作,记录一些踩的坑,欢迎感兴趣的同学一起研究学习。

声明:本文涉及的链接、图片、代码及相关资料均从公开渠道获取或为个人知识积累,请勿未经本人允许随意复制转载!

资源地址

  • Spring AI Alibaba官网
  • Spring AI Alibaba项目地址
  • 阿里云百炼平台

简介

帮助Java开发者快速构建AI原生智能体应用

Spring AI Alibaba是什么?

Spring Al Alibaba开源项目基于Spring Al构建,是阿里云通义系列模
型及服务在Java Al应用开发领域的最佳实践,提供高层次的AI API抽
象与云原生基础设施集成方案,帮助开发者快速构建AI应用。

Spring AI Alibaba提供哪些能力?

  • 专属Spring开发者的Al框架:基于Spring Al官方开源项目,原生支持Spring Boot体系,为你的Bean带来生成式Al能力。
  • Model,Prompt,RAG,Tools:兼具提示词模板、函数调用、格式化输出等低层次抽象与RAG、智能体、对话记忆等高层次抽象。
  • 阿里云大模型与云原生最佳实践:通义系列AI模型驱动,深度集成云原生API网关、模版管理、Serverless、可观测等云原生应用基础设施。

Spring AI Alibaba架构图

在这里插入图片描述

Spring AI Alibaba未来规划

  • Prompt Template管理
  • 事件驱动的AI应用程序
  • 更多Vector Database支持
  • 函数计算等部署模式
  • 可观测性建设
  • AI代理节点开发能力,如滤网、限流、多模型切换等
  • 开发者工具集

实战部署

一、下载项目

  • IDEA导入

在这里插入图片描述

  • 命令行导入
git clone --depth=1 https://github.com/alibaba/spring-ai-alibaba.git

二、添加依赖并注入

总的来说,使用 Spring AI Alibaba 开发应用与使用普通 Spring Boot 没有什么区别,只需要增加 spring-ai-alibaba-starter 依赖,将 ChatClient Bean 注入就可以实现与模型聊天了。

在项目中加入 spring-ai-alibaba-starter 依赖。

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

为 Spring Bean 注入 ChatClient


@RestController
public class ChatController {

	private final ChatClient chatClient;

	public ChatController(ChatClient.Builder builder) {
		this.chatClient = builder.build();
	}

	@GetMapping("/chat")
	public String chat(String input) {
		return this.chatClient.prompt()
				.user(input)
				.call()
				.content();
	}
}

三、运行项目

1、开通模型调用服务

阿里云百炼大模型服务平台
在这里插入图片描述

2、获取合法的 API-KEY

获取API-KEY

在这里插入图片描述

3、设置 AI_DASHSCOPE_API_KEY 环境变量

# 设置环境变量
export AI_DASHSCOPE_API_KEY="REPLACE-WITH-VALID-API-KEY"
# 查看环境变量
echo ${AI_DASHSCOPE_API_KEY}

4、启动示例项目应用

./mvnw compile exec:java -Dexec.mainClass="com.alibaba.cloud.ai.example.helloworld.HelloWorldExampleApplication"

四、注意事项

问题1:zsh:command not found: mvn?

# 配置 Maven
vim ~/.bash_profile

export MAVEN_HOME=/Library/Maven/apache-maven-3.9.7
export PATH=$MAVEN_HOME/bin:$PATH

source ~/.bash_profile

mvn -version

在这里插入图片描述

问题2:zsh: no such file or directory: ./mvnw?

这个错误表明在当前目录下没有找到名为 mvnw 的文件。mvnw 是 Maven Wrapper 的缩写,它是一个脚本,用于确保使用项目定义的 Maven 版本来运行 Maven 构建,而不是系统上安装的任何其他版本。

# 生成 mvnw 文件和相关的脚本
mvn clean compile
mvn wrapper:wrapper

问题3:引入spring-cloud-alibaba-ai依赖找不到?

org.springframework.ai:spring-ai-core:jar:1.0.0-M2 was not found in http://mvnrepo.alibaba-inc.com/mvn/repository during a previous attempt.

在这里插入图片描述

注意:由于 spring-ai 相关依赖包还没有发布到中央仓库,如出现 spring-ai-core 等相关依赖解析问题,需要在项目的 pom.xml 依赖中加入如下仓库配置。

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

如果maven配置了阿里云镜像,需要在maven配置文件中进行屏蔽配置:

# 修改maven配置文件
cd ~/.m2
vim settings.xml
<!--阿里云仓库-->
<!--修改:<mirrorOf>*</mirrorOf>-->
<mirror>
	<id>aliyunmaven</id>
	<mirrorOf>*,!spring-milestones</mirrorOf>
	<name>阿里云公共仓库</name>
	<url>https://maven.aliyun.com/repository/public</url>
</mirror>

问题4:JDK版本与项目Modules不一致?

com/alibaba/cloud/ai/example/helloworld/HelloWorldExampleApplication has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0

在这里插入图片描述

Project版本为JDK 1.8

# JVM配置
sudo vi ~/.bash_profile

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/Contents/Home
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH

source ~/.bash_profile

java -version

在这里插入图片描述
项目Modules为JDK 17
在这里插入图片描述
启动项目需要更换Project版本为JDK 17

  • JDK17下载
    在这里插入图片描述

  • IDEA更改
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 命令更改

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-17.0.12.jdk/Contents/Home

问题5:API-KEY无效?

org.springframework.ai.retry.NonTransientAiException: 401 - {“code”:“InvalidApiKey”,“message”:“Invalid API-key provided.”,“request_id”:“23e91a5e-9050-9cb5-a84a-f9ac931830ad”}

在这里插入图片描述

  • 检查AI_DASHSCOPE_API_KEY是否已配置
# 设置环境变量
export AI_DASHSCOPE_API_KEY="REPLACE-WITH-VALID-API-KEY"
# 查看环境变量
echo ${AI_DASHSCOPE_API_KEY}
  • 确保已开通模型调用服务,并处于主业务空间下具备API-Key权限。
    • 获取API-KEY
    • 将API-KEY配置到环境变量
    • 如何使用业务空间
    • 子业务空间的模型调用
      在这里插入图片描述

五、应用示例

在这里插入图片描述
访问本地启动链接,向通义模型提问并得到回答。

 http://localhost:8080/ai/chat?input=你是谁?

在这里插入图片描述

 http://localhost:8080/ai/chat?input=简单介绍一下阿里云?

在这里插入图片描述

参考资料

  • Spring AI Alibaba官网
  • Spring AI Alibaba项目地址
  • 阿里云百炼平台
  • Spring Cloud Alibaba专家答疑

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

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

相关文章

32. Java栈和队列

1. 前言 栈和队列相关的题目是校招中出现频率一般,但是是属于相对基础的题型。我们要关注两类问题,栈和队列的添加和删除操作,以及栈和队列之间的区别和联系。 2. 栈和队列 2.1 数据结构 首先我们给出栈和队列的数据结构定义: (1)栈(Stack):允许在某一端插入元素(…

【PyTorch入门】编程杂谈·1(文件、字典结构、字符串统计、结果保存)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;PyTorch入门宝典_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前…

搭建基于H.265编码的RTSP推流云服务器

一、前言 网上能够找到的RTSP流地址&#xff0c;均是基于H.264编码的RTSP流地址&#xff0c;无法测试应用是否可以播放H265实时流为此&#xff0c;搭建本地的把H.264转码成H.265的RTSP服务器&#xff0c;不管是通过VLC搭建本地RTSP服务器&#xff0c;还是通过FFmpeg搭建本地RT…

创作一个JavaScript案例,提示工程师请了解一下。

预期 提问1&#xff1a; web开发im的聊天记录展示的实现思路和代码实战。用户数据结构{nickName&#xff0c;uerID&#xff0c;msg,picture}。当nickName"主人"的时候聊天内容底色绿色&#xff0c;主人的聊天记录是靠左显示&#xff0c;其他人靠右显示。数据内容有长…

如何在 Three.js 场景中创建可点击展开的标签

在复杂的可视化场景中&#xff0c;经常需要为 3D 对象添加可交互的标签&#xff0c;以便用户点击时可以查看详细信息。这篇文章将通过一个简单的案例展示&#xff0c;如何在 Three.js 中为对象创建可点击的标签&#xff0c;点击标签可以展开详细信息&#xff0c;再次点击可以关…

JAVA集成工作流实际项目操作参考,springboot,vue,activiti,在线流程绘制,会签,退回,网关,低代码,

前言 activiti工作流引擎项目&#xff0c;企业erp、oa、hr、crm等企事业办公系统轻松落地&#xff0c;一套完整并且实际运用在多套项目中的案例&#xff0c;满足日常业务流程审批需求。 一、项目形式 springbootvueactiviti集成了activiti在线编辑器&#xff0c;流行的前后端…

THREE.JS法线Shader

以普通情况而论 vNormal normal;//...gl_FragColor vec4( vNormal, 1. );vNormal normal;//...gl_FragColor vec4( normalize( vNormal ) * 0.5 0.5, 1. );vNormal normalMatrix * normal;//...gl_FragColor vec4( normalize( vNormal ) * 0.5 0.5, 1. );normalMa…

C语言进阶【6】---结构体【1】(结构体的本质你不想了解吗?)

本章概述 结构体类型的声明结构体变量的创建和初始化结构体成员访问操作符彩蛋时刻&#xff01;&#xff01;&#xff01; 结构体类型的声明 咱们在讲操作符那个章节中&#xff0c;对于结构体类型的声明进行了讲解&#xff0c;咱们先来回忆一下&#xff0c;为后面的讲解作准备…

堆排序,TopK问题|向上调整建堆|向下调整建堆(C)

堆排序 void HeapSort(int* a, int n) {HP hp;HeapInit(&hp);for (int i 0; i < n; i){HeapPush(&hp, a[i]);}int i 0;while (!HeapEmpty(&hp)){a[i] HeapTop(&hp);HeapPop(&hp);}HeapDestroy(&hp); }先初始化一个堆将数组中的数据一个一个顺序…

【Python大语言模型系列】在阿里云ECS服务器上部署dify大模型应用开发平台(完整教程)

这是我的第360篇原创文章。 一、阿里云ECS简介 云服务器( Elastic Compute Service ,简称ECS )是一-种简单高效、处理能力可弹性伸缩的计算服务&#xff0c;帮助您快速构建更稳定、安全的应用,提升运维效率,降低IT成本&#xff0c;使您更专注于核心业务创新。 这个活动需要满…

Vatee万腾平台:企业智能化生态的领航者

在科技日新月异的今天&#xff0c;企业的智能化转型已成为不可逆转的趋势。Vatee万腾平台&#xff0c;凭借其前瞻性的技术视野和不懈的创新精神&#xff0c;正逐步构建起一个以智能化为核心的新型商业生态&#xff0c;成为推动企业智能化升级的核心力量。 Vatee万腾平台深谙技…

软件设计之Maven(1)

软件设计之Maven(1) 路线图推荐&#xff1a; 【Java学习路线-极速版】【Java架构师技术图谱】 尚硅谷新版Maven教程&#xff08;高效入门maven&#xff0c;上手又快又稳&#xff09; 资料可以去尚硅谷官网免费领取 学习内容&#xff1a; Maven简介安装与环境配置Maven工程GA…

【机器学习(九)】分类和回归任务-多层感知机(Multilayer Perceptron,MLP)算法-Sentosa_DSML社区版

文章目录 一、算法概念二、算法原理&#xff08;一&#xff09;感知机&#xff08;二&#xff09;多层感知机1、隐藏层2、激活函数sigma函数tanh函数ReLU函数 3、反向传播算法 三、算法优缺点&#xff08;一&#xff09;优点&#xff08;二&#xff09;缺点 四、MLP分类任务实现…

【html网页制作】国庆节日主题网页制作含js轮播(5页面附效果源码)

HTMLCSS节日国庆主题网页制作 &#x1f354;涉及知识&#x1f964;写在前面&#x1f367;一、网页主题&#x1f333;二、网页效果菜单切换效果PageA、整体页Page1、首页Page2、节日由来Page3、节日视频Page4、庆祝活动Page5、留言 &#x1f40b;三、网页架构与技术3.1 脑海构思…

# linux从入门到精通(二)

linux从入门到精通&#xff08;二&#xff09; 一、Linux系统的安装&#xff1a;新建VM虚拟机 1、Linux版本的选择 1&#xff09;版本选择&#xff1a;CentOS 6.5 【镜像一般都是xxx.iso文件】 2&#xff09;为什么不选择7.x版本&#xff1f; 6.x的各种系统操作模式是基础…

python绘制图像

柱状图 import os# 输入想要存储图像的路径 os.chdir(D:)import matplotlib.pyplot as plt import numpy as np # 改变绘图风格 import seaborn as snssns.set(color_codesTrue)cell [gen7, xgspon, 3081GB, vettel, totalplay, other] pvalue [21, 20, 18, 13, 7, 34]width…

​​XrayGLM原理与部署

接上一篇&#xff1a;VisualGLM-6B——原理与部署-CSDN博客 XrayGLM技术背景与原理 XrayGLM 是一种基于 VisualGLM-6B 微调开发的多模态医学影像诊断模型&#xff0c;专门用于处理医学影像&#xff08;如 X 光胸片&#xff09;的自动诊断和报告生成任务。该模型旨在为中文医学…

第8章_索引的创建与设计原则

1. 索引的声明与使用 1.1 索引的分类 MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。 从 功能逻辑 上说&#xff0c;索引主要有 4 种&#xff0c;分别是普通索引、唯一索引、主键索引、全文索引。 按照 物理实现方式 &#xff0c;索引可以…

医疗器械中的国产光耦合器浅析

光耦合器&#xff0c;也称为光隔离器&#xff0c;在确保医疗器械的安全性和性能方面发挥着关键作用。通过在系统的不同部分之间提供电气隔离&#xff0c;它们可以防止信号干扰、保护敏感元件并保护患者免受电击。近年来&#xff0c;国产光耦合器制造商一直在加紧生产可靠的高性…

时也命也!转念的力量(深度好文)——早读(逆天打工人爬取热门微信文章解读)

时也命也 引言Python 代码第一篇 洞见 转念的力量&#xff08;深度好文&#xff09;第二篇 意想不到的收入结尾 早上上交所宕机 很多股票都横成直线 我的股却跳了一下水 我怕出什么监管事故 跟着卖出去了 然后查了一下 发现是上交所被买爆了 我想了一下 服务器问题 那么能否事后…