快速學習SpringAi

Spring AI是AI工程師的一個應用框架,它提供了一個友好的API和開發AI應用的抽象,旨在簡化AI應用的開發工序,例如開發一款基于ChatGPT的對話應用程序。通過使用Spring Ai使我們更簡單直接使用chatgpt

1.創建項目

jdk17

image-20240514105741327

引入依賴

image-20240514105741327

2.依賴配置

配置spring倉庫

    <repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><releases><enabled>false</enabled></releases></repository></repositories>

整個pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.5</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>springai-test</artifactId><version>0.0.1-SNAPSHOT</version><name>springai-test</name><description>Demo project for Spring Boot</description><properties><java.version>17</java.version><spring-ai.version>0.8.1</spring-ai.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-spring-boot-starter</artifactId><version>0.8.1</version>
<!--            <scope>system</scope>-->
<!--            <systemPath>${project.basedir}/src/main/resources/lib/spring-ai-core-0.8.1.jar</systemPath>--></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai</artifactId><version>0.8.1</version></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>${spring-ai.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes>
<!--                    <includeSystemScope>true</includeSystemScope>--></configuration></plugin></plugins></build><repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><releases><enabled>false</enabled></releases></repository></repositories></project>

因為阿里倉庫暫時還沒有對應的spring-ai-openai-spring-boot-
starter 依賴,所以Maven的倉庫源需要使用Maven默認的倉庫
源,在Maven的settings.xml中進行修改即可

<mirror><id>maven-default-http-blocker</id><mirrorOf>external:http:*</mirrorOf><name>Pseudo repository to mirror external repositories 	initially using HTTP .</name><url>http://0.0.0.0/</url><blocked>true</blocked>
</mirror>

如果依賴還沒引入成功,可以下載jar包,地址repo.spring.io

將jar包安裝至本地倉庫后使用pom文件直接引入

mvn install:install-file -Dfile=你的jar包路徑/你的jar包名字 -DgroupId=org.springframework.ai -DartifactId=spring-ai-openai-spring-boot-starter -Dversion=0.8.1 -Dpackaging=jar

3.代碼編寫

application.properties

spring.application.name=demo
server.port=8080spring.ai.openai.api-key=你的api-key
#最好找一個中轉url,不然得配置代理
spring.ai.openai.base-url=http://api.openai.com
spring.ai.openai.chat.options.model=gpt-3.5-turbo

controller

一個直接返回結果,一個流式返回

package com.example.demo;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.ai.chat.ChatResponse;
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.prompt.Prompt;import org.springframework.ai.openai.OpenAiChatClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;import java.util.Map;@RestController
public class ChatController {//日志打印private final static Logger Log =LoggerFactory.getLogger(ChatController.class);//注入OpenAiChatClient@Autowiredprivate OpenAiChatClient chatClient;@GetMapping("/ai/generate")public Map generate(@RequestParam(value = "message", defaultValue = "給我講個笑話") String message) {Log.info("發送的消息是:{}", message);String result = chatClient.call(message);Log.info("返回的消息是:{}", result);return Map.of("generation", result);}@GetMapping(value = "/ai/generateStream", produces = "text/event-stream")public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "給我講個笑話") String message) {Log.info("發送的消息是:{}", message);Prompt prompt = new Prompt(new UserMessage(message));System.out.println(chatClient.stream(prompt));return chatClient.stream(prompt);}
}

4.運行結果

image-20240514105741327

image-20240514105741327
最后附上代碼
https://github.com/smx1024/springai-demo

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/11885.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/11885.shtml
英文地址,請注明出處:http://en.pswp.cn/web/11885.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

同城組局同城活動找搭子小程序JAVA源碼面芽組局的實現方案

功能概述 基于微信小程序開發的一款軟件&#xff0c;支持用戶動態發布、私信聊天關注、禮物充值打賞、發起活動組局、用戶報名參與、支持商家入駐&#xff0c;對接廣告功能等。 活動發布&#xff1a;用戶可以在平臺上發布各種類型的活動&#xff0c;如戶外徒步、音樂會觀賞、…

AI應用案例:會議紀要自動生成

以騰訊會議轉錄生成的會議記錄為研究對象&#xff0c;借助大模型強大的語義理解和文本生成等能力&#xff0c;利用指令和文本向量搜索實現摘要總結、要點提取、行動項目提取、會議紀要生成等過程&#xff0c;完成會議紀要的自動總結和生成&#xff0c;降低人工記錄和整理時間成…

React 第三十章 React 和 Vue 描述頁面的區別

面試題&#xff1a;React 和 Vue 是如何描述 UI 界面的&#xff1f;有一些什么樣的區別&#xff1f; 標準且淺顯的回答&#xff1a; React 中使用的是 JSX&#xff0c;Vue 中使用的是模板來描述界面 前端領域經過長期的發展&#xff0c;目前有兩種主流的描述 UI 的方案&#xf…

Q1季度電飯煲家電行業線上市場(京東天貓淘寶)銷售數據排行榜

鯨參謀監測的2024年Q1季度線上電商平臺&#xff08;天貓淘寶京東&#xff09;電飯煲家電銷售數據已出爐&#xff01; 今年Q1季度&#xff0c;電飯煲銷售成績不如預期。根據鯨參謀數據顯示&#xff0c;今年Q1季度在線上電商平臺&#xff08;淘寶天貓京東&#xff09;電飯煲銷量…

三種有效方法:快速將視頻格式轉換mp4格式

在當今數字化時代&#xff0c;視頻文件的格式多種多樣&#xff0c;而將視頻轉換為MP4格式是一種常見的需求。MP4格式具有廣泛的兼容性&#xff0c;適用于多種設備和平臺&#xff0c;因此經常被選擇作為視頻文件的輸出格式。 無論是為了在移動設備上觀看視頻&#xff0c;還是為…

照妖鏡api接口,查詢旺旺的降權、黑號舉報數據(全網實時更新)

照妖鏡api接口&#xff0c;查詢旺旺的降權、黑號舉報數據&#xff08;全網實時更新&#xff09; 照妖鏡查號功能說明&#xff1a; 1.照妖鏡查號功能的打標信息為商家主動共享&#xff0c;不對相關使用效果或糾紛承擔責任&#xff1b; 2.本功能于查詢互聯網用戶防止電信詐騙&…

NSS【web】刷題

[SWPUCTF 2021 新生賽]jicao 類型&#xff1a;PHP、代碼審計、RCE 主要知識點&#xff1a;json_decode()函數 json_decode()&#xff1a;對JSON字符串解碼&#xff0c;轉換為php變量 用法&#xff1a; <?php $json {"ctf":"web","question"…

YOLOV8實戰-和平精英敵我檢測

YOLOV8實戰&#xff0c;從環境配置、數據準備、數據標注、模型訓練、模型導出到源碼分享 前言&#xff1a;效果展示圖片展示視頻展示 簡介&#xff1a;**【YOLOV8是啥&#xff1f;】****【YOLOV8能干啥&#xff1f;有啥應用場景&#xff1f;】** 一、環境準備1、新建一個虛擬環…

多讀書,多鍛煉,勇敢點,去面對,去解決

這些建議都是非常積極和有益的&#xff0c;它們涵蓋了身心健康和個人成長的重要方面。以下是對這些建議的詳細解釋&#xff1a; 多讀書&#xff1a; 拓寬視野&#xff1a;書籍是知識的海洋&#xff0c;通過閱讀&#xff0c;我們可以接觸到各種各樣的思想、文化和經驗&#xff0…

“webpack-dev-server --config build/webpack.dev.conf.js” 請問這個問題要如何修復

解決方案 修改部署方式&#xff1a; 使用 webpack 來打包你的項目&#xff0c;生成靜態文件。在生產環境中&#xff0c;使用 Nginx 或其他 HTTP 服務器來提供服務&#xff0c;而不是使用 webpack-dev-server。 Dockerfile 調整&#xff1a; 確保 Dockerfile 中使用的命令是用于…

ArcGIS Maps :在Vue3中加載ArcGIS地圖

Vue3中使用ArcGIS Maps SDK for JavaScript的步驟 一、創建 Vue 3 項目 1、新建ArcGISAPIProject文件夾&#xff0c;并用vscode打開 2、打開終端&#xff0c;在終端中輸入npm create vitelatest項目名稱vite-vue3-arcgis,選擇vue框架&#xff0c;并選中JavaScript語音創建項目…

Linux中的網絡隔離功能 netns

Network Namespace&#xff08;netns&#xff09; 是Linux內核提供的一項實現網絡隔離的功能&#xff0c;它能隔離多個不同的網絡空間&#xff0c;并且各自擁有獨立的網絡協議棧。通過 namespace 可以隔離容器的進程 PID、文件系統掛載點、主機名等多種資源&#xff0c;它可以為…

水利行業工程設計資質標準

甲級資質&#xff1a; 具有獨立企業法人資格。社會信譽良好&#xff0c;注冊資本不少于600萬元人民幣。企業完成過的工程設計項目應滿足所申請行業主要專業技術人員配備表中對工程設計類型業績考核的要求&#xff0c;且要求考核業績的每個設計類型的大型項目工程設計不少于1項…

vscode調試Electron+ts

調試Electronjs 調試Electronjs: https://www.electronjs.org/zh/docs/latest/tutorial/debugging-vscode 調試Electronts 首先看一下&#xff0c;我的目錄結構。目錄結構決定了launch.json中的路徑部分。我將在項目根目錄下進行調試&#xff0c;項目根目錄下包含electron代碼…

探索QChart:Qt中的數據可視化藝術

目錄標題 1. QChart概述2. 創建QChart對象3. 添加數據系列&#xff08;Series&#xff09;4. 定制圖表外觀5. 交互與動畫6. 圖表布局與管理7. 實例代碼與解析8. 總結 在數字化的世界里&#xff0c;數據是新的石油。然而&#xff0c;原始數據本身往往難以理解&#xff0c;數據可…

數據可視化(十一):Pandas餐飲信息表分析——交叉表、離群點分析,多維分析等高級操作

Tips&#xff1a;"分享是快樂的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不僅有知識的海洋&#x1f30a;&#xff0c;還有滿滿的正能量加持&#x1f4aa;&#xff0c;快來和我一起分享這份快樂吧&#x1f60a;&#xff01; 喜歡我的博客的話&#xff0c;記得…

golang創建式設計模式------單例模式

目錄導航 1.單例模式1)什么是單例模式 2)使用場景3)實現方式1.懶漢式單例模式2.餓漢式3.雙重檢查式4.sysc.Once式 4)實踐案例5)優缺點分析 1.單例模式 1)什么是單例模式 單例模式(Singleton Pattern)是一種常用的設計模式。單例模式的類提供了一種訪問其唯一對象的方法&#…

RAG系列論文

檢索增強模型&#xff1a; 提出Atlas &#xff1a;預訓練檢索增強模型 Few-shot Learning with Retrieval Augmented Language Models 鏈接 根據輸入問題的不同&#xff0c;挑選合適的提示詞 Learning To Retrieve Prompts for In-Context Learning 鏈接 RAG&#xff1a; M…

【數據結構】線性表--順序表(二)

文章目錄 1、什么是線性表2、線性表的基本操作3、順序表3.1、順序表的定義3.2、順序表的實現方式&#xff1a;靜態分配3.3、順序表的實現方式&#xff1a;動態分配3.4、順序表的特點3.5、順序表的初始化與插入操作3.6、順序表的刪除與查詢 1、什么是線性表 ? 線性表是具有相同…

【Python快速上手(二十二)】

目錄 Python快速上手&#xff08;二十二&#xff09;Python3 使用數據庫-pymysql1. 創建數據庫連接2. 創建數據表3. 插入數據4. 查詢數據5. 使用 WHERE 條件語句6. 排序7. 刪除記錄8. 更新表數據9. 刪除表10.異常處理總結 Python快速上手&#xff08;二十二&#xff09; Pytho…