阿里推出Spring Cloud Alibaba AI,接入体验篇——Java也能方便用 AI
- 1.Spring AI
- 2.Spring Cloud Alibaba AI
- 3. 接入体验
1.Spring AI
Spring AI 是 Spring 官方社区项目,旨在简化 Java AI 应用程序开发,让 Java 开发者像使用 Spring 开发普通应用一样开发 AI 应用。
Spring AI 的灵感来自著名的 Python 项目,如 LangChain 和 LlamaIndex,但 Spring AI 并不是这些项目的直接移植复制。Spring AI 的思想是:下一波 Generative AI 生成式应用程序将不仅面向 Python 开发人员,而且将在许多编程语言中无处不在
。
Spring AI提供四大方向:
- 提供抽象能力
- 简化AI应用的开发
- 模型与向量支持
- AI集成与自动配置
Spring AI 的核心是提供抽象,作为开发 Java AI 应用程序的基础,提供以下功能:
-
提供多种大模型服务对接能力,包括业界大多数主流大模型服务等,如OpenAI,Microsoft,Amazon,Google和Huggingface;
-
将 AI 模型输出映射到 POJO,支持灵活的 Prompt Template 和模型输出解析 Output Parsing 能力;
-
支持多模态的生成式 AI 能力,如对话,文生图、文生语音等;
-
提供跨AI提供商通用的可移植的 API 以访问各类模型服务和 Embedding 服务,支持同步和流式调用,同时也支持传递特定模型的定制参数;
-
支持 RAG 能力的基础组件,包括 DocumentLoader、TextSpillter、EmobeddingClient、VectorStore 等;
-
支持AI 模型和矢量存储的 AI Spring Boot Starter 实现配置自动装配;
-
跨 Vector Store 提供程序的可移植 API,包括新颖的类似 SQL 的元数据过滤器 API,该 API 也是可移植的。
-
用于数据工程的 ETL 框架
2.Spring Cloud Alibaba AI
Spring Cloud Alibaba AI 以 Spring AI 为基础,并在此基础上提供阿里云通义系列大模型全面适配,让用户在 5 分钟内开发基于通义大模型的 Java 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)
3. 接入体验
基于官方文档进行接入体验!https://sca.aliyun.com/docs/2023/user-guide/ai/quick-start/
1.新建一个Maven项目,JDK选的是17版本。
Maven文件需要引入spring-cloud-alibaba-dependencies和spring-cloud-starter-alibaba-ai两个依赖。
<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>
2.配置阿里云通义千问的Api-Key,没有可以从官网上申请:
server:port: 8080
spring:application:name: spring-cloud-alibaba-ai-democloud:ai:tongyi:api-key: 你的api-key
3.编写聊天服务实现类(文本大模型为例)
(1)创建一个Controller类,新建/simple接口,用来测试基本的问答:
@RestController
@RequestMapping("/ai")
@CrossOrigin
public class TongYiController {@Autowired@Qualifier("tongYiSimpleServiceImpl")private TongYiService tongYiSimpleService;/*** 文本生成* @param message* @return*/@GetMapping("/example")public String completion(@RequestParam(value = "message", defaultValue = "你是谁")String message) {return tongYiSimpleService.completion(message);}
(2)新建一个TongYiService服务类:
public interface TongYiService {/***文本模型调用* @param message 问题.* @return AI answer.*/String completion(String message);
...
}
(4)具体的实现类如下:由 Spring AI 自动注入 ChatClient、StreamingChatClient,ChatClient 屏蔽底层通义大模型交互细节,后者用于流式调用。
对于文本模型问答而言,仅通过client.call(prompt)
一行代码就可以完成对模型的调用:
@Slf4j
@Service
public class TongYiSimpleServiceImpl extends AbstractTongYiServiceImpl {private static final Logger logger = LoggerFactory.getLogger(TongYiService.class);//自动注入ChatClient屏蔽模型调用细节 private final ChatClient chatClient;//自动注入StreamingChatClient屏蔽模型调用细节,StreamingChatClient用于流式调用private final StreamingChatClient streamingChatClient;@Autowiredpublic TongYiSimpleServiceImpl(ChatClient chatClient, StreamingChatClient streamingChatClient) {this.chatClient = chatClient;this.streamingChatClient = streamingChatClient;}/*** 模型回答* @param message 问题.* @return*/@Overridepublic String completion(String message) {// 创建提问的PromptPrompt prompt = new Prompt(new UserMessage(message));// 调用模型return chatClient.call(prompt).getResult().getOutput().getContent();}
}
(5)发送一个请求,prompt是"你是谁",测试结果如下:
验证应用效果:
方式一:使用apipost或postman来请求响应;
方式二:复制官方代码下的resources/static,进入resources/static,运行index.html,进入web进行交互。
申请通义API-KEY
(按量收费)
为使示例能够正常接入通义大模型,需要在阿里云开通 DashScope 灵积模型服务,申请有效的 API-KEY 并更新到应用配置文件。具体操作步骤可参见如下文档:
https://help.aliyun.com/zh/dashscope/developer-reference/activate-dashscope-and-create-an-api-key
新用户会有免费额度: