本文基于官方文档。
Spring AI
官方文档:Spring AI :: Spring AI Reference
中文文档:Spring AI 简介 - spring 中文网 (springdoc.cn)
Spring AI 是 Spring 官方社区项目,旨在简化 Java AI 应用程序开发,让 Java 开发者像使用 Spring 开发普通应用一样开发 AI 应用。Spring 框架通过 Spring AI 项目正式发布了对生成式 AI 应用开发的支持。
核心概念
AiClient(接口)
Spring AI 最初专注于处理语言输入和生成语言输出的模型。该项目的理念是为开发人员提供一个抽象接口,为将生成式 AI 作为独立组件纳入应用奠定基础。接口 AiClient 就是这样一个抽象,它有两个基本实现:OpenAI 和 Azure OpenAI。
public interface AiClient {default String generate(String message);AiResponse generate(Prompt prompt);
}
Prompt(提示)
在 AI 领域,Prompt(提示)是指提供给 AI 的文本信息。它由上下文和问题组成,该模型用于生成答案。 从 Spring AI 项目的角度来看,Prompt 是一个参数化 Message 列表。
public class Prompt {private final List<Message> messages;// 构造函数和其他方法
}public interface Message {String getContent();Map<String, Object> getProperties();MessageType getMessageType();
}
AiResponse(响应)
AiResponse 由 Generation(生成)对象列表组成,每个对象都包含来自相应 Prompt(提示)的输出。此外,Generation 对象还提供 AI 响应的元数据信息。
public class AiResponse {private final List<Generation> generations;// Get 和 Set
}public class Generation {private final String text;private Map<String, Object> info;
}
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 等实用能力。
下面将通过一个示例来演示以下如何使用。
申请API-KEY
查看官方文档,按照提示去申请:
如何开通DashScope并创建API-KEY_模型服务灵积(DashScope)-阿里云帮助中心 (aliyun.com)
创建项目
引入依赖
<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>
仓库配置
仓库配置则是针对项目中特定的依赖或插件需求,明确指定了获取的来源,包括各种类型的Spring框架版本(里程碑或快照)。
<!-- 官方文档并没有提到要引入下面 配置Maven项目中的两个仓库如果不引入,无法下载 spring-ai-core:0.8.1 --><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>
镜像配置
把本地的setting.xml中的镜像部分修改一下。
镜像配置决定了整体项目依赖项和插件的获取策略,指定了主要的镜像地址和排除的特定仓库。
<mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central,!spring-milestones,!spring-snapshots</mirrorOf> </mirror>
!spring-milestones 和 !spring-snapshots 表示排除 Spring 框架的里程碑版本和快照版本仓库。
配置文件
server:port: 10010
spring:application:name: spring-cloud-alibaba-aicloud:ai:tongyi:api-key: 刚才申请的api-key
代码部分
把官方的代码拉取即可。这里我们用的是一个项目来使用Spring Cloud Alibaba AI,官方是用的子项目,所以需要注意以下pom文件的内容。
https://github.com/alibaba/spring-cloud-alibaba/tree/26d483d7220cdfc23c33e40c6204fdf3f5561ef9/spring-cloud-alibaba-examples/spring-cloud-ai-example
启动测试
测试一下画图
测试一下聊天