使用 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 依赖。以下是具体的依赖配置代码:

xml 复制代码
<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(仅在子业务空间创建百炼大模型应用时需要)。以下是具体的配置代码:

yaml 复制代码
spring:
  ai:
    dashscope:
      agent:
        app-id: ${APP_ID} # 大模型应用ID
      api-key: ${DASHSCOPE_API_KEY} # 百炼API Key
      #workspace-id: ${WORKSPACE_ID} # 业务空间ID,可选,未配置时使用主账号空间

4. 调用阿里云百炼大模型应用

Spring AI Alibaba 使用 DashScopeAgent 调用阿里云百炼大模型应用。以下是两种调用方式的代码示例:

非流式调用
java 复制代码
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. 调用阿里云百炼大模型应用(续)

流式调用
java 复制代码
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 测试的示例:

  1. 打开 Postman,创建一个新的 GET 请求。
  2. 在请求的 URL 中输入 http://localhost:8080/ai/bailian/agent/call?message=你的测试问题,用于测试非流式调用。
  3. 点击"Send"按钮,查看返回的结果。
  4. 同样地,你可以将 URL 改为 http://localhost:8080/ai/bailian/agent/stream?message=你的测试问题,用于测试流式调用。

如果一切正常,你将看到阿里云百炼大模型返回的响应内容。

三、计费说明

在使用阿里云百炼大模型应用时,需要注意计费问题。百炼应用本身不收取费用,但通过应用调用模型时会产生模型推理(调用)的相关费用。具体的费用详情可以参考阿里云官方文档中的 计费项

四、错误码

在调用过程中,可能会遇到一些错误。通用错误码信息可以参考阿里云官方文档中的 错误信息

五、了解更多

  • Spring AI Alibaba:提供了丰富的文档教程、实战博客和开发者社区,帮助你快速开发 Java 生成式 AI 应用。
  • 应用调用:提供了详细的接口说明与调用示例,方便你更好地理解和使用阿里云百炼大模型应用。

通过以上步骤,你已经成功地使用 Spring AI Alibaba 集成了阿里云百炼大模型应用。希望这篇技术博客能够帮助你更好地理解和应用这一强大的技术。如果你在开发过程中遇到任何问题,欢迎随时查阅阿里云官方文档或在开发者社区中寻求帮助。

相关推荐
MARS_AI_10 分钟前
云蝠智能 Voice Agent 落地展会邀约场景:重构会展行业的智能交互范式
人工智能·自然语言处理·重构·交互·语音识别·信息与通信
weixin_4224564443 分钟前
第N7周:调用Gensim库训练Word2Vec模型
人工智能·机器学习·word2vec
山海上的风3 小时前
Spring Batch终极指南:原理、实战与性能优化
spring·性能优化·batch·springbatch
HuggingFace4 小时前
Hugging Face 开源机器人 Reachy Mini 开启预定
人工智能
找不到、了4 小时前
Spring的Bean原型模式下的使用
java·spring·原型模式
企企通采购云平台5 小时前
「天元宠物」×企企通,加速数智化升级,“链”接萌宠消费新蓝海
大数据·人工智能·宠物
超级小忍5 小时前
Spring AI ETL Pipeline使用指南
人工智能·spring
张较瘦_5 小时前
[论文阅读] 人工智能 | 读懂Meta-Fair:让LLM摆脱偏见的自动化测试新方法
论文阅读·人工智能
巴伦是只猫6 小时前
【机器学习笔记 Ⅲ】4 特征选择
人工智能·笔记·机器学习
好心的小明6 小时前
【王树森推荐系统】召回11:地理位置召回、作者召回、缓存召回
人工智能·缓存·推荐系统·推荐算法