使用Spring AI和大预言模型交互Helloworld篇

本文演示如何使用 Spring AI 框.

本文演示如何使用 Spring AI 框架与大型语言模型 (LLM) 进行基本的交互

前提条件:

  • 安装了 JDK 17 或更高版本。
  • 安装了 Maven。
  • 熟悉 Spring Boot 框架的基本概念。
  • 一个OpenAI API Key (或一个兼容OpenAI API的替代方案,比如OpenRouter)

强调: Spring Boot版本至少是3.4

Maven 配置

pom.xml 文件中添加以下依赖项:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.5.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>org.example</groupId>
    <artifactId>java-ai</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>java-ai</name>
    <description>java-ai</description>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-client-chat</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-starter-model-openai</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.ai</groupId>
                <artifactId>spring-ai-bom</artifactId>
                <version>1.0.0-SNAPSHOT</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <releases>
                <enabled>false</enabled>
            </releases>
        </repository>
        <repository>
            <name>Central Portal Snapshots</name>
            <id>central-portal-snapshots</id>
            <url>https://central.sonatype.com/repository/maven-snapshots/</url>
            <releases>
                <enabled>false</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>

</project>

说明:

  • spring-boot-starter-web: 提供构建 Web 应用程序所需的依赖项,包括 Spring MVC 和嵌入式 Tomcat 服务器。
  • spring-ai-client-chat: 提供 Spring AI 框架的核心 Chat Client API。
  • spring-ai-starter-model-openai: 提供与 OpenAI 模型集成的启动器依赖项。 这个依赖项简化了与 OpenAI 服务的连接配置。
  • spring-ai-bom: Spring AI 的 Bill of Materials (BOM) 文件,用于管理 Spring AI 相关依赖项的版本。 它确保所有 Spring AI 依赖项都使用兼容的版本。

Spring 配置

application.propertiesapplication.yml 文件中添加以下配置:

spring.application.name=java-ai

# 使用openrouter提供的大预言模型
spring.ai.openai.api-key=${API_KEY:sk-or-v1-xxxxx}
spring.ai.openai.base-url=https://openrouter.ai/api
spring.ai.openai.chat.options.model=deepseek/deepseek-chat-v3-0324:free
spring.ai.openai.chat.options.max-tokens=32768
spring.ai.openai.chat.options.temperature=0.2

说明:

  • spring.application.name: 设置应用程序的名称。
  • spring.ai.openai.api-key: 设置 OpenAI API 密钥. 请务必将 sk-or-v1-17-xxxxx 替换为您自己的 OpenAI API 密钥,或者使用环境变量 ${API_KEY} 来注入密钥,这样可以提高安全性,避免密钥泄露。
  • spring.ai.openai.base-url: 设置OpenRouter API的地址。
  • spring.ai.openai.chat.options.model: 指定要使用的 OpenAI 模型。 deepseek/deepseek-chat-v3-0324:free 是一个示例模型,您可以根据需要更改为其他支持的模型。
  • spring.ai.openai.chat.options.max-tokens: 设置模型生成响应的最大 token 数量。 32768 是一个示例值,您可以根据需要调整。
  • spring.ai.openai.chat.options.temperature: 设置模型生成响应的温度。 温度越高,响应越随机;温度越低,响应越确定。 0.2 是一个示例值,您可以根据需要调整。

Controller 代码

创建一个名为 HelloAiController.java 的文件,并添加以下代码:

package org.example.ai.controller;

import org.springframework.ai.openai.OpenAiChatModel;
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;

import java.util.Map;

@RestController
public class HelloAiController {

    private final OpenAiChatModel chatModel;

    @Autowired
    public HelloAiController(OpenAiChatModel chatModel) {
        this.chatModel = chatModel;
    }

    @GetMapping("/ai/generate")
    public Map<String,String> generate(@RequestParam(value = "message", defaultValue = "讲一个关于小姐姐的笑话") String message) {
        return Map.of("generation", this.chatModel.call(message));
    }
}

说明:

  • @RestController: 指示这是一个 REST 控制器,用于处理传入的 HTTP 请求。
  • @Autowired: 自动注入 OpenAiChatModel 实例。 Spring 会自动查找并注入实现了 OpenAiChatModel 接口的 bean。
  • @GetMapping("/ai/generate"): 将 /ai/generate 路径映射到 generate 方法。
  • @RequestParam(value = "message", defaultValue = "讲一个关于小姐姐的笑话"): 从请求参数中获取 message 的值。 如果请求中没有 message 参数,则使用默认值 “讲一个关于小姐姐的笑话”。
  • chatModel.call(message): 调用 OpenAI 模型,将 message 作为提示发送给模型,并返回模型的响应。
  • Map.of("generation", this.chatModel.call(message)): 将模型的响应封装到一个 Map 对象中,键为 “generation”,值为模型的响应。

测试效果

  1. 启动 Spring Boot 应用程序。
  2. 使用浏览器或 curl 等工具访问以下 URL:http://127.0.0.1:8080/ai/generate

您应该会看到类似以下的响应:

您可以通过在 URL 中添加 message 参数来更改提示:

http://127.0.0.1:8080/ai/generate?message=介绍一下北京

源码地址:

https://github.com/wendydefather/spring-ai-helloworld

https://pan.quark.cn/s/7c5b72ee2197

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注