最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Boot 集成 Spring AI OpenAI Starter最佳實踐指南

 更新時間:2025年12月27日 10:18:22   作者:Rysxt  
本教程詳細(xì)介紹了如何使用SpringBoot集成SpringAIOpenAIStarter,實現(xiàn)智能對話功能,包括基礎(chǔ)對話、帶上下文對話、高級參數(shù)控制、流式響應(yīng)以及提示詞工程,本文介紹的非常詳細(xì),感興趣的朋友一起看看吧

前言

隨著人工智能技術(shù)的快速發(fā)展,將AI能力集成到企業(yè)級應(yīng)用中變得越來越重要。Spring AI作為Spring生態(tài)系統(tǒng)中的新成員,為Java開發(fā)者提供了標(biāo)準(zhǔn)化、開箱即用的AI集成方案。本教程將詳細(xì)介紹如何使用Spring Boot集成Spring AI OpenAI Starter,快速為您的應(yīng)用添加智能對話功能。

一、環(huán)境準(zhǔn)備

1. 技術(shù)要求

  • ??JDK??: 17 或更高版本
  • ??構(gòu)建工具??: Maven 3.6+ 或 Gradle
  • ??Spring Boot??: 3.2+ (推薦最新穩(wěn)定版)
  • ??OpenAI賬號??: 需要在OpenAI平臺注冊并獲取API Key

2. 創(chuàng)建Spring Boot項目

您可以通過以下兩種方式之一創(chuàng)建項目:

??方式一:使用start.spring.io??

  1. 訪問 start.spring.io
  2. 選擇以下依賴:
    • Spring Web
    • Spring AI (選擇對應(yīng)版本)
    • 其他您可能需要的依賴(如Spring Security等)

??方式二:手動添加依賴??
如果您已有Spring Boot項目,直接在pom.xml中添加以下依賴:

<!-- Spring AI OpenAI Starter -->
<dependency>
    <groupId>io.springboot.ai</groupId>
    <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
    <version>1.0.0</version> <!-- 請使用最新版本 -->
</dependency>
<!-- Spring Boot Web Starter (如果尚未添加) -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

二、配置OpenAI API

1. 獲取OpenAI API Key

  1. 登錄OpenAI平臺
  2. 進(jìn)入"API Keys"頁面
  3. 創(chuàng)建新的API Key并妥善保存

2. 配置application.yml

src/main/resources/application.yml文件中添加以下配置:

spring:
  ai:
    openai:
      api-key: "sk-your-openai-api-key-here"  # 替換為您的實際OpenAI API Key
      base-url: "https://api.openai.com/v1"    # 默認(rèn)值,通常無需修改
      chat:
        options:
          model: "gpt-4-turbo"                 # 您想使用的模型,如gpt-3.5-turbo, gpt-4等
          temperature: 0.7                     # 控制生成文本的隨機(jī)性(0-2)
          max-tokens: 500                      # 生成的最大token數(shù)

??安全建議??:
為了安全起見,建議不要將API Key直接硬編碼在配置文件中,而是使用環(huán)境變量:

spring:
  ai:
    openai:
      api-key: ${OPENAI_API_KEY}  # 從環(huán)境變量讀取

然后,在運(yùn)行應(yīng)用前設(shè)置環(huán)境變量:

export OPENAI_API_KEY=sk-your-openai-api-key-here

或者在Windows命令提示符中:

set OPENAI_API_KEY=sk-your-openai-api-key-here

三、核心功能實現(xiàn)

1. 基礎(chǔ)對話功能

創(chuàng)建AI控制器

創(chuàng)建一個REST控制器來處理AI對話請求:

import org.springframework.ai.chat.ChatClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/ai")
public class AIController {
    private final ChatClient chatClient;
    @Autowired
    public AIController(ChatClient chatClient) {
        this.chatClient = chatClient;
    }
    /**
     * 基礎(chǔ)對話接口
     * @param message 用戶輸入的消息
     * @return AI的回復(fù)
     */
    @GetMapping("/chat")
    public String chat(@RequestParam String message) {
        return chatClient.call(message);
    }
    /**
     * 基礎(chǔ)對話接口(POST方式)
     * @param userInput 用戶輸入
     * @return AI的回復(fù)
     */
    @PostMapping("/chat")
    public String generateText(@RequestBody String userInput) {
        return chatClient.call(userInput);
    }
}
測試基礎(chǔ)對話

啟動Spring Boot應(yīng)用后,您可以通過以下方式測試:

??方式一:瀏覽器訪問??

http://localhost:8080/ai/chat?message=你好,請介紹一下你自己

??方式二:使用cURL測試??

curl -X GET "http://localhost:8080/ai/chat?message=請寫一個簡單的Java Hello World程序"

??方式三:使用Postman等工具發(fā)送POST請求??

  • URL: http://localhost:8080/ai/chat
  • Method: POST
  • Body: raw, text/plain
  • 內(nèi)容: "請解釋Spring Boot的核心特性"

2. 帶上下文的對話

為了讓對話更有連續(xù)性,我們可以實現(xiàn)帶上下文的對話功能:

import org.springframework.ai.chat.ChatClient;
import org.springframework.ai.chat.message.Message;
import org.springframework.ai.chat.message.SystemMessage;
import org.springframework.ai.chat.message.UserMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
@RestController
@RequestMapping("/ai")
public class AIContextController {
    private final ChatClient chatClient;
    // 簡單的上下文存儲(生產(chǎn)環(huán)境應(yīng)使用更可靠的存儲方案)
    private List<Message> conversationHistory = new ArrayList<>();
    @Autowired
    public AIContextController(ChatClient chatClient) {
        this.chatClient = chatClient;
        // 初始化系統(tǒng)消息
        conversationHistory.add(new SystemMessage("你是一個專業(yè)的技術(shù)助手,擅長Java開發(fā)和人工智能相關(guān)知識。"));
    }
    /**
     * 帶上下文的對話
     * @param userInput 用戶輸入
     * @return AI的回復(fù)
     */
    @PostMapping("/chat/context")
    public String chatWithContext(@RequestBody String userInput) {
        // 添加用戶消息到歷史記錄
        conversationHistory.add(new UserMessage(userInput));
        // 創(chuàng)建包含歷史記錄的Prompt
        Prompt prompt = new Prompt(conversationHistory);
        // 調(diào)用AI服務(wù)
        String response = chatClient.call(prompt).getResult().getOutput().getContent();
        // 添加AI回復(fù)到歷史記錄
        conversationHistory.add(new UserMessage(response)); // 注意:這里應(yīng)該是AssistantMessage,但Spring AI可能沒有這個類
        return response;
    }
    /**
     * 清除對話上下文
     */
    @PostMapping("/chat/context/clear")
    public String clearContext() {
        conversationHistory.clear();
        conversationHistory.add(new SystemMessage("你是一個專業(yè)的技術(shù)助手,擅長Java開發(fā)和人工智能相關(guān)知識。"));
        return "對話上下文已清除";
    }
}

??注意??:上面的代碼中使用了UserMessage來表示AI的回復(fù),這在實際情況中可能不太準(zhǔn)確。Spring AI可能提供了專門的AssistantMessage類,如果沒有,您可能需要自己創(chuàng)建或考慮使用其他方式管理上下文。

3. 高級參數(shù)控制

您可以通過自定義OpenAiChatOptions來更精細(xì)地控制AI的行為:

import org.springframework.ai.chat.ChatClient;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.openai.OpenAiChatOptions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/ai")
public class AIAdvancedController {
    private final ChatClient chatClient;
    @Autowired
    public AIAdvancedController(ChatClient chatClient) {
        this.chatClient = chatClient;
    }
    /**
     * 高級參數(shù)控制的對話
     * @param message 用戶輸入
     * @return AI的回復(fù)
     */
    @PostMapping("/chat/advanced")
    public String advancedChat(@RequestBody String message) {
        // 自定義參數(shù)
        OpenAiChatOptions options = OpenAiChatOptions.builder()
                .withModel("gpt-4")                    // 指定模型
                .withTemperature(0.3)                  // 較低的隨機(jī)性,回復(fù)更確定
                .withMaxTokens(1000)                   // 最大生成token數(shù)
                // 可以添加更多選項,如topP, frequencyPenalty, presencePenalty等
                .build();
        // 構(gòu)建 Prompt
        Prompt request = new Prompt(message, options);
        return chatClient.call(request).getResult().getOutput().getContent();
    }
    /**
     * 使用不同模型的對話
     * @param message 用戶輸入
     * @param modelName 模型名稱
     * @return AI的回復(fù)
     */
    @PostMapping("/chat/model/{modelName}")
    public String chatWithSpecificModel(@RequestBody String message, @PathVariable String modelName) {
        OpenAiChatOptions options = OpenAiChatOptions.builder()
                .withModel(modelName)  // 動態(tài)指定模型
                .withTemperature(0.7)
                .withMaxTokens(800)
                .build();
        Prompt request = new Prompt(message, options);
        return chatClient.call(request).getResult().getOutput().getContent();
    }
}

4. 流式響應(yīng)(Server-Sent Events)

對于長時間運(yùn)行的請求,流式響應(yīng)可以提供更好的用戶體驗:

import org.springframework.ai.chat.StreamingChatClient;
import org.springframework.ai.chat.message.UserMessage;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Flux;
@RestController
@RequestMapping("/ai")
public class AIStreamingController {
    private final StreamingChatClient streamingChatClient;
    @Autowired
    public AIStreamingController(StreamingChatClient streamingChatClient) {
        this.streamingChatClient = streamingChatClient;
    }
    /**
     * 流式對話接口
     * @param message 用戶輸入的消息
     * @return 流式的AI回復(fù)
     */
    @GetMapping(value = "/chat/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
    public Flux<String> streamChat(@RequestParam String message) {
        Prompt prompt = new Prompt(new UserMessage(message));
        return streamingChatClient.stream(prompt)
                .map(content -> content.toString());
    }
    /**
     * 流式對話接口(POST方式)
     * @param message 用戶輸入
     * @return 流式的AI回復(fù)
     */
    @PostMapping(value = "/chat/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
    public Flux<String> streamChatPost(@RequestBody String message) {
        Prompt prompt = new Prompt(new UserMessage(message));
        return streamingChatClient.stream(prompt)
                .map(content -> content.toString());
    }
}

??測試流式響應(yīng)??:
您可以使用支持SSE的客戶端(如Postman或?qū)iT的SSE客戶端)來測試流式接口,或者創(chuàng)建一個簡單的前端頁面來展示流式效果。

四、進(jìn)階功能:提示詞工程

提示詞工程(Prompt Engineering)是通過精心設(shè)計提示詞來引導(dǎo)AI生成更準(zhǔn)確、更有用內(nèi)容的技術(shù)。

1. 創(chuàng)建自定義提示詞模板

import org.springframework.ai.chat.ChatClient;
import org.springframework.ai.chat.prompt.PromptTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
// 假設(shè)有一個DTO類用于封裝翻譯請求
record TranslationRequest(String sourceLang, String targetLang, String text) {}
@RestController
@RequestMapping("/ai")
public class AIPromptTemplateController {
    private final ChatClient chatClient;
    @Autowired
    public AIPromptTemplateController(ChatClient chatClient) {
        this.chatClient = chatClient;
    }
    /**
     * 翻譯功能 - 使用提示詞模板
     * @param request 翻譯請求
     * @return 翻譯結(jié)果
     */
    @PostMapping("/translate")
    public String translate(@RequestBody TranslationRequest request) {
        // 創(chuàng)建提示詞模板
        PromptTemplate promptTemplate = new PromptTemplate("""
            將以下{sourceLang}文本翻譯成{targetLang}:
            {text}
            翻譯結(jié)果:
            """);
        // 設(shè)置模板變量
        promptTemplate.add("sourceLang", request.sourceLang());
        promptTemplate.add("targetLang", request.targetLang());
        promptTemplate.add("text", request.text());
        // 渲染提示詞并調(diào)用AI
        return chatClient.call(promptTemplate.render()).getResult().getOutput().getContent();
    }
    /**
     * 代碼生成 - 使用提示詞模板
     * @param language 編程語言
     * @param description 功能描述
     * @return 生成的代碼
     */
    @PostMapping("/generate-code")
    public String generateCode(@RequestParam String language, @RequestParam String description) {
        PromptTemplate promptTemplate = new PromptTemplate("""
            用{language}編寫一個程序,實現(xiàn)以下功能: {description}
            請?zhí)峁┩暾目蛇\(yùn)行代碼,包括必要的導(dǎo)入語句和主函數(shù)。
            代碼應(yīng)該有良好的注釋和結(jié)構(gòu)。
            生成的代碼:
            """);
        promptTemplate.add("language", language);
        promptTemplate.add("description", description);
        return chatClient.call(promptTemplate.render()).getResult().getOutput().getContent();
    }
}

2. 測試提示詞模板

??測試翻譯功能??:

curl -X POST -H "Content-Type: application/json" \
-d '{"sourceLang":"English","targetLang":"Chinese","text":"Hello, how are you today?"}' \
http://localhost:8080/ai/translate

??測試代碼生成功能??:

curl -X POST "http://localhost:8080/ai/generate-code?language=Java&description=一個簡單的計算器,能夠進(jìn)行加減乘除運(yùn)算" \
-H "Content-Type: application/x-www-form-urlencoded"

五、完整示例項目結(jié)構(gòu)

src/
├── main/
│   ├── java/
│   │   └── com/
│   │       └── example/
│   │           └── aiintegration/
│   │               ├── AiIntegrationApplication.java
│   │               ├── controller/
│   │               │   ├── AIController.java
│   │               │   ├── AIContextController.java
│   │               │   ├── AIAdvancedController.java
│   │               │   └── AIStreamingController.java
│   │               └── dto/
│   │                   └── TranslationRequest.java
│   └── resources/
│       ├── application.yml
│       └── static/          # 可選:前端文件
└── test/
    └── java/
        └── com/
            └── example/
                └── aiintegration/
                    └── AiIntegrationApplicationTests.java

主應(yīng)用類

package com.example.aiintegration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class AiIntegrationApplication {
    public static void main(String[] args) {
        SpringApplication.run(AiIntegrationApplication.class, args);
    }
}

六、測試與驗證

1. 啟動應(yīng)用

使用您的IDE或命令行啟動Spring Boot應(yīng)用:

mvn spring-boot:run
# 或
gradle bootRun

2. 測試接口

??基礎(chǔ)對話測試??:

  • GET請求: http://localhost:8080/ai/chat?message=你好,介紹一下Spring Boot
  • 或POST請求到 http://localhost:8080/ai/chat,body為 "你好,介紹一下Spring Boot"

??高級參數(shù)測試??:

  • POST請求到 http://localhost:8080/ai/chat/advanced,body為 "解釋微服務(wù)架構(gòu)的優(yōu)缺點(diǎn)"

??流式響應(yīng)測試??:

  • GET請求: http://localhost:8080/ai/chat/stream?message=給我講一個笑話
  • 使用支持SSE的客戶端查看流式效果

??翻譯功能測試??:

curl -X POST -H "Content-Type: application/json" \
-d '{"sourceLang":"English","targetLang":"Chinese","text":"The quick brown fox jumps over the lazy dog."}' \
http://localhost:8080/ai/translate

3. 單元測試

創(chuàng)建測試類驗證ChatClient的基本功能:

package com.example.aiintegration;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.ai.chat.ChatClient;
import static org.junit.jupiter.api.Assertions.assertNotNull;
@SpringBootTest
class AiIntegrationApplicationTests {
    @Autowired
    private ChatClient chatClient;
    @Test
    void contextLoads() {
    }
    @Test
    void testChatClient() {
        String response = chatClient.call("你好,你能做什么?");
        System.out.println("AI 回復(fù): " + response);
        assertNotNull(response);
    }
}

七、生產(chǎn)環(huán)境建議

1. 安全最佳實踐

  • ??API密鑰管理??:永遠(yuǎn)不要將API密鑰硬編碼在代碼中,使用環(huán)境變量或密鑰管理服務(wù)
  • ??訪問控制??:為AI接口添加適當(dāng)?shù)恼J(rèn)證和授權(quán)
  • ??輸入驗證??:驗證所有用戶輸入,防止濫用和注入攻擊
  • ??速率限制??:實現(xiàn)API速率限制,防止濫用和超額費(fèi)用

2. 性能優(yōu)化

  • ??連接池??:配置適當(dāng)?shù)木W(wǎng)絡(luò)連接池參數(shù)
  • ??緩存??:對常見問題的AI響應(yīng)實現(xiàn)緩存機(jī)制
  • ??異步處理??:對復(fù)雜的AI請求考慮使用異步處理
  • ??監(jiān)控??:監(jiān)控AI接口的性能和使用情況

3. 錯誤處理與重試

  • 實現(xiàn)健壯的錯誤處理機(jī)制
  • 對暫時性錯誤實現(xiàn)重試邏輯
  • 監(jiān)控API使用配額和限制

八、總結(jié)

通過本教程,您已經(jīng)學(xué)會了如何使用Spring Boot集成Spring AI OpenAI Starter,為您的應(yīng)用添加強(qiáng)大的AI能力。從基礎(chǔ)對話功能到高級的流式響應(yīng)和提示詞工程,Spring AI提供了豐富的功能來滿足各種AI集成需求。

Spring AI的優(yōu)勢在于其標(biāo)準(zhǔn)化的API設(shè)計,使得您可以輕松切換不同的AI供應(yīng)商而無需大幅修改業(yè)務(wù)代碼。隨著AI技術(shù)的不斷發(fā)展,這種抽象層將為您的應(yīng)用提供更大的靈活性和未來保障。

到此這篇關(guān)于Spring Boot 集成 Spring AI OpenAI Starter最佳實踐指南的文章就介紹到這了,更多相關(guān)Spring Boot Spring AI OpenAI Starter內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java 根據(jù)經(jīng)緯度獲取地址實現(xiàn)代碼

    java 根據(jù)經(jīng)緯度獲取地址實現(xiàn)代碼

    這篇文章主要介紹了 java 根據(jù)經(jīng)緯度獲取地址實現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • spring?security?自定義Provider?如何實現(xiàn)多種認(rèn)證

    spring?security?自定義Provider?如何實現(xiàn)多種認(rèn)證

    這篇文章主要介紹了spring?security?自定義Provider實現(xiàn)多種認(rèn)證方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java8?Stream流的常用方法匯總

    Java8?Stream流的常用方法匯總

    Java8?API添加了一個新的抽象稱為流Stream,可以讓你以一種聲明的方式處理數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于Java8?Stream流的常用方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • Java java.lang.InstantiationException異常案例詳解

    Java java.lang.InstantiationException異常案例詳解

    這篇文章主要介紹了Java java.lang.InstantiationException異常案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Java Runtime用法實戰(zhàn)案例

    Java Runtime用法實戰(zhàn)案例

    這篇文章主要介紹了Java Runtime用法,結(jié)合實例形式分析了Runtime針對系統(tǒng)內(nèi)存、處理器信息的獲取相關(guān)操作技巧,需要的朋友可以參考下
    2019-07-07
  • Netty分布式Server啟動流程服務(wù)端初始化源碼分析

    Netty分布式Server啟動流程服務(wù)端初始化源碼分析

    本章主要講解server啟動的關(guān)鍵步驟,?讀者只需要了解server啟動的大概邏輯,?知道關(guān)鍵的步驟在哪個類執(zhí)行即可,?并不需要了解每一步的運(yùn)作機(jī)制,?之后會對每個模塊進(jìn)行深度分析
    2022-03-03
  • Mybatis中SQL的執(zhí)行過程詳解

    Mybatis中SQL的執(zhí)行過程詳解

    MyBatis框架通過映射文件或注解將Java代碼中的方法與數(shù)據(jù)庫操作進(jìn)行映射,執(zhí)行過程包括SQL解析、參數(shù)綁定、SQL預(yù)編譯、執(zhí)行、結(jié)果映射、事務(wù)處理、緩存處理和日志記錄
    2024-12-12
  • 利用Intellij Idea連接遠(yuǎn)程服務(wù)器實現(xiàn)遠(yuǎn)程上傳部署功能

    利用Intellij Idea連接遠(yuǎn)程服務(wù)器實現(xiàn)遠(yuǎn)程上傳部署功能

    大家在使用Intellij Idea開發(fā)程序的時候,是不是需要部署到遠(yuǎn)程SSH服務(wù)器運(yùn)行呢,當(dāng)然也可以直接在idea軟件內(nèi)容實現(xiàn)配置部署操作,接下來通過本文給大家分享利用Intellij Idea連接遠(yuǎn)程服務(wù)器實現(xiàn)遠(yuǎn)程上傳部署功能,感興趣的朋友跟隨小編一起看看吧
    2021-05-05
  • Java調(diào)用CXF WebService接口的兩種方式實例

    Java調(diào)用CXF WebService接口的兩種方式實例

    今天小編就為大家分享一篇關(guān)于Java調(diào)用CXF WebService接口的兩種方式實例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Spring Boot中的@ConfigurationProperties注解解讀

    Spring Boot中的@ConfigurationProperties注解解讀

    在SpringBoot框架中,@ConfigurationProperties注解是處理外部配置的強(qiáng)大工具,它允許開發(fā)者將配置文件中的屬性自動映射到Java類的字段上,實現(xiàn)配置的集中管理和類型安全,通過定義配置類并指定前綴,可以將配置文件中的屬性綁定到Java對象
    2024-10-10

最新評論

唐海县| 方山县| 金坛市| 石河子市| 门头沟区| 榕江县| 定襄县| 通榆县| 东平县| 郁南县| 富宁县| 阳泉市| 清水县| 南部县| 赤城县| 奇台县| 北辰区| 九寨沟县| 乌兰县| 塘沽区| 宁陕县| 子长县| 楚雄市| 盐城市| 房产| 晋州市| 什邡市| 饶阳县| 枣阳市| 天长市| 大同县| 赣州市| 沈阳市| 宜州市| 金溪县| 彭阳县| 泸溪县| 葫芦岛市| 定安县| 丰县| 大埔县|