使用 Spring AI Alibaba 集成阿里云百炼大模型应用
随着人工智能技术的飞速发展,大模型在各个领域的应用越来越广泛。阿里云百炼大模型提供了强大的语言理解和生成能力,但如何将其高效地集成到实际应用中,一直是开发者关注的焦点。本文将详细介绍如何使用 Spring AI Alibaba 集成阿里云百炼大模型应用,帮助开发者快速上手并实现功能。
一、前期准备
在开始集成之前,我们需要完成一些准备工作,以确保后续的开发过程顺利进行。
1. 获取 API Key
首先,你需要在阿里云控制台中获取 API Key。API Key 是用于认证和授权的关键信息,建议将其配置到环境变量中,以避免因硬编码导致的泄露风险。推荐使用 DASHSCOPE_API_KEY
作为环境变量名。
2. 创建阿里云百炼大模型应用
接下来,你需要创建一个阿里云百炼大模型应用。可以选择以下任一类型应用,并获取应用 ID,将应用 ID 配置到环境变量中,推荐使用 APP_ID
作为环境变量名。
- 智能体应用:适用于需要与用户进行交互的场景。
- 工作流应用:适用于需要按照固定流程处理任务的场景。
- 智能体编排应用:适用于需要自动规划复杂项目的场景。
如果是在子业务空间创建的阿里云百炼大模型应用,还需要获取业务空间 ID,并将其配置到环境变量中,推荐使用 WORKSPACE_ID
作为环境变量名。
二、操作流程
1. 初始化 Spring Boot 工程
环境要求
- Spring Boot 3.x:确保使用最新版本的 Spring Boot,以获得更好的性能和兼容性。
- JDK 17 或更高版本:推荐使用 JDK 17 或更高版本,以支持最新的 Java 特性。
初始化方式
你可以选择以下两种方式之一来初始化 Spring Boot 工程:
- 下载完整的示例工程快速上手(推荐):访问 bailian-agent 仓库,下载完整的示例工程代码到本地。下载完成后,跳转到步骤 3 配置参数,然后执行步骤 5 启动 Spring Boot 工程并测试。
- 从零开始搭建基础工程:如果你希望从头开始搭建工程,可以按照后续步骤依次执行。
2. 添加依赖
在 pom.xml
文件中配置 Spring AI Alibaba 依赖。以下是具体的依赖配置代码:
<dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter</artifactId><version>1.0.0-M5.1</version>
</dependency>
3. 配置参数
在 application.yml
文件中配置阿里云百炼大模型应用 ID、API Key 和业务空间 ID(仅在子业务空间创建百炼大模型应用时需要)。以下是具体的配置代码:
spring:ai:dashscope:agent:app-id: ${APP_ID} # 大模型应用IDapi-key: ${DASHSCOPE_API_KEY} # 百炼API Key#workspace-id: ${WORKSPACE_ID} # 业务空间ID,可选,未配置时使用主账号空间
4. 调用阿里云百炼大模型应用
Spring AI Alibaba 使用 DashScopeAgent
调用阿里云百炼大模型应用。以下是两种调用方式的代码示例:
非流式调用
import com.alibaba.cloud.ai.dashscope.agent.DashScopeAgent;
import com.alibaba.cloud.ai.dashscope.agent.DashScopeAgentOptions;
import com.alibaba.cloud.ai.dashscope.api.DashScopeAgentApi;import org.springframework.ai.chat.messages.AssistantMessage;
import org.springframework.ai.chat.model.ChatResponse;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;@RestController
@RequestMapping("/ai")
public class BailianAgentRagController {private static final Logger logger = LoggerFactory.getLogger(BailianAgentRagController.class);private DashScopeAgent agent;@Value("${spring.ai.dashscope.agent.app-id}")private String appId;public BailianAgentRagController(DashScopeAgentApi dashscopeAgentApi) {this.agent = new DashScopeAgent(dashscopeAgentApi);}@GetMapping("/bailian/agent/call")public String call(@RequestParam(value = "message",defaultValue = "如何使用SDK快速调用阿里云百炼的应用?") String message) {ChatResponse response = agent.call(new Prompt(message, DashScopeAgentOptions.builder().withAppId(appId).build()));if (response == null || response.getResult() == null) {logger.error("chat response is null");return "chat response is null";}AssistantMessage app_output = response.getResult().getOutput();return app_output.getContent();}
}
4. 调用阿里云百炼大模型应用(续)
流式调用
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import reactor.core.publisher.Flux;@RestController
@RequestMapping("/ai")
public class BailianAgentRagStreamController {private static final Logger logger = LoggerFactory.getLogger(BailianAgentRagStreamController.class);private DashScopeAgent agent;@Value("${spring.ai.dashscope.agent.app-id}")private String appId;public BailianAgentRagStreamController(DashScopeAgentApi dashscopeAgentApi) {this.agent = new DashScopeAgent(dashscopeAgentApi,DashScopeAgentOptions.builder().withSessionId("current_session_id").withIncrementalOutput(true).withHasThoughts(true).build());}@GetMapping(value = "/bailian/agent/stream", produces = "text/event-stream")public Flux<String> stream(@RequestParam(value = "message",defaultValue = "你好,请问你的知识库文档主要是关于什么内容的?") String message) {return agent.stream(new Prompt(message, DashScopeAgentOptions.builder().withAppId(appId).build())).map(response -> {if (response == null || response.getResult() == null) {logger.error("chat response is null");return "chat response is null";}AssistantMessage app_output = response.getResult().getOutput();String content = app_output.getContent();return content;});}
}
5. 启动 Spring Boot 工程并测试
完成上述配置和代码编写后,就可以启动 Spring Boot 工程并进行测试了。你可以使用 Postman 或其他 HTTP 客户端工具来发送请求,验证是否能够成功调用阿里云百炼大模型应用。
以下是使用 Postman 测试的示例:
- 打开 Postman,创建一个新的 GET 请求。
- 在请求的 URL 中输入
http://localhost:8080/ai/bailian/agent/call?message=你的测试问题
,用于测试非流式调用。 - 点击“Send”按钮,查看返回的结果。
- 同样地,你可以将 URL 改为
http://localhost:8080/ai/bailian/agent/stream?message=你的测试问题
,用于测试流式调用。
如果一切正常,你将看到阿里云百炼大模型返回的响应内容。
三、计费说明
在使用阿里云百炼大模型应用时,需要注意计费问题。百炼应用本身不收取费用,但通过应用调用模型时会产生模型推理(调用)的相关费用。具体的费用详情可以参考阿里云官方文档中的 计费项。
四、错误码
在调用过程中,可能会遇到一些错误。通用错误码信息可以参考阿里云官方文档中的 错误信息。
五、了解更多
- Spring AI Alibaba:提供了丰富的文档教程、实战博客和开发者社区,帮助你快速开发 Java 生成式 AI 应用。
- 应用调用:提供了详细的接口说明与调用示例,方便你更好地理解和使用阿里云百炼大模型应用。
通过以上步骤,你已经成功地使用 Spring AI Alibaba 集成了阿里云百炼大模型应用。希望这篇技术博客能够帮助你更好地理解和应用这一强大的技术。如果你在开发过程中遇到任何问题,欢迎随时查阅阿里云官方文档或在开发者社区中寻求帮助。