当前位置: 首页 > news >正文

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

相关文章:

Spring实战spring-ai运行

目录 1. 配置 2 .搭建项目 3. 查看对应依赖 3.1 OpenAI 依赖 3.2 配置 OpenAI API 密钥 application.properties application.yml 4. openai实战 5. 运行和测试 6. 高级配置 示例&#xff1a;配置模型和参数 解释&#xff1a; 7. 处理异常和错误 示例&#xff1a;…...

STL:C++的超级工具箱(一)

书接上回&#xff0c;内存管理和指针&#xff1a;C的双刃手术刀&#xff08;一&#xff09;-CSDN博客&#xff0c;在上篇我们聊到了什么是内存&#xff0c;堆栈&#xff0c;内存管理和智能指针相关的内容&#xff0c;接下来让我们一起去看看STL是什么吧。 第一步&#xff1a;提…...

leetcode349 两个数组的交集

求两个数组的交集&#xff0c;直白点儿就是【nums2 的元素是否在 nums1 中】。 在一堆数中查找一个数&#xff0c;当然是扔出哈希。碰到这种对目前来说是未知数值大小的情况&#xff0c;我们可以使用集合 set 来解决。 使用数组来做哈希的题目&#xff0c;是因为题目都限制了数…...

快速生成viso流程图图片形式

我们在写详细设计文档的过程中总会不可避免的涉及到时序图或者流程图的绘制&#xff0c;viso这个软件大部分技术人员都会使用&#xff0c;但是想要画的好看&#xff0c;画的科学还是比较难的&#xff0c;现在我总结一套比较好的方法可以生成好看科学的viso图(图片格式)。主要思…...

鸿蒙Android4个脚有脚线

效果 min:number122max:number150Row(){Stack(){// 底Text().border({width:2,color:$r(app.color.yellow)}).height(this.max).aspectRatio(1)// 长Text().backgroundColor($r(app.color.white)).height(this.max).width(this.min)// 宽Text().backgroundColor($r(app.color.w…...

【NetTopologySuite类库】geojson和shp互转,和自定义对象互转

geojson介绍 1. 示例 在visual studio中使用NuGet中安装了三个库&#xff08;.net4.7.2环境&#xff09;&#xff1a; NetTopologySuite 2.5NetTopologySuite.IO.Esri.Shapefile 1.2NetTopologySuite.IO.GeoJSON 4.0 1.1 shp数据转geojson 先创建一个shp文件作为例子&…...

【哇! C++】类和对象(三) - 构造函数和析构函数

目录 一、构造函数 1.1 构造函数的引入 1.2 构造函数的定义和语法 1.2.1 无参构造函数&#xff1a; 1.2.2 带参构造函数 1.3 构造函数的特性 1.4 默认构造函数 二、析构函数 2.1 析构函数的概念 2.2 特性 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中…...

Ubuntu20.04本地配置IsaacLab 4.2.0的G1训练环境(一)

Ubuntu20.04本地配置IsaacLab的G1训练环境&#xff08;一&#xff09; 配置Omniverse环境配置IsaacSim配置IsaacLab 写在前面&#xff0c;如果Ubuntu剩余空间低于60G&#xff0c;则空间不足&#xff0c;除非你不需要资产包。但资产包中却包含了G1模型、Go2模型等机器人模型和代…...

浅谈汽车系统电压优缺点分析

汽车电气系统的电压等级选择直接影响整车性能、能效和兼容性。以下是 12V、24V、48V 系统的简单介绍&#xff0c;包括技术特点、优缺点及典型应用场景。 汽车电气系统的发展随着车辆电子设备的增多和对能效要求的提高&#xff0c;电压等级也在逐步提升&#xff0c;从传统的12V…...

Springboot基础篇(4):自动配置原理

1 自动配置原理剖析 1.1 加载配置类的源码追溯 自动配置的触发入口&#xff1a; SpringBootApplication 组合注解是自动配置的起点&#xff0c;其核心包含 EnableAutoConfiguration&#xff0c;该注解使用AutoConfigurationImportSelector 实现配置类的动态加载。 启动类的注…...

Dify 开源大语言模型应用开发平台使用(一)

文章目录 一、创建锂电池专业知识解答应用1.1 应用初始化二、核心功能模块详解2.1 知识库构建2.2 工作流与节点编排节点类型说明工作流设计示例:锂电池选型咨询2.3 变量管理三、测试与调试3.1 单元测试3.2 压力测试3.3 安全验证四、部署与优化建议4.1 部署配置4.2 持续优化结论…...

机器学习深度学习基本概念:logistic regression和softmax

逻辑回归用来处理二分类问题 softmax用来处理多分类问题&#xff1a;比如llm在generate的时候&#xff0c;每个batch里面的一个样本的一个一次generate就是softmax生成一个大小为vocab_size的向量的概率分布&#xff0c;然后再采样 逻辑回归&#xff08;logistic regression&…...

OpenCV计算摄影学(16)调整图像光照效果函数illuminationChange()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 对选定区域内的梯度场应用适当的非线性变换&#xff0c;然后通过泊松求解器重新积分&#xff0c;可以局部修改图像的表观照明。 cv::illuminati…...

Git - 补充工作中常用的一些命令

Git - 补充工作中常用的一些命令 1 一些场景1.1 场景11.2 场景21.3 场景31.4 场景41.5 场景51.6 场景61.7 场景71.8 场景81.9 场景91.10 场景101.11 场景111.12 场景121.13 场景131.14 场景141.15 场景15 2 git cherry-pick \<commit-hash\> 和 git checkout branch \-\-…...

使用Python的requests库调用API并处理JSON响应的详细步骤

1. 安装request库 pip install requests 2. 发送GET请求 import requests# 定义API地址 url "https://api.example.com/data"# 发送GET请求 response requests.get(url)# 检查HTTP状态码 if response.status_code 200:# 解析JSON响应data response.json()prin…...

Mybatis如何通过databaseId属性支持不同数据库的不同语法

目录 一、前言 二、如何配置 三、源码解读 四、自定义 一、前言 在一次项目功能测试中&#xff0c;发现有个sql在其他嵌入式数据库中执行正常&#xff0c;但是在mysql中执行失败&#xff0c;发现是因为有个字段在mysql中是关键字&#xff0c;需要使用反引号&#xff08;&…...

android edittext 防止输入多个小数点或负号

有些英文系统的输入法,或者定制输入法。使用xml限制不了输入多个小数点和多个负号。所以代码来控制。 一、通过XML设置限制 <EditTextandroid:id="@+id/editTextNumber"android:layout_width="wrap_content"android:layout_height="wrap_conten…...

windows部署spleeter 版本2.4.0:分离音频的人声和背景音乐

windows部署spleeter 版本2.4.0&#xff1a;分离音频的人声和背景音乐 一、Spleeter 是什么&#xff1f; Spleeter 是由法国音乐流媒体公司 Deezer 开发并开源的一款基于深度学习的音频分离工具。它能够将音乐中的不同音轨&#xff08;如人声、鼓、贝斯、钢琴等&#xff09;分…...

深度学习、宽度学习、持续学习与终身学习:全面解析与其在大模型方面的应用

目录 引言&#xff1a; 1. 深度学习&#xff08;Deep Learning&#xff09; 1.1 深度学习的基本概念 1.2 深度学习的数学原理 1.3 深度学习的特点 1.4 深度学习在大模型中的应用 2. 宽度学习&#xff08;Wide Learning&#xff09; 2.1 宽度学习的基本概念 2.2宽度学习…...

【量化科普】Arbitrage,套利

【量化科普】Arbitrage&#xff0c;套利 &#x1f680;量化软件开通 &#x1f680;量化实战教程 什么是套利&#xff1f; 套利&#xff08;Arbitrage&#xff09;是金融市场中的一种交易策略&#xff0c;指的是在不同市场或不同形式中同时买入和卖出相同或相似的金融产品&a…...

从数据孤岛到智能协作:DeerFlow如何重构AI研究范式

从数据孤岛到智能协作&#xff1a;DeerFlow如何重构AI研究范式 【免费下载链接】deer-flow DeerFlow is a community-driven framework for deep research, combining language models with tools like web search, crawling, and Python execution, while contributing back t…...

书匠策AI:课程论文创作的“智能导航仪”,解锁学术新境界!

在学术的浩瀚海洋中&#xff0c;每一篇课程论文都是学子们扬帆起航、探索未知的航船。然而&#xff0c;面对茫茫的学术资料、错综复杂的逻辑结构&#xff0c;以及严格的格式要求&#xff0c;不少学子常常感到迷茫与无助。别怕&#xff0c;今天我要为你介绍一位论文写作的“智能…...

如何用纯C语言征服LeetCode:从零开始的算法学习之旅

如何用纯C语言征服LeetCode&#xff1a;从零开始的算法学习之旅 【免费下载链接】leetcode LeetCode in pure C 项目地址: https://gitcode.com/gh_mirrors/leetcode5/leetcode LeetCode算法题是程序员提升编程能力的重要途径&#xff0c;而使用纯C语言来解决这些问题不…...

戴森V6/V7吸尘器电池锁死终极解决方案:开源固件修复完整指南

戴森V6/V7吸尘器电池锁死终极解决方案&#xff1a;开源固件修复完整指南 【免费下载链接】FU-Dyson-BMS (Unofficial) Firmware Upgrade for Dyson V6/V7 Vacuum Battery Management System 项目地址: https://gitcode.com/gh_mirrors/fu/FU-Dyson-BMS 您的戴森吸尘器突…...

别再让Bug溜走!手把手教你用SVA在UVM里给芯片验证加个“监控探头”

芯片验证工程师的"电子眼"&#xff1a;用SVA在UVM中构建智能监控体系 想象一下&#xff0c;你正在负责一个复杂SoC芯片的验证工作。随着设计规模不断扩大&#xff0c;传统的测试方法就像在黑暗的房间里寻找掉落的针——效率低下且容易遗漏关键问题。这时&#xff0c;…...

ViGEmBus:Windows虚拟游戏手柄驱动终极指南

ViGEmBus&#xff1a;Windows虚拟游戏手柄驱动终极指南 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 项目概述与价值主张 ViGEmBus是一款革命性的Windows…...

Turborepo monorepo:别再手动管理多包了

Turborepo monorepo&#xff1a;别再手动管理多包了 毒舌时刻这代码写得跟网红滤镜似的——仅供参考。各位前端同行&#xff0c;咱们今天聊聊 Turborepo。别告诉我你还在手动管理 monorepo&#xff0c;那感觉就像用算盘管理仓库——能管&#xff0c;但累死人。 为什么你需要 T…...

打造高性价比DIY回音壁:从零开始的多媒体音箱制作指南

1. 为什么选择DIY回音壁&#xff1f; 每次看到商场里标价上万元的回音壁音箱&#xff0c;我都会想&#xff1a;这东西真的值这个价吗&#xff1f;作为一个玩了十几年音响的发烧友&#xff0c;我决定用不到500元的预算&#xff0c;打造一套属于自己的高性价比回音壁。你可能不知…...

彻底清理C盘自带软件方法:2026最新版强力卸载预装软件工具教程

电脑用着用着C盘就满了&#xff0c;开机小助手总提醒“磁盘空间不足”。点进控制面板一看&#xff0c;全是买电脑时自带的那些从未用过的软件&#xff0c;想卸载又怕卸不干净&#xff0c;甚至担心把系统搞崩溃。其实&#xff0c;彻底清理这些自带软件有章可循&#xff0c;关键是…...

Youtu-Parsing快速部署指南:一键启动Web服务,开箱即用解析工具

Youtu-Parsing快速部署指南&#xff1a;一键启动Web服务&#xff0c;开箱即用解析工具 1. 项目概述与核心价值 Youtu-Parsing是腾讯优图实验室推出的多模态文档智能解析模型&#xff0c;基于Youtu-LLM-2B构建&#xff0c;专为解决复杂文档解析难题而设计。不同于传统OCR工具&…...