【大模型】Spring AI Alibaba 对接百炼平台大模型使用详解

目录

一、前言

二、Spring AI概述

2.1 spring ai是什么

2.2 Spring AI 核心能力

2.3 Spring AI 应用场景

三、Spring AI Alibaba 介绍

3.1 Spring AI Alibaba 是什么

3.2 Spring AI Alibaba 核心特点

3.3 Spring AI Alibaba 应用场景

四、SpringBoot 对接Spring AI Alibaba 过程

4.1 前置准备

4.1.1 获取apikey

4.1.2 引入必要的依赖

4.1.3 配置文件添加apikey

4.2 通义对话大模型对接

4.2.1 添加测试对话接口

4.2.2 效果测试

4.3 文生图模型能力

4.3.1 Java HTTP 方式对接

4.3.2 SDK方式对接

五、阿里云百炼大模型平台使用

5.1 前置准备

5.1.1 登录平台

5.1.2 获取apikey

5.1.3 开通大模型服务

5.2 在线体验大模型能力

5.2.1 在线使用大模型对话能力

5.2.2 http方式调用大模型对话能力

5.3 Java http方式调用大模型能力

5.3.1 文本输入对话能力

5.3.2 图像输入与理解能力

5.3.3 文档理解能力

六、写在文末


一、前言

随着各大厂商都在大模型领域布局,各种编程语言也在积极降低对接大模型的成本,可以肯定的是,在大模型能力和生态渐臻完善的情况下,接下来就是在应用层的接入、商用和市场化进程,基于此,以Java生态spring框架为例,也在去年推出spring ai,基于spring ai 可以快速对接chatgpt模型,也可以对接主流厂商的大模型,本文以spring ai alibaba为例进行详细的说明。

二、Spring AI概述

2.1 spring ai是什么

Spring AI是一个人工智能工程的应用框架。它的目标是将Spring生态系统的设计原则(如可移植性和模块化设计)应用于人工智能领域,并推广使用POJO作为人工智能领域应用程序的构建块。

官网地址:Spring AI

使用 **Spring Boot + Spring AI** 快速对接阿里巴巴的通义千问(Qwen)大模型,目前官方 Spring AI 尚未内置对阿里 `DashScope` 的支持模块,但你可以通过以下方式实现: ✅ **推荐方案:基于 Spring AI 标准接口封装一个 Qwen 客户端**,实现与通义千问 API 的对接。这种方式结构清晰、可维护性强,并且完全兼容 Spring 生态。 --- ### ✅ 第一步:环境准备 #### 1. 获取阿里云 DashScope API Key 前往 [https://dashscope.console.aliyun.com/](https://dashscope.console.aliyun.com/) - 登录后进入「密钥管理」 - 创建或复制你的 `API Key` #### 2. 选择模型名称 常用模型: - `qwen-turbo`:响应快,适合简单任务(如客服问答) - `qwen-plus`:性能均衡 - `qwen-max`:强推理能力,接近 GPT-4 水平 --- ### ✅ 第二步:创建 Spring Boot 项目并添加依赖 ```xml <dependencies> <!-- Spring Boot Web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Spring AI Core --> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-core</artifactId> <version>0.8.1</version> </dependency> <!-- JSON 处理 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> </dependencies> ``` > ⚠️ 版本要求: > - Java 17+ > - Spring Boot 3.1+ > - Spring AI 0.8.x(支持 LLM 抽象) --- ### ✅ 第三步:编写配置文件 `application.yml` ```yaml server: port: 8080 qwen: api-key: YOUR_DASHSCOPE_API_KEY_HERE # 替换为真实 KEY model: qwen-turbo # 可选:qwen-plus, qwen-max endpoint: https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation ``` --- ### ✅ 第四步:定义通义千问客户端(实现 Spring AI 的 ChatClient) ```java import org.springframework.ai.chat.ChatClient; import org.springframework.ai.chat.ChatResponse; import org.springframework.ai.chat.Generation; import org.springframework.ai.chat.messages.Message; import org.springframework.ai.chat.messages.UserMessage; import org.springframework.ai.chat.prompt.Prompt; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; import org.springframework.http.*; import java.util.Collections; @Component public class QwenChatClient implements ChatClient { private final RestTemplate restTemplate = new RestTemplate(); @Value("${qwen.api-key}") private String apiKey; @Value("${qwen.model}") private String model; @Value("${qwen.endpoint}") private String endpoint; @Override public ChatResponse call(Prompt prompt) { // 提取用户输入内容 String userContent = extractUserMessage(prompt); // 构建请求体 RequestBody request = new RequestBody(); request.setModel(model); request.setInput(new Input(Collections.singletonList( new Input.Message("user", userContent) ))); request.setParameter(new Parameter()); // 设置请求头 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); headers.set("Authorization", "Bearer " + apiKey); HttpEntity<RequestBody> entity = new HttpEntity<>(request, headers); try { ResponseEntity<ResponseData> response = restTemplate.exchange( endpoint, HttpMethod.POST, entity, ResponseData.class); String resultText = response.getBody().getOutput().getText(); return new ChatResponse(new Generation(resultText)); } catch (Exception e) { throw new RuntimeException("调用通义千问失败: " + e.getMessage(), e); } } private String extractUserMessage(Prompt prompt) { return prompt.getInstructions().stream() .filter(m -> m instanceof UserMessage) .map(Message::getContent) .findFirst() .orElseThrow(() -> new IllegalArgumentException("未提供有效的用户消息")); } // --- 数据传输对象 DTO --- static class RequestBody { private String model; private Input input; private Parameter parameter; public String getModel() { return model; } public void setModel(String model) { this.model = model; } public Input getInput() { return input; } public void setInput(Input input) { this.input = input; } public Parameter getParameter() { return parameter; } public void setParameter(Parameter parameter) { this.parameter = parameter; } } static class Input { private java.util.List<Message> messages; public Input(java.util.List<Message> messages) { this.messages = messages; } static class Message { private String role; private String content; public Message(String role, String content) { this.role = role; this.content = content; } public String getRole() { return role; } public void setRole(String role) { this.role = role; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } } public java.util.List<Message> getMessages() { return messages; } } static class Parameter { private double temperature = 0.7; private int max_tokens = 512; // 默认参数,也可从配置注入 } static class ResponseData { private Output output; public Output getOutput() { return output; } static class Output { private String text; public String getText() { return text; } public void setText(String text) { this.text = text; } } } } ``` --- ### ✅ 第五步:编写业务接口(例如生成商品描述) ```java import org.springframework.ai.chat.ChatClient; import org.springframework.ai.chat.messages.UserMessage; import org.springframework.ai.chat.prompt.Prompt; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class ProductDescriptionController { @Autowired private ChatClient chatClient; /** * 自动生成商品营销文案 */ @GetMapping("/ai/product-desc") public String generateDesc( @RequestParam String name, @RequestParam String features) { String instruction = String.format( "你是一个电商文案专家,请为商品 '%s' 写一段不超过80字的中文促销语,突出其特点:%s", name, features); Prompt prompt = new Prompt(new UserMessage(instruction)); return chatClient.call(prompt).getResult().getOutput().getContent(); } } ``` --- ### ✅ 第六步:启动应用并测试 运行主类: ```java @SpringBootApplication public class QwenApplication { public static void main(String[] args) { SpringApplication.run(QwenApplication.class, args); } } ``` 访问测试 URL: ```bash GET http://localhost:8080/ai/product-desc?name=降噪蓝牙耳机&features=主动降噪,续航30小时,高清音质 ``` 返回示例: > “沉浸式静谧体验!主动降噪技术隔绝喧嚣,30小时持久续航,搭配高清音质,通勤出行更享受。” ✅ 成功接入! --- ### ✅ 优势总结 | 特性 | 实现效果 | |------|----------| | 使用标准 Spring AI 接口 | 后续可无缝切换 OpenAI / 百度文心一言等 | | 低耦合高内聚 | 修改模型只需改配置 | | 易于扩展 | 支持流式输出、多轮对话、提示词模板等 | | 适用于电商场景 | 文案生成、智能客服、搜索增强 | ---
评论 208
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小码农叔叔

谢谢鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值