Spring实战spring-ai运行

目录

1. 配置

2 .搭建项目

3. 查看对应依赖

 3.1 OpenAI 依赖

3.2 配置 OpenAI API 密钥

application.properties

application.yml

4. openai实战

5. 运行和测试

6. 高级配置 

示例:配置模型和参数

解释:

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 依赖

<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 的交互逻辑

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 的异常处理机制来捕获和处理这些异常

示例:全局异常处理
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 调用的稳定性和可维护性,建议添加监控和日志记录。

示例:添加日志
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;@Autowiredpublic OpenAiService(ChatClient chatClient) {this.chatClient = chatClient;}public String generateChatResponse(String message) {logger.info("Generating chat response for message: {}", message);return chatClient.call(message);}
}

9.性能优化

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

示例:异步调用
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.util.concurrent.CompletableFuture;@Service
public class OpenAiService {private final ChatClient chatClient;@Autowiredpublic OpenAiService(ChatClient chatClient) {this.chatClient = chatClient;}@Asyncpublic CompletableFuture<String> generateChatResponseAsync(String message) {return CompletableFuture.completedFuture(chatClient.call(message));}
}

总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/72597.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker:配置 Docker 镜像加速器

1 镜像加速器介绍 默认情况下&#xff0c;将来从docker hub&#xff08;https://hub.docker.com/&#xff09;上下载docker镜像&#xff0c;太慢。一般都会配置镜像加速器&#xff1a; USTC&#xff1a;中科大镜像加速器&#xff08;https://docker.mirrors.ustc.edu.cn&…

[内网安全] Windows 本地认证 — NTLM 哈希和 LM 哈希

关注这个专栏的其他相关笔记&#xff1a;[内网安全] 内网渗透 - 学习手册-CSDN博客 0x01&#xff1a;SAM 文件 & Windows 本地认证流程 0x0101&#xff1a;SAM 文件简介 Windows 本地账户的登录密码是存储在系统本地的 SAM 文件中的&#xff0c;在登录 Windows 的时候&am…

算法-图-dijkstra 最短路径

理论知识 dijkstra三部曲 朴素版dijkstra 模拟过程 堆优化版dijksra 经典模版例题 Dijkstra求最短路 I 参加科学大会&#xff08;第六期模拟笔试&#xff09;--模版题 网络延迟 ref 理论知识 最短路是图论中的经典问题即&#xff1a;给出一个有向图&#xff0c;一…

Qt添加MySql数据库驱动

文章目录 一. 安装MySql二.编译mysql动态链接库 Qt版本&#xff1a;5.14.2 MySql版本&#xff1a;8.0.41 一. 安装MySql 参考这里进行安装&#xff1a;https://blog.csdn.net/qq_30150579/article/details/146042922 将mysql安装目录里的bin&#xff0c;include和lib拷贝出来…

浅论数据库聚合:合理使用LambdaQueryWrapper和XML

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、数据库聚合替代内存计算&#xff08;关键优化&#xff09;二、批量处理优化四、区域特殊处理解耦五、防御性编程增强 前言 技术认知点&#xff1a;使用 XM…

Ubuntu 22.04安装NVIDIA A30显卡驱动

一、安装前准备 1.禁用Nouveau驱动 Ubuntu默认使用开源Nouveau驱动&#xff0c;需要手动禁用&#xff1a; vim /etc/modprobe.d/blacklist-nouveau.conf # 添加以下内容&#xff1a; blacklist nouveau options nouveau modeset0 # 更新内核并重启&#xff1a; update-initr…

Docker Desktop 4.38 安装与配置全流程指南(Windows平台)

一、软件定位与特性 Docker Desktop 是容器化应用开发与部署的一体化工具&#xff0c;支持在本地环境创建、管理和运行Docker容器。4.38版本新增GPU加速支持、WSL 2性能优化和Kubernetes 1.28集群管理功能&#xff0c;适用于微服务开发、CI/CD流水线搭建等场景。 二、安装环境…

音视频入门基础:RTP专题(15)——FFmpeg源码中,获取RTP的视频信息的实现

一、引言 通过FFmpeg命令可以获取到SDP文件描述的RTP流的视频压缩编码格式、色彩格式&#xff08;像素格式&#xff09;、分辨率、帧率信息&#xff1a; ffmpeg -protocol_whitelist "file,rtp,udp" -i XXX.sdp 本文以H.264为例讲述FFmpeg到底是从哪个地方获取到这…

深度学习---卷积神经网络

一、卷积尺寸计算公式 二、池化 池化分为最大池化和平均池化 最常用的就是最大池化&#xff0c;可以认为最大池化不需要引入计算&#xff0c;而平均池化需要引出计算&#xff08;计算平均数&#xff09; 每种池化还分为Pooling和AdaptiveAvgPool Pooling(2)就是每2*2个格子…

netty中Future和ChannelHandler

netty中的Future&#xff0c;继承自 jdk中的Future&#xff0c;&#xff0c; jdk中的Future&#xff0c;很垃圾&#xff0c;只能同步阻塞获取结果&#xff0c;&#xff0c;&#xff0c; netty中的Future进行了升级&#xff0c;&#xff0c;可以addListener()异步获取结果&…

java 初学知识点总结

自己总结着玩 1.基本框架 public class HelloWorld{ public static void main(String[] args){ }//类名用大写字母开头 } 2.输入&#xff1a; (1)Scanner:可读取各种类型&#xff0c;字符串相当于cin>>; Scanner anew Scanner(System.in); Scan…

质量属性场景描述

为了精确描述软件系统的质量属性&#xff0c;通常采用质量属性场景&#xff08;Quality Attribute Scenario&#xff09;作为描述质量属性的手段。质量属性场景是一个具体的质量属性需求&#xff0c;使利益相关者与系统的交互的简短陈述。 质量属性场景是一种用于描述系统如何…

数据可携带权的多重价值与实践思考

文章目录 前言一、数据可携带权的提出与立法二、数据可携带权的多重价值1、推动数据要素市场化配置2、促进市场竞争与创新3、强化个人数据权益 三、数据可携带权的实践挑战1、数据安全与隐私保护面临风险2、接口差异导致数据迁移成本高昂3、可携带的数据范围尚存争议 数据可携带…

蓝桥每日打卡--分考场

#蓝桥#JAVA#分考场 题目描述 n个人参加某项特殊考试。 为了公平&#xff0c;要求任何两个认识的人不能分在同一个考场。 求是少需要分几个考场才能满足条件。 输入描述 输入格式&#xff1a; 第一行&#xff0c;一个整数n(1≤n≤100)&#xff0c;表示参加考试的人数。 …

RMAN备份bug-审计日志暴涨(select action from gv$session)

问题概述 /oracle 文件系统使用率过大&#xff0c;经过检查是审计日志过大,/oracle 目录 197G 审计日志占用70G&#xff0c;每6个小时产生大量审计日志&#xff0c;日志内容全是select action from gv$session &#xff0c;猜测可能跟备份有关&#xff0c; $>df -h /oracle…

在Blender中给SP分纹理组

在Blender中怎么分SP的纹理组/纹理集 其实纹理组就是材质 把同一组的材质分给同一组的模型 导入到sp里面自然就是同一个纹理组 把模型导入SP之后 就自动分好了

Nuxt:Nuxt3框架中onBeforeMount函数 和onBeforeRouteUpdate函数区别介绍 【超详细!】

提示&#xff1a;在 Nuxt3 中&#xff0c;onBeforeMount 和 onBeforeRouteUpdate 是两个不同场景下使用的钩子函数&#xff0c;分别对应 Vue 组件生命周期 和 路由导航守卫。以下是它们的详细解释和对比&#xff1a; 文章目录 一、onBeforeMount&#xff08;Vue 生命周期钩子&a…

华为 Open Gauss 数据库在 Spring Boot 中使用 Flyway

db-migration&#xff1a;Flyway、Liquibase 扩展支持达梦&#xff08;DM&#xff09;、南大通用&#xff08;GBase 8s&#xff09;、OpenGauss 等国产数据库。部分数据库直接支持 Flowable 工作流。 开源代码仓库 Github&#xff1a;https://github.com/mengweijin/db-migrat…

java 查找两个集合的交集部分数据

利用了Java 8的Stream API&#xff0c;代码简洁且效率高 import java.util.stream.Collectors; import java.util.List; import java.util.HashSet; import java.util.Set;public class ListIntersection {public static List<Long> findIntersection(List<Long> …

双足机器狗开发:Rider - Pi

双足机器狗开发:Rider - Pi https://github.com/YahboomTechnology/Rider-Pi-Robot 项目介绍 Rider - Pi是一款为开发者、教育工作者和机器人爱好者设计的桌面双轮腿式机器人,它基于树莓派CM4核心模块构建,具备多种先进功能和特点: 硬件特性 核心模块:采用树莓派CM4核…