借用Spring AI Alibaba 10分钟带你快速搭建ChatGPT应用

306 阅读3分钟

前言

AI 大爆发后,人工智能已成为常态。Java 的 Spring 社区推出了 Spring AI 项目,该项目已集成 OpenAI 的 API,如此一来,无需开发者自行实现向 OpenAI 发送请求与接收响应的交互程序,只需调用 Spring AI 提供的接口即可。
然而,OpenAI 的 key 并非免费,且其为国外服务,在使用时速度会受到一定影响。鉴于此,可选择使用(Spring AI Alibaba)。
Spring AI Alibaba 是基于 Spring AI 构建的开源项目,是阿里云通义系列模型及服务在 Java AI 应用开发领域的最佳实践。基于此,我们使用他来快速开发ChatGPT应用。

image.png

项目搭建

本文通过使用Spring AI Alibaba带你10分钟完成搭建ChatGPT应用。

项目准备(7分钟)

  1. 开发工具:IDEA
  2. JDK>=17
  3. 获取KEY
  4. 构建Spring Boot项目

获取KEY

开发工具和JDK应该都是程序员都有的了,这里我说一下怎么获取Key。
通过阿里的大模型服务平台百炼平台,开启服务后,点击右上角【我的】获取API-KEY复制。

image.png

构建项目

接着创建Spring Boot项目,jdk17,版本选择3.x版本。一定要使用jdk17以上版本,17以下会报错版本过低。

image.png

创建完成后,配置pom文件,导入依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba.cloud.ai</groupId>
        <artifactId>spring-ai-alibaba-starter</artifactId>
        <version>1.0.0-M3.1</version>
    </dependency>
</dependencies>
<repositories>
    <repository>
        <id>spring-milestones</id>
        <name>Spring Milestones</name>
        <url>https://repo.spring.io/milestone</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>

刷新maven,等待下载完毕。再在我们的application中配置好我们从阿里获取到的KEY。

spring:
  application:
    name: springai_alibaba
  ai:
    dashscope:
      api-key: sk-***

代码编写(3分钟)

简单的对话

Spring AI Alibaba可以非常简便的完成GPT服务的调用,这里创建一个ChatGPTController,完成同步和流式两种方式对话的返回。

@RestController
public class ChatGptController
{

    private final ChatClient chatClient;
    public ChatGptController(ChatClient.Builder builder) {
        this.chatClient = builder
                .build();
    }

    /**
     * 同步API
     */
    @RequestMapping("/ai/chatgpt")
    public String chatgptDemo(@RequestParam("message") String message)
    {
        return this.chatClient.prompt()
                .user(message)
                .call()
                .content();
    }

    /**
     * 流式API
     */
    @RequestMapping(value = "/ai/stream",produces = "text/html;charset=utf-8")
    public Flux<String>  flux(@RequestParam("message")String message) {
        return chatClient.prompt()
                .user(message)
                .stream()
                .content();
    }
}

编写完成后,启动项目,访问localhost:8080/ai/stream?message=你的问题进行测试。

image.png

添加人设

Spring AI Alibaba 不止提供了以上原子能力抽象,还提供了高阶 “智能体” API 抽象 ChatClient,让我们可以非常方便的使用流式 Fluent API 把多个组件组装起来,成为一个智能体 Agent。
通过在初始化ChatClient 时我们给可以给GPT添加人设信息。

private final ChatClient chatClient;
public ChatGptController(ChatClient.Builder builder) {
    this.chatClient = builder
            .defaultSystem("你是火车票小助手\n" +
                    "极其严谨认真,对每一个火车票相关的信息和规定都了如指掌,无论是车次时刻表、票价规则还是购票流程等,都能准确无误地提供详细解答。\n" +
                    "冷静沉稳,面对用户的各种焦急询问,始终保持平和的心态,有条不紊地处理问题,给用户带来安心感。\n" +
                    "技能与职责:\n" +
                    "能迅速查询到全国范围内任意两站之间的所有可行车次信息,包括高铁、动车、普速列车等不同类型车次的具体时刻表、余票情况等。\n" +
                    "详细解读各类火车票票价政策,如儿童票、学生票、军人票等特殊票种的购票条件和优惠方式。\n" +
                    "全程指导用户完成购票、改签、退票等操作流程,确保每一个步骤都准确无误,避免用户因操作不当而产生损失。\n" +
                    "及时关注铁路部门的最新通知和政策变化,并第一时间将相关信息传达给用户。")
            .build();
}

效果如下:

image.png

其他功能

以上就是Spring AI Alibaba的基本功能,更多其他高级的功能可以参考它的官方文档核心概念-阿里云Spring Cloud Alibaba官网,我们下期活动再见。