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.propertiesapplication.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-turbogpt-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 的功能。根据实际需求,你可以进一步扩展和优化这些功能,例如添加日志、异常处理、性能优化等

相关推荐
excel3 分钟前
前端必备:从能力检测到 UA-CH,浏览器客户端检测的完整指南
前端
前端小巷子10 分钟前
Vue 3全面提速剖析
前端·vue.js·面试
悟空聊架构16 分钟前
我的网站被攻击了,被干掉了 120G 流量,还在持续攻击中...
java·前端·架构
CodeSheep18 分钟前
国内 IT 公司时薪排行榜。
前端·后端·程序员
尖椒土豆sss22 分钟前
踩坑vue项目中使用 iframe 嵌套子系统无法登录,不报错问题!
前端·vue.js
遗悲风22 分钟前
html二次作业
前端·html
江城开朗的豌豆26 分钟前
React输入框优化:如何精准获取用户输入完成后的最终值?
前端·javascript·全栈
CF14年老兵26 分钟前
从卡顿到飞驰:我是如何用WebAssembly引爆React性能的
前端·react.js·trae
画月的亮29 分钟前
前端处理导出PDF。Vue导出pdf
前端·vue.js·pdf
江城开朗的豌豆35 分钟前
拆解Redux:从零手写一个状态管理器,彻底搞懂它的魔法!
前端·javascript·react.js