Spring AI 使用教程

Spring AI 使用教程(2025年5月24日更新)


一、環境搭建與項目初始化
  1. 創建Spring Boot項目

    • 使用IDEA或Spring Initializr創建項目,選擇JDK 17或更高版本(推薦21)。
    • 勾選依賴項:Spring WebLombok,Maven或Gradle作為構建工具。
    • 添加Spring AI依賴(以OpenAI為例):
      <dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-spring-boot-starter</artifactId><version>1.0.0-M6</version>
      </dependency>
      
  2. 配置API密鑰
    application.yml中配置模型服務(以DeepSeek為例):

    spring:ai:openai:api-key: sk-your-api-keybase-url: https://api.deepseek.com/v1chat:options:model: deepseek-chat
    ```<sup>5</sup><sup>8</sup><sup>11</sup>

二、基礎功能實現
  1. 調用大模型生成文本

    • 通過ChatClient發送請求:
      @RestController
      public class ChatController {@Autowiredprivate ChatClient chatClient;@GetMapping("/chat")public String chat(@RequestParam String prompt) {return chatClient.prompt(prompt).call().content();}
      }
      
    • 啟動應用后,訪問http://localhost:8080/chat?prompt=寫一首春天的詩即可獲取響應。
  2. 文檔處理(ETL)

    • 添加文檔處理依賴(如PDF解析):
      <dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-tika-document-reader</artifactId>
      </dependency>
      
    • 讀取并轉換本地文檔:
      DocumentReader reader = new TikaDocumentReader();
      List<Document> docs = reader.read("file:///data.pdf");
      

三、高級應用場景
  1. RAG(檢索增強生成)

    • 結合本地數據與大模型,實現知識庫增強問答:
      • 使用spring-ai-spark集成訊飛星火:
        <dependency><groupId>com.iflytek.spark</groupId><artifactId>spring-ai-spark-spring-boot-starter</artifactId><version>1.0.0-M6-SNAPSHOT</version>
        </dependency>
        
      • 將本地數據向量化存儲,通過語義檢索生成精準答案。
  2. MCP服務集成

    • 搭建MCP(Model Context Protocol)服務:
      <dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-server-webmvc</artifactId>
      </dependency>
      
    • 通過JSON-RPC與模型交互,支持多模態輸入輸出。

四、實戰案例:構建網頁聊天應用
  1. 前端集成

    • 使用Thymeleaf或React/Vue搭建前端頁面,通過WebSocket或SSE與后端通信。
    • 示例代碼片段(SSE推送):
      @GetMapping("/stream-chat")
      public SseEmitter streamChat(@RequestParam String prompt) {SseEmitter emitter = new SseEmitter();chatClient.prompt(prompt).stream().subscribe(content -> {emitter.send(content);});return emitter;
      }
      
  2. 記憶存儲與會話管理

    • 使用ChatMemory組件保存上下文:
      @Bean
      public ChatMemory chatMemory() {return new InMemoryChatMemory(50); // 保留最近50輪對話
      }
      

五、注意事項與調試技巧
  1. 常見問題

    • 模型響應慢:調整超時配置spring.ai.openai.chat.options.timeout=60s
    • 中文支持不佳:在prompt中明確指定“用中文回答”。
  2. 日志調試

    • 啟用詳細日志:
      logging:level:org.springframework.ai: DEBUG
      

六、總結與擴展

Spring AI通過模塊化設計,支持快速接入主流模型(如DeepSeek、訊飛星火)和高級功能(RAG、MCP)。開發者可結合業務需求擴展以下場景:

  • 多模型混合調用:通過@Qualifier注解切換不同模型。
  • 工具調用:集成外部API(如天氣查詢)增強AI能力。
  • 企業級部署:結合Kubernetes實現彈性擴縮容。

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

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

相關文章

iOS 直播特殊禮物特效實現方案(Swift實現,超詳細!)

特殊禮物特效是提升直播互動體驗的關鍵功能&#xff0c;下面我將詳細介紹如何在iOS應用中實現各種高級禮物特效。 基礎特效類型 1.1 全屏動畫特效 class FullScreenAnimationView: UIView {static func show(with gift: GiftModel, in view: UIView) {let effectView FullS…

分布式事務之Seata

概述 Seata有四種模式 AT模式&#xff1a;無侵入式的分布式事務解決方案&#xff0c;適合不希望對業務進行改造的場景&#xff0c;但由于需要添加全局事務鎖&#xff0c;對影響高并發系統的性能。該模式主要關注多DB訪問的數據一致性&#xff0c;也包括多服務下的多DB數據訪問…

信息收集與搜索引擎

6.1 常見的搜索引擎&#xff08;一、二&#xff09; 6.1.1 通用搜索引擎 Google/Bing&#xff1a; 用途&#xff1a;基礎信息收集&#xff08;域名、子域名、敏感文件&#xff09;。 高級語法&#xff1a; site:target.com&#xff1a;限定搜索目標域名。 filetype:pdf&am…

【Java項目測試報告】:在線聊天平臺(Online-Chat)

被測試項目已部署&#xff1a;登錄頁面http://123.249.78.82:8080/login.html 一、項目背景 1.1 測試目標 驗證系統功能完整性&#xff0c;確保用戶管理、消息傳輸、好友管理等核心模塊符合需求。 1.2 項目技術棧 后端&#xff1a;Spring Boot/Spring MVC/WebSocket 數據…

RAGFlow與Dify的深度刨析

目錄 一、RAGFlow 框架 二、Dify 框架 三、兩者集成 四、深度對比 1. 核心定位對比 2. 核心功能對比 3. 技術架構對比 4. 部署與成本 5. 適用場景推薦 總結 一、RAGFlow 框架 RAGFlow 是一個專注于深度文檔理解和檢索增強生成&#xff08;RAG&#xff09;技術的框架…

CQF預備知識:一、微積分 -- 1.2.2 函數f(x)的類型詳解

文中內容僅限技術學習與代碼實踐參考&#xff0c;市場存在不確定性&#xff0c;技術分析需謹慎驗證&#xff0c;不構成任何投資建議。 &#x1f4d6; 數學入門全解 本系列教程為CQF(國際量化金融分析師證書)認證所需的數學預備知識&#xff0c;涵蓋所有需要了解的數學基礎知識…

嵌入式工程師常用軟件

1、 Git Git 是公司常用的版本管理工具&#xff0c;人人都要會。在線的 git 教程可以參考菜鳥教程&#xff1a; https://www.runoob.com/git/git-tutorial.html 電子書教程請在搜索欄搜索&#xff1a; git Git 教程很多&#xff0c;常用的命令如下&#xff0c;這些命令可…

TReport組件指南總結

1. TReport 組件簡介 TReport 是一個用于生成和打印報表的組件,通常用于連接數據集(如 TDataSet)并設計復雜的報表布局。它支持動態數據綁定、多頁報表、分組統計、圖表插入等功能。 2. 安裝與配置 安裝:如果使用的是第三方報表工具(如 Rave Reports),需在 Delphi 中通…

spark任務的提交流程

目錄 spark任務的提交流程1. 資源申請與初始化2. 任務劃分與調度3. 任務執行4. 資源釋放與結果處理附:關鍵組件協作示意圖擴展說明SparkContext介紹 spark任務的提交流程 用戶創建一個 Spark Context;Spark Context 去找 Cluster Manager 申請資源同時說明需要多少 CPU 和內…

【C++】C++異步編程四劍客:future、async、promise和packaged_task詳解

C異步編程四劍客&#xff1a;future、async、promise和packaged_task詳解 1. 引言 1.1 異步編程的重要性 在現代C編程中&#xff0c;異步操作是提高程序性能和響應能力的關鍵技術。它允許程序在等待耗時操作&#xff08;如I/O、網絡請求或復雜計算&#xff09;完成時繼續執行…

2021-10-28 C++判斷完全平方數

緣由判斷一個整數是否為完全平方數-編程語言-CSDN問答 整數用平方法小數用5分法逼近。 int 判斷平方數(int n) {//緣由https://ask.csdn.net/questions/7546950?spm1005.2025.3001.5141int a 1;while (a < n / a)if (a*a < n)a;else if (a*a n)return 1;elsereturn 0…

解決weman框架redis報錯:Class “llluminatelRedis\RedisManager“ not found

解決weman框架redis報錯&#xff1a;Class "llluminatelRedis\RedisManager" not found 報錯解決方案 報錯 解決方案 按照手冊執行 composer require psr/container ^1.1.1 illuminate/redis illuminate/events 安裝redis組件 然后restart重啟就行了 php webman s…

Windows 11 電源計劃進階——通過異類策略優化大小核CPU調度

一、為什么需要手動控制大小核調度&#xff1f; 1.1 Intel 12/13/14代酷睿與Win11的適配現狀 Intel 12代酷睿首次引入混合架構設計&#xff08;P-Core性能核 E-Core能效核&#xff09;&#xff0c;Windows 11雖然原生支持線程調度器&#xff08;Thread Director&#xff09;…

文件系統·linux

目錄 磁盤簡介 Ext文件系統 塊 分區 分組 inode 再談inode 路徑解析 路徑緩存 再再看inode 掛載 小知識 磁盤簡介 磁盤&#xff1a;一個機械設備&#xff0c;用于儲存數據。 未被打開的文件都是存在磁盤上的&#xff0c;被打開的加載到內存中。 扇區&#xff1a;是…

如何使用redis做限流(golang實現小樣)

在實際開發中,限流(Rate Limiting)是一種保護服務、避免接口被惡意刷流的常見技術。常用的限流算法有令牌桶、漏桶、固定窗口、滑動窗口等。由于Redis具備高性能和原子性操作,常常被用來實現分布式限流。 下面給出使用Golang結合Redis實現簡單限流的幾種常見方式(以“固定…

手寫ES6 Promise() 相關函數

手寫 Promise() 相關函數&#xff1a; Promise()、then()、catch()、finally() // 定義三種狀態常量 const PENDING pending const FULFILLED fulfilled const REJECTED rejectedclass MyPromise {/*定義狀態和結果兩個私有屬性:1.使用 # 語法&#xff08;ES2022 官方私有字…

Redis學習專題(五)緩存穿透、緩存擊穿、緩存雪崩

目錄 一、緩存穿透 緩存穿透的原因&#xff1a; 緩存穿透的現象&#xff1a; 緩存穿透的解決辦法&#xff1a; 二、緩存擊穿 緩存擊穿的原因&#xff1a; 緩存擊穿的現象&#xff1a; 緩存擊穿的解決辦法: 三、緩存雪崩 緩存雪崩的原因&#xff1a; 緩存雪崩的現象&…

【Hadoop】大數據技術之 MapReduce

目錄 一、MapReduce概述 1.1 MapReduce 定義 1.2 MapReduce優缺點 1.3 MapReduce 核心思想 1.4 MapReduce 進程 1.5 常用數據序列化類型 1.6 MapReduce 編程規范 二、WordCound 案例 2.1 環境準備 2.2 編寫程序 三、MapReduce 工作流程 一、MapReduce概述 1.1 MapRe…

國際前沿知識系列三:解決泛化能力不足問題

目錄 國際前沿知識系列三&#xff1a;解決泛化能力不足問題 一、子類建模法與分類建模法在腦區應變預測中的應用 &#xff08;一&#xff09;子類建模法 案例分析 &#xff08;二&#xff09;分類建模法 案例分析 二、基于遷移學習和數據融合的大腦應變預測模型改良 &a…

client.chat.completions.create方法參數詳解

response client.chat.completions.create(model"gpt-3.5-turbo", # 必需參數messages[], # 必需參數temperature1.0, # 可選參數max_tokensNone, # 可選參數top_p1.0, # 可選參數frequency_penalty0.0, # 可選參數presenc…