Spring实战spring-ai运行

目录

[1. 配置](#1. 配置)

[2 .搭建项目](#2 .搭建项目)

[3. 查看对应依赖](#3. 查看对应依赖)

[3.1 OpenAI 依赖](#3.1 OpenAI 依赖)

[3.2 配置 OpenAI API 密钥](#3.2 配置 OpenAI API 密钥)

application.properties

application.yml

[4. openai实战](#4. openai实战)

[5. 运行和测试](#5. 运行和测试)

[6. 高级配置](#6. 高级配置)

示例:配置模型和参数

解释:

[7. 处理异常和错误](#7. 处理异常和错误)

示例:全局异常处理

8.监控和日志

示例:添加日志

9.性能优化

示例:异步调用

总结


1. 配置

  • Project:Maven

  • Language:Java

  • SpringBoot:3.4.3

  • Dependencies:

    • Spring Web

    • Spring Boot DevTools(可选,用于开发热部署)

2 .搭建项目

idea里面选择File->New-Project

选择SpringBoot 项目,Language选择java,type选择Maven

Jdk选择对应的版本最低使用17,packaging类型根据自身部署习惯选择jar或者war都可以

选择完成后会跳转如下界面,选择AI,OpenAI勾选即可。

至此项目搭建完成

3. 查看对应依赖

3.1 OpenAI 依赖

java 复制代码
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
    <version>1.0.0-M6</version>
</dependency>

3.2 配置 OpenAI API 密钥

在 application.properties 或 application.yml 中配置 OpenAI 的 API 密钥。

application.properties

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

application.yml

spring:
ai:
openai:
api-key: your-openai-api-key

4. openai实战

创建一个服务类来封装与 OpenAI 的交互逻辑

java 复制代码
public class ChatAiController {

    private static final Logger log = LogManager.getLogger(ChatAiController.class);
    private final ChatClient chatClient;

    public ChatAiController(ChatClient.Builder build) {
       
       this.chatClient = build.defaultSystem("测试")
                .build();
    }

    @GetMapping("/chat")
    public String chatAI(@RequestParam(value = "message") String message){
        System.out.println(this.chatClient.prompt()
                .user(message)
                .call()
                .content());
        return this.chatClient.prompt()
                .user(message)
                .call()
                .content();
    }
}

5. 运行和测试

启动 Spring Boot 应用程序,并通过 API 端点测试 OpenAI 功能

请求示例:

GET /chat?message=Hello, how are you?

响应示例:

"I'm just a computer program, so I don't have feelings, but thanks for asking! How can I assist you today?"

6. 高级配置

Spring AI 提供了多种配置选项,可以根据需求调整 OpenAI 的行为。

示例:配置模型和参数
解释:
  • model:指定使用的模型,如 gpt-3.5-turbo 或 gpt-4。

  • temperature:控制生成文本的随机性(0 到 1 之间,值越高越随机)。

  • max-tokens:限制生成文本的最大长度。

7. 处理异常和错误

在实际应用中,处理 API 调用中的异常和错误是非常重要的。你可以使用 Spring 的异常处理机制来捕获和处理这些异常

示例:全局异常处理
java 复制代码
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.http.ResponseEntity;
import org.springframework.http.HttpStatus;

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleException(Exception ex) {
        return new ResponseEntity<>("An error occurred: " + ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

8.监控和日志

为了确保 API 调用的稳定性和可维护性,建议添加监控和日志记录。

示例:添加日志
java 复制代码
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Service
public class OpenAiService {

    private static final Logger logger = LoggerFactory.getLogger(OpenAiService.class);

    private final ChatClient chatClient;

    @Autowired
    public OpenAiService(ChatClient chatClient) {
        this.chatClient = chatClient;
    }

    public String generateChatResponse(String message) {
        logger.info("Generating chat response for message: {}", message);
        return chatClient.call(message);
    }
}

9.性能优化

对于高并发的场景,可能需要考虑性能优化,如缓存、异步调用等。

示例:异步调用
java 复制代码
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.util.concurrent.CompletableFuture;

@Service
public class OpenAiService {

    private final ChatClient chatClient;

    @Autowired
    public OpenAiService(ChatClient chatClient) {
        this.chatClient = chatClient;
    }

    @Async
    public CompletableFuture<String> generateChatResponseAsync(String message) {
        return CompletableFuture.completedFuture(chatClient.call(message));
    }
}

总结

通过以上步骤,你可以快速创建一个 Spring Boot 项目并集成 OpenAI 的功能。根据实际需求,你可以进一步扩展和优化这些功能,例如添加日志、异常处理、性能优化等

相关推荐
古法老登瞎折腾13 小时前
大数据智能运维实战(十一):运维 MCP 的工程化——权限、限流、审计与错误处理
java·大数据·运维·spring ai·mcp
康小汪14 小时前
AI 写 Vue 总写成同一个味道:给它装 Skills,装的不是知识是边界
前端·vue.js·人工智能·ai编程·最佳实践
智能运维指南14 小时前
研制过程“两张皮“怎么破:研制一体化支撑平台的定位、能力边界与落地前提
java·前端·人工智能·嘉为蓝鲸
yz_aiks15 小时前
Spring AI 2.1 ChatMemory 已过时用什么替代:迁移到 Session Memory 实战(JDBC 存储与会话压缩)
java·spring boot·大模型·ai agent·spring ai
金銀銅鐵15 小时前
[Java] 用 GUI 展示 EnumMap 增删键值对时的内部变化
java·后端·ai编程
学长毕设15 小时前
基于SpringBoot的上门洗车服务系统设计与实现
java·spring boot·后端
jason成都15 小时前
RTKLIB-Java 多基线联合RTK:FIX率从0%到91.5%的三层根因修复
java·gnss·rtklib·rtklib_java
鱼宵16 小时前
Stream 终端操作一次讲透:collect、count、reduce 怎么选
java·stream·终端操作
白山编程大哥16 小时前
Java 后端如何优雅地把 List 集合返回给前端
java·前端·list
Linux运维技术栈16 小时前
CVE-2026-91403 高危漏洞修复:Rocky Linux 9 多版本 JDK 环境清理实操
java·linux·运维