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.pswp.cn/diannao/72597.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/72597.shtml
英文地址,請注明出處:http://en.pswp.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核…