01.创建一个SpringAI的示例工程

一灰灰blogSpringAISpringSpringAI约 1104 字大约 4 分钟

01. 创建一个SpringAI的示例工程

下面介绍一下,如何快速借助官方的启动方式进行快速搭建一个用于体验SpringAI的示例工程

一、项目创建

https://spring.io/projects/spring-aiopen in new window

借助Spring官方提供的快速创建项目功能,创建一个SpringBoot项目,点击下面的连接进入快速创建Spring-Ai项目

在表格中,填写关键的信息(Group, Artifact, Name, Description, Version, PackageName)

二、项目初始化

将上面生成的工程,解压之后,导入IDEA开发工具,你会得到一个空的Spring项目

1. 配置账号信息

上面创建的默认是OpenAI(Chatgpt)的大模型访问,这个需要我们提前备好梯子和密钥,账号充值才能使用,只需要在applicatin.properties文件中添加密钥即可

spring.ai.openai.api-key=<your-openai-api-key>

出于安全考虑,可以通过配置环境变量的方式来配置密钥,如下

# In application.yml
spring:
  ai:
    openai:
      api-key: ${OPENAI_API_KEY}

然后设置环境变量

# In your environment or .env file
export OPENAI_API_KEY=<your-openai-api-key>

2. 使用免费的智普大模型体验

当然若条件不允许,我们可以考虑智普清言的免费大模型

替换依赖

<!-- 移除下面的依赖 -->
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-starter-model-openai</artifactId>
</dependency>

<!-- 替换为智普的依赖 -->
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-starter-model-zhipuai</artifactId>
</dependency>

在智普的开放平台获取密钥:https://open.bigmodel.cn/usercenter/proj-mgmt/apikeysopen in new window

然后在配置文件中,添加智普的密钥,并指定免费的大模型

在官网的定价中可以找到免费的模型:https://www.bigmodel.cn/pricingopen in new window

spring:
  ai:
    zhipuai:
      api-key: ${zhipuai-api-key}
      chat:
        options:
          model: GLM-4-Flash

3. 密钥注入方式

密钥除了直接再配置文件中写死之外,也可以通过前面介绍的环境变量的方式来注入,除此之外,下面介绍一种本地开发时命令行参数注入的方式

为了避免api-key的泄露,我们借助SpEL的方式来注入,通过在启动时,添加参数来设置apiKey,如下

  • 唤起编辑启动命令行窗口
  • 点击Modify options
  • 在弹窗中选中 Program arguments,然后会看到再启动类右边新增一个输入框
  • 再输入框中添加--spring.ai.zhipuai.api-key=<your-zhipuai-api-key>

说明:为什么不建议直接在配置文件中写密钥?

  • 因为非常容易泄露,本地测试时,最简单的当然是直接在配置文件中写密钥,但是当我们将项目推送到git时,很容易忘了将密钥删除,这样,密钥就泄露了(即便你后续发现了再删除,但是git的历史提交中依然能找到你的密钥,你就只能删除它了)

三、项目运行

再上面初始化完成之后,接下来我们写一个简单的Chat服务,用于体验与大模型对话的感觉

新建一个ChatController类,用于接收用户的提问,并返回模型生成的答案

@RestController
public class ChatController {

    private final ZhiPuAiChatModel chatModel;

    @Autowired
    public ChatController(ZhiPuAiChatModel chatModel) {
        this.chatModel = chatModel;
    }

    @GetMapping("/ai/generate")
    public Map generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        return Map.of("generation", chatModel.call(message));
    }

    @GetMapping("/ai/generateStream")
    public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        var prompt = new Prompt(new UserMessage(message));
        return chatModel.stream(prompt);
    }
}

上面分别提供同步/流式调用大模型两种方式,测试时,你可以选择任意一种方式

四、小结

从本文搭建的一个示例工程可以看出,借助SpringAI与大模型进行交互可以说是非常简单了,比基于db的CURD效率要高多了。相比起我们自己的实现(比如技术派的大模型调用就是手撸的代码直接实现与大模型交互),实在是轻松太多

文中所有代码可以在https://github.com/liuyueyi/spring-ai-demoopen in new window 获取

Loading...