当前位置:   article > 正文

紧跟Spring AI,阿里推出Spring Cloud Alibaba AI,Java也能方便用 AI 啦

springcloud alibaba ai

来源:https://sca.aliyun.com/docs/2023/user-guide/ai/quick-start/spring-ai-etl-pipeline

Spring AI 是 Spring 官方社区项目,旨在简化 Java AI 应用程序开发,让 Java 开发者像使用 Spring 开发普通应用一样开发 AI 应用。

Spring Cloud Alibaba AI 以 Spring AI 为基础,并在此基础上提供阿里云通义系列大模型全面适配,让用户在 5 分钟内开发基于通义大模型的 Java AI 应用。

Spring AI 简介

据 Spring AI 官网描述,该项目的灵感来自著名的 Python 项目,如 LangChain 和 LlamaIndex,但 Spring AI 并不是这些项目的直接复制。Spring AI 相信下一波 Generative AI 生成式应用程序将不仅面向 Python 开发人员,而且将在许多编程语言中无处不在。

Spring AI 的核心是提供抽象,作为开发 Java AI 应用程序的基础,提供以下功能:

  • 提供多种大模型服务对接能力,包括业界大多数主流大模型服务等;

  • 支持灵活的 Prompt Template 和模型输出解析 Output Parsing 能力;

  • 支持多模态的生成式 AI 能力,如对话,文生图、文生语音等;

  • 提供通用的可移植的 API 以访问各类模型服务和 Embedding 服务,支持同步和流式调用,同时也支持传递特定模型的定制参数;

  • 支持 RAG 能力的基础组件,包括 DocumentLoader、TextSpillter、EmobeddingClient、VectorStore 等;

  • 支持 AI Spring Boot Starter 实现配置自动装配;

Spring Cloud Alibaba AI 简介

Spring Cloud Alibaba AI 目前基于 Spring AI 0.8.1 版本 API 完成通义系列大模型的接入。通义接入是基于阿里云 灵积模型服务,灵积模型服务建立在“模型即服务”(Model-as-a-Service,MaaS)的理念基础之上,围绕 AI 各领域模型,通过标准化的API提供包括模型推理、模型微调训练在内的多种模型服务。

在当前最新版本中,Spring Cloud Alibaba AI 主要完成了几种常见生成式模型的适配,包括对话、文生图、文生语音等,开发者可以使用 Spring Cloud Alibaba AI 开发基于通义的聊天、图片或语音生成 AI 应用,框架还提供 OutParser、Prompt Template、Stuff 等实用能力。

以下是当前官方提供的 Spring Cloud Alibaba AI 应用开发示例,可以点击查看:

  • 聊天对话应用

  • 文生图应用

  • 文生语音应用

  • 模型输出解析OutputParser(实现从 String 到自动 POJO 映射)

  • 使用 Prompt Template

  • 让 AI 模型接入外部数据(Prompt Stuff)

体验第一个Spring AI应用开发

本项目演示如何使用 spring-cloud-starter-alibaba-ai 完成一个在线聊天 AI 应用,底层使用通义千问提供的模型服务。

开发聊天对话应用

  1. 在项目 pom.xml 中加入 2023.0.1.0 版本 Spring Cloud Alibaba 依赖:

  1. <dependencyManagement>
  2.   <dependencies>
  3.     <dependency>
  4.       <groupId>com.alibaba.cloud</groupId>
  5.       <artifactId>spring-cloud-alibaba-dependencies</artifactId>
  6.       <version>2023.0.1.0</version>
  7.       <type>pom</type>
  8.       <scope>import</scope>
  9.      </dependency>
  10.    </dependencies>
  11. </dependencyManagement>
  12. <dependencies>
  13.   <dependency>
  14.       <groupId>com.alibaba.cloud</groupId>
  15.       <artifactId>spring-cloud-starter-alibaba-ai</artifactId>
  16.   </dependency>
  17. </dependencies>
  1. application.yml 配置文件中加入以下配置:

  1. spring:
  2.   cloud:
  3.     ai:
  4.       tongyi:
  5.         chat:
  6.           options:
  7.             # Replace the following key with a valid API-KEY.
  8.             api-key: sk-a3d73b1709bf4a178c28ed7c8b3b5axx
  1. 编写聊天服务实现类,由 Spring AI 自动注入 ChatClientStreamingChatClientChatClient 屏蔽底层通义大模型交互细节。

  1. @Service
  2. public class TongYiSimpleServiceImpl extends AbstractTongYiServiceImpl {
  3.   private final ChatClient chatClient;
  4.   private final StreamingChatClient streamingChatClient;
  5.   @Autowired
  6.   public TongYiSimpleServiceImpl(ChatClient chatClient, StreamingChatClient streamingChatClient) {
  7.     this.chatClient = chatClient;
  8.     this.streamingChatClient = streamingChatClient;
  9.   }
  10. }
  1. 提供具体聊天逻辑实现

  1. @Service
  2. public class TongYiSimpleServiceImpl extends AbstractTongYiServiceImpl {
  3.   // ......
  4.   @Override
  5.   public String completion(String message) {
  6.     Prompt prompt = new Prompt(new UserMessage(message));
  7.     return chatClient.call(prompt).getResult().getOutput().getContent();
  8.   }
  9.   @Override
  10.   public Map<String, String> streamCompletion(String message) {
  11.     StringBuilder fullContent = new StringBuilder();
  12.     streamingChatClient.stream(new Prompt(message))
  13.         .flatMap(chatResponse -> Flux.fromIterable(chatResponse.getResults()))
  14.         .map(content -> content.getOutput().getContent())
  15.         .doOnNext(fullContent::append)
  16.         .last()
  17.         .map(lastContent -> Map.of(message, fullContent.toString()))
  18.         .block();
  19.     log.info(fullContent.toString());
  20.     return Map.of(message, fullContent.toString());
  21.   }
  22. }
  1. 编写 Spring 入口类并启动应用

  1. @SpringBootApplication
  2. public class TongYiApplication {
  3.   public static void main(String[] args) {
  4.     SpringApplication.run(TongYiApplication.class);
  5.   }
  6. }

至此,便完成了最简单的聊天 AI 应用开发,与普通的 Spring Boot 应用开发步骤完全一致!

验证应用效果

启动应用后,可通过如下两种方式验证应用效果。

  1. 方式一

浏览器地址栏输入:http://localhost:8080/ai/example

返回如下响应:

  1. {
  2.     "Tell me a joke""Sure, here's a classic one for you:\n\nWhy was the math book sad?\n\nBecause it had too many problems.\n\nI hope that made you smile! If you're looking for more, just let me know."
  3. }
  1. 方式二

进入 resources/static 目录下,使用浏览器打开 index.html 文件,输入问题,即可获得输出响应(确保 api-key 有效):

8fce6f0d852b96f1aedcaa3b4f885d14.png

spring-ai-example

申请通义API-KEY

为使示例能够正常接入通义大模型,需要在阿里云开通 DashScope 灵积模型服务,申请有效的 API-KEY 并更新到应用配置文件。具体操作步骤可参见如下文档:

https://help.aliyun.com/zh/dashscope/developer-reference/activate-dashscope-and-create-an-api-key

未来规划

当前版本 Spring Cloud Alibaba AI 主要完成了几种常见生成式模型适配,包括对话、文生图、文生语音等。接下来的版本中,我们将继续完成 VectorStore、Embedding、ETL Pipeline 等更多适配,简化 RAG 等更多 AI 应用开发场景。

ca0fa51675a02f300dbce820ed0824e5.png

spring-ai-etl-pipeline

我们创建了一个高质量的技术交流群,与优秀的人在一起,自己也会优秀起来,赶紧点击加群,享受一起成长的快乐。


你还在购买国内的各种昂贵又低质的技术教程吗?这里给大家推荐下我们自研的Youtube视频语音转换插件(https://youtube-dubbing.com/),一键外语转中文,英语不好的小伙伴也可以轻松的学习油管上的优质教程了,下面是演示视频,可以直观的感受一下:

如果您觉得这款插件不错,也可以推荐给您身边的朋友,目前我们开通了分享赚钱功能,只要安装本插件登录注册之后,获取邀请链接,放到你的博客侧边栏、友情链接或者发到朋友圈、微博、X等社交平台,就能获得积分,积分现在是可以i直接提现的哦~

推荐阅读

ELK太重怎么办?试试这个轻量级日志系统吧!

程序员"计算机之子"的职场反思

8个你应该掌握的实用 Java Streams API

Spring Boot中的 6 种API请求参数读取方式

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/873738
推荐阅读
相关标签
  

闽ICP备14008679号