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

Spring AI與DeepSeek實(shí)戰(zhàn)一之快速打造智能對(duì)話應(yīng)用

 更新時(shí)間:2025年03月06日 14:11:30   作者:zlt2000  
本文詳細(xì)介紹了如何通過SpringAI框架集成DeepSeek大模型,實(shí)現(xiàn)普通對(duì)話和流式對(duì)話功能,步驟包括申請(qǐng)API-KEY、項(xiàng)目搭建、配置API-KEY、創(chuàng)建ChatClient對(duì)象、創(chuàng)建對(duì)話接口、切換模型、使用prompt模板、流式對(duì)話等,感興趣的朋友一起看看吧

一、概述

在 AI 技術(shù)蓬勃發(fā)展的今天,國(guó)產(chǎn)大模型 DeepSeek 憑借其 低成本高性能 的特點(diǎn),成為企業(yè)智能化轉(zhuǎn)型的熱門選擇。而 Spring AI 作為 Java 生態(tài)的 AI 集成框架,通過統(tǒng)一API、簡(jiǎn)化配置等特性,讓開發(fā)者無需深入底層即可快速調(diào)用各類 AI 服務(wù)。本文將手把手教你通過 spring-ai 集成 DeepSeek 接口實(shí)現(xiàn)普通對(duì)話與流式對(duì)話功能,助力你的 Java 應(yīng)用輕松接入 AI 能力!

二、申請(qǐng)DeepSeek的API-KEY

相較于直接調(diào)用 DeepSeek 官方的 API,阿里云百煉基于阿里云強(qiáng)大的云計(jì)算基礎(chǔ)設(shè)施,提供了高可用性和穩(wěn)定性的服務(wù),并且支持程序運(yùn)行時(shí)動(dòng)態(tài)切換 模型廣場(chǎng) 中的任意大模型。

登錄阿里云,進(jìn)入 阿里云百煉 的頁(yè)面:

https://bailian.console.aliyun.com/?apiKey=1#/api-key

創(chuàng)建自己的 API-KEY

三、項(xiàng)目搭建

3.1. 開發(fā)環(huán)境要求

  • JDK 17+
  • Spring Boot 3.2.x及以上

3.2. maven配置

Spring Boot 項(xiàng)目的 pom.xml 中添加 spring-ai 依賴

<dependency>
    <groupId>com.alibaba.cloud.ai</groupId>
    <artifactId>spring-ai-alibaba-starter</artifactId>
</dependency>

增加倉(cāng)庫(kù)的配置

<repositories>
    <repository>
        <id>alimaven</id>
        <url>https://maven.aliyun.com/repository/public</url>
    </repository>
    <repository>
        <id>spring-milestones</id>
        <url>https://repo.spring.io/milestone</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
    <repository>
        <id>spring-snapshots</id>
        <url>https://repo.spring.io/snapshot</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>

3.3. 配置 API-KEY

application.yml 中添加以下配置:

spring:
  ai:
    dashscope:
      api-key: sk-xxxxxx

api-key 配置在阿里云百煉里申請(qǐng)的api-key 3.4. 創(chuàng)建ChatClient對(duì)象

private final ChatClient chatClient;
public ChatController(ChatClient.Builder builder) {
    String sysPrompt = """
        你是一個(gè)博學(xué)的智能聊天助手,請(qǐng)根據(jù)用戶提問回答。
        請(qǐng)講中文。
        今天的日期是 {current_date}。
        """;
    this.chatClient = builder
            .defaultSystem(sysPrompt)
            .defaultOptions(
                    DashScopeChatOptions.builder()
                            /**
                             * 值范圍:[0, 2),系統(tǒng)默認(rèn)值0.85。不建議取值為0,無意義
                             */
                            .withTemperature(1.3)
                            .withModel("deepseek-v3")
                            .build()
            )
            .build();
}
  • defaultSystem 指定系統(tǒng) prompt 來約束大模型的行為或者提供一些上下文信息,如這里告訴大模型今天的日期是多少,支持占位符;
  • defaultOptions 配置模型的參數(shù)
    • withTemperature 用于控制隨機(jī)性和多樣性的程度,值越高大模型回復(fù)的內(nèi)容越豐富越天馬行空
    • withModel 配置模型廣場(chǎng)中的模型名稱,這里填寫 deepseek-v3

模型廣場(chǎng)的模型名稱清單:https://help.aliyun.com/zh/model-studio/getting-started/models

3.5. 創(chuàng)建對(duì)話接口

@GetMapping(value = "/chat")
public String chat(@RequestParam String input, HttpServletResponse response) {
    // 設(shè)置字符編碼,避免亂碼
    response.setCharacterEncoding("UTF-8");
    return chatClient.prompt().user(input)
            .system(s -> s.param("current_date", LocalDate.now().toString()))
            .call()
            .content();
}

每次調(diào)用接口時(shí),通過 system 來給 current_date 占位符動(dòng)態(tài)賦值。

調(diào)用示例

問身份

問日期

3.6. 切換模型

@GetMapping(value = "/chat")
public String chat(@RequestParam String input, @RequestParam(required = false) String model, HttpServletResponse response) {
    response.setCharacterEncoding("UTF-8");
    if (StrUtil.isEmpty(model)) {
        model = "deepseek-v3";
    }
    return chatClient.prompt().user(input)
            .system(s -> s.param("current_date", LocalDate.now().toString()))
            .options(DashScopeChatOptions.builder().withModel(model).build())
            .call()
            .content();
}

使用 withModel 來配置模型名稱

調(diào)用示例

切換deepseek-r1模型

切換通義千問模型

3.7. 使用prompt模板

通過 PromptTemplate 可以編輯復(fù)雜的提示詞,并且也支持占位符

@GetMapping(value = "/chatTemp")
public String chatTemp(@RequestParam String input, HttpServletResponse response) {
    response.setCharacterEncoding("UTF-8");
    // 使用PromptTemplate定義提示詞模板
    PromptTemplate promptTemplate = new PromptTemplate("請(qǐng)逐步解釋你的思考過程: {input}");
    Prompt prompt = promptTemplate.create(Map.of("input", input));
    return chatClient.prompt(prompt)
            .system(s -> s.param("current_date", LocalDate.now().toString()))
            .call()
            .content();
}

這里提出讓 deepseek-v3 進(jìn)行逐步拆分思考,并把思考過程返回。

調(diào)用示例

可以看到大模型會(huì)拆分多步來進(jìn)行推論結(jié)果。

3.8. 使用流式對(duì)話

當(dāng)前接口需等待大模型完全生成回復(fù)內(nèi)容才能返回,這用戶體驗(yàn)并不好。為實(shí)現(xiàn)類似 ChatGPT 的逐句實(shí)時(shí)輸出效果,可采用流式傳輸技術(shù)(Streaming Response)。

@GetMapping(value = "/streamChat", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<String> streamChat(@RequestParam String input, HttpServletResponse response) {
    response.setCharacterEncoding("UTF-8");
    // 使用PromptTemplate定義提示詞模板
    PromptTemplate promptTemplate = new PromptTemplate("請(qǐng)逐步解釋你的思考過程: {input}");
    Prompt prompt = promptTemplate.create(Map.of("input", input));
    return chatClient.prompt(prompt)
            .system(s -> s.param("current_date", LocalDate.now().toString()))
            .stream()
            .content()
            .concatWith(Flux.just("[DONE]"))
            .onErrorResume(e -> Flux.just("ERROR: " + e.getMessage(), "[DONE]"));
}
  • 調(diào)用時(shí)把 call() 改成 stream()
  • 并且遵循SSE協(xié)議最后發(fā)送[DONE]終止標(biāo)識(shí)

調(diào)用示例

  • data: xxx 這種是 Server-Sent Events 的格式要求;
  • 需要前端搭配 EventSource 或 WebSocket 等方式來接收流式數(shù)據(jù),并結(jié)合 marked.js 來正確顯示 markdown 語(yǔ)法。

四、總結(jié)

雖然通過 Spring AI 能夠快速完成 DeepSeek 大模型與 Spring Boot 項(xiàng)目的對(duì)接,實(shí)現(xiàn)基礎(chǔ)的對(duì)話接口開發(fā),但這僅是智能化轉(zhuǎn)型的初級(jí)階段。要將大模型能力真正落地為生產(chǎn)級(jí)應(yīng)用,還是需實(shí)現(xiàn)以下技術(shù):

  • 能力擴(kuò)展層:通過 智能體 實(shí)現(xiàn)意圖理解與任務(wù)調(diào)度,結(jié)合 FunctionCall 實(shí)現(xiàn)結(jié)構(gòu)化數(shù)據(jù)交互,實(shí)現(xiàn)AI與業(yè)務(wù)系統(tǒng)的無縫對(duì)接;
  • 知識(shí)增強(qiáng)層:應(yīng)用 RAG(檢索增強(qiáng)生成)技術(shù)構(gòu)建領(lǐng)域知識(shí)庫(kù),解決大模型幻覺問題,支撐專業(yè)場(chǎng)景的精準(zhǔn)問答;
  • 流程編排層:設(shè)計(jì) Agent 工作流實(shí)現(xiàn)復(fù)雜業(yè)務(wù)邏輯拆解,支持多步驟推理與自動(dòng)化決策;
  • 模型優(yōu)化層:基于業(yè)務(wù)數(shù)據(jù)實(shí)施模型微調(diào) Fine-tuning 提升垂直場(chǎng)景的響應(yīng)質(zhì)量和可控性。

五、完整代碼

Gitee地址:

https://gitee.com/zlt2000/zlt-spring-ai-app

Github地址:

https://github.com/zlt2000/zlt-spring-ai-app

到此這篇關(guān)于Spring AI與DeepSeek實(shí)戰(zhàn)一:快速打造智能對(duì)話應(yīng)用的文章就介紹到這了,更多相關(guān)Spring AI DeepSeek智能對(duì)話內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java使用Poi導(dǎo)出Excel表格方法實(shí)例

    Java使用Poi導(dǎo)出Excel表格方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于Java使用Poi導(dǎo)出Excel表格的相關(guān)資料,Java POI是一個(gè)用于操作Microsoft Office格式的Java API庫(kù),可以使用它來導(dǎo)出Excel文件,需要的朋友可以參考下
    2023-10-10
  • java基于poi導(dǎo)出excel透視表代碼實(shí)例

    java基于poi導(dǎo)出excel透視表代碼實(shí)例

    這篇文章主要介紹了java基于poi導(dǎo)出excel透視表代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Spring 事件監(jiān)聽機(jī)制實(shí)現(xiàn)跨模塊調(diào)用的思路詳解

    Spring 事件監(jiān)聽機(jī)制實(shí)現(xiàn)跨模塊調(diào)用的思路詳解

    之前一個(gè)項(xiàng)目,有兩個(gè)模塊,A 模塊需要依賴 B 模塊,但現(xiàn)在 B 模塊有地方需要調(diào)用 A 模塊的方法,如果直接依賴,又會(huì)產(chǎn)生循環(huán)依賴問題,最終選擇使用 spring 的事件監(jiān)聽來解決該問題,下面給大家介紹Spring 事件監(jiān)聽機(jī)制實(shí)現(xiàn)跨模塊調(diào)用的思路,感興趣的朋友一起看看吧
    2024-05-05
  • spring-security關(guān)閉登錄框的實(shí)現(xiàn)示例

    spring-security關(guān)閉登錄框的實(shí)現(xiàn)示例

    這篇文章主要介紹了spring-security關(guān)閉登錄框的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • 使用fastjson中的JSONPath處理json數(shù)據(jù)的方法

    使用fastjson中的JSONPath處理json數(shù)據(jù)的方法

    這篇文章主要介紹了使用fastjson中的JSONPath處理json數(shù)據(jù)的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • 如何從eureka獲取服務(wù)的ip和端口號(hào)進(jìn)行Http的調(diào)用

    如何從eureka獲取服務(wù)的ip和端口號(hào)進(jìn)行Http的調(diào)用

    這篇文章主要介紹了如何從eureka獲取服務(wù)的ip和端口號(hào)進(jìn)行Http的調(diào)用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java實(shí)現(xiàn)生成二維碼展示到瀏覽器的示例代碼

    Java實(shí)現(xiàn)生成二維碼展示到瀏覽器的示例代碼

    這篇文章主要介紹了Java實(shí)現(xiàn)生成二維碼展示到瀏覽器的示例代碼,要實(shí)現(xiàn)在瀏覽器展示二維碼,那么首先需要html文件,通過Java生成二維碼的工具類,在controller層調(diào)用接口,就可以實(shí)現(xiàn)在瀏覽器上展示二維碼,需要的朋友可以參考下
    2024-01-01
  • JAVA 統(tǒng)計(jì)字符串中中文,英文,數(shù)字,空格,特殊字符的個(gè)數(shù)

    JAVA 統(tǒng)計(jì)字符串中中文,英文,數(shù)字,空格,特殊字符的個(gè)數(shù)

    這篇文章主要介紹了JAVA 統(tǒng)計(jì)字符串中中文,英文,數(shù)字,空格,特殊字符的個(gè)數(shù) ,本文通過一段代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-06-06
  • Windows 下安裝配置 Eclipse詳細(xì)教程

    Windows 下安裝配置 Eclipse詳細(xì)教程

    Eclipse是一款非常優(yōu)秀的開源IDE,非常適合Java開發(fā),由于支持插件技術(shù),受到了越來越多的開發(fā)者的歡迎。配合眾多令人眼花繚亂的插件,完全可以滿足從企業(yè)級(jí)Java應(yīng)用到手機(jī)終端Java游戲的開發(fā)。本文將帶您手把手步入Eclipse的廣闊天地
    2016-09-09
  • SpringBoot參數(shù)校驗(yàn)的最佳實(shí)戰(zhàn)教程

    SpringBoot參數(shù)校驗(yàn)的最佳實(shí)戰(zhàn)教程

    開發(fā)過程中,后臺(tái)的參數(shù)校驗(yàn)是必不可少的,下面這篇文章主要給大家介紹了關(guān)于SpringBoot參數(shù)校驗(yàn)的最佳實(shí)戰(zhàn),文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-08-08

最新評(píng)論

长岛县| 荣昌县| 天柱县| 太康县| 自贡市| 东丽区| 姚安县| 合山市| 五华县| 中山市| 舞阳县| 疏附县| 平定县| 亚东县| 农安县| 安达市| 舞阳县| 宾川县| 宽甸| 固原市| 离岛区| 华池县| 冷水江市| 板桥市| 丰顺县| 潜江市| 泸溪县| 景德镇市| 维西| 南平市| 厦门市| 广德县| 曲周县| 闽清县| 瑞金市| 临沧市| 额尔古纳市| 潜江市| 满洲里市| 永清县| 定西市|