当前位置: 首页 > news >正文

使用阿里开源的Spring Cloud Alibaba AI开发第一个大模型应用

背景

前段时间看到Spring推出了SpringAI,可以方便快速的接入ChatGPT等国外的大模型,现在阿里巴巴也紧追脚步推出了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 AI 为基础,并在此基础上提供阿里云通义系列大模型全面适配,让用户在 5 分钟内开发基于通义大模型的 Java AI 应用。
官网链接:https://sca.aliyun.com/docs/2023/user-guide/ai/quick-start/
推荐查看官网资料,很详细。
在这里插入图片描述

意义

各大公司都推出了自己的大模型,这里不评各家大模型的优劣,而且大模型的建设所需要的极大成本不是普通人一台电脑就能搞定的,但是在此之外,大模型的其他方向的创新也很重要。
在这里插入图片描述
所以除了模型的训练,我们还可以在数据的收集和应用的创新上去开拓新的领域。ChatGPT收集的人类数据也不过一点点,如果提供的数据更多,未来会发生什么?现在大模型已经很多,但是AI应用其实还是缺乏的,未来的社交、电商、短视频等各个领域会不会被大模型给重构?可以期待一下。

现在也都在倡导不要再卷大模型了,要去多开发大模型应用,随着技术的积累,大模型的应用开发门槛也越来越低了。下面我们跟着阿里巴巴提供的Spring Cloud Alibaba AI去搭建一个自己的大模型应用。

体验第一个大模型应用开发

跟随阿里官方指导教程,搭建一个在线聊天应用。

开发聊天对话应用

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

<dependencyManagement><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2023.0.1.0</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-ai</artifactId></dependency>
</dependencies>

step2: 在 application.yml 配置文件中加入以下配置:

spring:cloud:ai:tongyi:chat:options:# Replace the following key with a valid API-KEY.api-key: sk-a3d73b1709bf4a178c28ed7c8b3b5axx

step3: 编写聊天服务实现类,由 Spring AI 自动注入 ChatClient、StreamingChatClient,ChatClient 屏蔽底层通义大模型交互细节。

@Service
public class TongYiSimpleServiceImpl extends AbstractTongYiServiceImpl {private final ChatClient chatClient;private final StreamingChatClient streamingChatClient;@Autowiredpublic TongYiSimpleServiceImpl(ChatClient chatClient, StreamingChatClient streamingChatClient) {this.chatClient = chatClient;this.streamingChatClient = streamingChatClient;}
}

step4: 提供具体聊天逻辑实现

@Service
public class TongYiSimpleServiceImpl extends AbstractTongYiServiceImpl {// ......@Overridepublic String completion(String message) {Prompt prompt = new Prompt(new UserMessage(message));return chatClient.call(prompt).getResult().getOutput().getContent();}@Overridepublic Map<String, String> streamCompletion(String message) {StringBuilder fullContent = new StringBuilder();streamingChatClient.stream(new Prompt(message)).flatMap(chatResponse -> Flux.fromIterable(chatResponse.getResults())).map(content -> content.getOutput().getContent()).doOnNext(fullContent::append).last().map(lastContent -> Map.of(message, fullContent.toString())).block();log.info(fullContent.toString());return Map.of(message, fullContent.toString());}}

step5: 编写Spring入口并启动应用

@SpringBootApplication
public class TongYiApplication {public static void main(String[] args) {SpringApplication.run(TongYiApplication.class);}
}

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

验证效果

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

返回如下响应:

{"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."
}

申请通义API-KEY

为使示例能够正常接入通义大模型,需要在阿里云开通 DashScope 灵积模型服务,申请有效的 API-KEY 并更新到应用配置文件。具体操作步骤可参见如下文档:
https://help.aliyun.com/zh/dashscope/developer-reference/activate-dashscope-and-create-an-api-key

相关文章:

  • 探索Python元类的奥秘及其应用场景
  • 【Python爬虫】爬取名人名言页面并进行简单的数据清洗(入门级)
  • C# 中的隐式和显式类型转换
  • 华为HCIP Datacom H12-821 卷9
  • django学习入门系列之第三点《CSS基础样式介绍2》
  • select实现超时保护机制
  • 【性能优化】表分桶实践最佳案例
  • odoo17 小变更3 Warning、 “attrs “和 “states “不再用
  • 树和二叉树的定义
  • HBase面试题
  • 端到端的自动驾驶--论坛分析
  • Linux操作系统篇:多线程
  • 【Effective Modern C++】第1章 型别推导
  • 【React篇】父组件渲染时避免重复渲染子组件的3种处理方法
  • [C++][数据结构][跳表]详细讲解
  • 〔开发系列〕一次关于小程序开发的深度总结
  • Akka系列(七):Actor持久化之Akka persistence
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • CSS 提示工具(Tooltip)
  • Java IO学习笔记一
  • JS数组方法汇总
  • Laravel Telescope:优雅的应用调试工具
  • maven工程打包jar以及java jar命令的classpath使用
  • python3 使用 asyncio 代替线程
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 入口文件开始,分析Vue源码实现
  • 微服务核心架构梳理
  • 写给高年级小学生看的《Bash 指南》
  • 一个项目push到多个远程Git仓库
  • 06-01 点餐小程序前台界面搭建
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • 关于Android全面屏虚拟导航栏的适配总结
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​​​​​​​STM32通过SPI硬件读写W25Q64
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​Linux·i2c驱动架构​
  • #WEB前端(HTML属性)
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (¥1011)-(一千零一拾一元整)输出
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (7)摄像机和云台
  • (BFS)hdoj2377-Bus Pass
  • (CVPRW,2024)可学习的提示:遥感领域小样本语义分割
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第6节 (嵌套的Finally代码块)
  • (javaweb)Http协议
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (十)T检验-第一部分
  • (一)Kafka 安全之使用 SASL 进行身份验证 —— JAAS 配置、SASL 配置
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • .Net - 类的介绍
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例