精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

有了 Spring AI ,Java 開發AI應用也就簡單多了

開發 前端
Spring AI解決了AI集成的核心難題:即無縫連接企業數據、API與AI模型,同時也簡化了Java 開發人員對AI應用的編程復雜度,還提供檢索增強生成 (RAG)、函數調用等關鍵功能。

前言

Spring 官方自從發布了 Spring AI,AI 界的門檻兒算是被徹底踹飛了!為什么?因為這就意味著整天只會 CRUD 的 Javaer 們也能開發AI應用了,而且簡單到讓你懷疑人生。那么本文就基于 Spring AI Alibaba 開發一個簡單的 AI 對話應用。

效果展示

Spring AI 實現的AI對話Spring AI 實現的AI對話

實現步驟

基于 Spring AI Alibaba 實現這樣一個AI對話非常簡單,只需要幾行代碼就可以完成。可以跟著下面的步驟操作:

創建一個 SpringBoot 項目

Spring AI Alibaba 提供了 SpringBoot starter。所以,第一步就是創建一個SpringBoot項目引入依賴以及配置。

pom.xml文件添加spring-ai-alibaba-starter依賴

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba.cloud.ai</groupId>
        <artifactId>spring-ai-alibaba-starter</artifactId>
        <version>1.0.0-M3.1</version>
    </dependency>
</dependencies>

application.yml添加;

server:
  port: 8080

spring:
  application:
    name: spring-ai-alibaba-chat
  ai:
    dashscope:
      api-key: xxxx

配置中的api-key是阿里云百煉大模型平臺的憑證,AI的實現最終會調用該模型。

api-key 申請

這里有兩個事項需要注意:

  1. Spring AI Alibaba 基于 Spring Boot 3.x 開發,所以JDK 版本要求為 17 及以上。
  2. spring-ai 相關依賴包還沒有發布到中央倉庫,本地 Maven 倉庫要添加以下配置。
<repositories>
  <repository>
    <id>spring-milestones</id>
    <name>Spring Milestones</name>
    <url>https://repo.spring.io/milestone</url>
    <snapshots>
      <enabled>false</enabled>
    </snapshots>
  </repository>
</repositories>

編寫與大模型交互的 Controller

項目創建成功之后,只需要寫一個Controller就可以實現與AI對話,代碼如下:

@RestController
@RequestMapping("/ai")
public class AIChatController {

    private final ChatClient chatClient;
    
    public AIChatController(ChatClient.Builder builder) {
        this.chatClient = builder
                .build();
    }


    @GetMapping("/chat")
    public String chat(String message) {
        return this.chatClient.prompt()
                .user(message)
                .call()
                .content();
    }
}

代碼中的ChatClient類似于應用程序開發中的服務層,只不過這里由spring-ai-alibaba-starter自動初始化了實例,可以直接提供 AI 服務,最終會調用百煉大模型。

此時就可以啟動應用,通過瀏覽器訪問localhost:8080/ai/chat?message= 進行對話。

編寫通過頁面進行對話的 html

為了直觀的展示效果,簡單實現一個前端和接口交互,通過頁面進行AI對話。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <script src="js/marked.min.js"></script>
    <title></title>
    <style>
        body {
            background-color: #f8f9fa;
            font-family: Arial, sans-serif;
        }

        .container {
            margin: 50px auto;
            width: 800px;
            background-color: #fff;
            padding: 20px;
            border-radius: 5px;
            box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
        }

        h1 {
            text-align: center;
            margin-bottom: 30px;
        }

        label {
            display: block;
            margin-bottom: 10px;
            color: #333;
        }

        input[type="text"] {
            width: 85%;
            padding: 10px;
            border: 1px solid #ccc;
            border-radius: 3px;
        }

        input[type="submit"] {
            background-color: #2ecc71;
            color: #fff;
            border: none;
            padding: 10px 20px;
            border-radius: 3px;
            cursor: pointer;
            width: 10%;
        }

        .chat-box {
            width: 100%;
            height: 500px;
            padding: 10px;
            border: 1px solid #ccc;
            border-radius: 3px;
            overflow-y: scroll;
        }

        .message {
            margin-bottom: 10px;
            padding: 10px;
            background-color: #f1f1f1;
            border-radius: 3px;
        }

        .user-message {
            background-color: #2ecc71;
            color: #fff;
        }

        .bot-message {
            background-color: #e6aa6b;
            color: #fff;
        }

        .loader {
            text-align: center;
        }

        .loader::after {
            content: "";
            display: inline-block;
            width: 20px;
            height: 20px;
            border-radius: 50%;
            border: 2px solid #ccc;
            border-top-color: #2ecc71;
            animation: spin 1s infinite linear;
        }

        @keyframes spin {
            to {
                transform: rotate(360deg);
            }
        }
    </style>
</head>
<body>
<div class="container">
    <h1>AI 對話</h1>
    <form id="form" style="width: 47%;position: absolute;bottom: 150px;margin-left:15px">
        <input type="text" id="message" name="message" placeholder="輸入你的問題">
        <input type="submit" value="發送">
    </form>
    <br>
    <div id="loader" class="loader" style="display: none;"></div>
    <div id="chat-box" class="chat-box"></div>
</div>

<script>
    var loader = document.getElementById("loader");

    document.getElementById("form").addEventListener("submit", function(event) {
        event.preventDefault();

        var messageInput = document.getElementById("message");
        var message = messageInput.value;
        messageInput.value = "";

        var chatBox = document.getElementById("chat-box");

        var userMessage = document.createElement("div");
        userMessage.className = "message";
        userMessage.textContent = "我: " + message;
        chatBox.appendChild(userMessage);
        chatBox.scrollTop = chatBox.scrollHeight;

        loader.style.display = "block";

        var xhr = new XMLHttpRequest();
        xhr.open("GET", "http://localhost:8080/ai/chat?message=" + encodeURIComponent(message), true);
        xhr.onreadystatechange = function() {
            if (xhr.readyState === 4) {
                loader.style.display = "none";

                if (xhr.status === 200) {
                    var response = xhr.responseText;

                    var botMessage = document.createElement("div");
                    botMessage.className = "message bot-message";

                    var botMessageText = document.createElement("span");
                    botMessageText.className = "message-text";
                    botMessage.appendChild(botMessageText);
                    botMessageText.innerHTML = marked.marked(response);

                    chatBox.appendChild(botMessage);
                    chatBox.scrollTop = chatBox.scrollHeight;
                } else if (xhr.status === 400) {
                    var error = JSON.parse(xhr.responseText);

                    var errorMessage = document.createElement("div");
                    errorMessage.className = "message bot-message";
                    errorMessage.textContent = "Bot: " + error.message;
                    chatBox.appendChild(errorMessage);
                    chatBox.scrollTop = chatBox.scrollHeight;
                } else {
                    var errorMessage = document.createElement("div");
                    errorMessage.className = "message bot-message";
                    errorMessage.textContent = "Bot: Failed to connect to the backend service. Please make sure the backend service is running.";
                    chatBox.appendChild(errorMessage);
                    chatBox.scrollTop = chatBox.scrollHeight;
                }
            }
        };

        xhr.onloadstart = function() {
            loader.style.display = "block";
        };

        xhr.onloadend = function() {
            loader.style.display = "none";
        };

        xhr.send();
    });
</script>
</body>
</html>

js 引入的 marked.min.js 可以去GitHub或者聯系我獲取。

至此,就實現了文中開頭的AI對話效果。

需要了解的基本知識

上面的示例其實就是一個SpringBoot項目,對于Javaer肯定不陌生。而對于沒有人工智能相關背景的人來說,如果想要基于 Spring AI 開發一個AI應用產品,還是需要了解一些基本概念的。

  • AI 模型:AI 模型是旨在處理和生成信息的算法,通常模仿人類的認知功能。我們現在基本上聽到的大模型都屬于生成式AI模型,例如ChatGPT、文心一言、通義千問、混元、豆包等。
  • Prompt:提示詞作為生成式大模型的輸入,可以指導模型生成特定的輸出。如果搭建過智能體就會知道,創建一個智能體首先要設置一些提示詞。
  • Token:token作為 AI 模型工作原理的基石,輸入時,模型將單詞轉換為token,輸出時,將token轉換回單詞。在現在的AI模型背景下,token就相當于金錢,一次調用的費用就越高。
  • 模型的認知:一個模型的誕生需要在海量的訓練集中進行學習,所以它的認知中沒有未來的知識。如果想讓模型對現有知識產生認知,有微調、檢索增強生成 (RAG)、函數調用這幾種方式。

對于本文示例中來說,每一次的對話就是模型的一次token輸入和輸出。

實現有記憶的對話

如果運行了上面的示例,并且進行了幾輪對話,會發現大模型并不會理解上下文,也無法實現連貫的對話。

就如上面所說的“模型的認知”,大模型不會記錄對話,所以不會產生上下文關聯。例如我接下來的問答中,并沒有按照我的提問生成“冒險的”故事,只是“冒險的”進行了說明。

Spring AI 實現的AI對話Spring AI 實現的AI對話

那如何讓大模型能夠追蹤、理解并利用先前對話上下文的能力?

spring-ai 支持基于chat memory的對話記憶。在上面的代碼中,只需要在構建chatClient時添加兩行代碼。

private ChatMemory chatMemory = new InMemoryChatMemory();                                            
                                                                                                     
public AIChatController(ChatClient.Builder builder) {                                                
    this.chatClient = builder                                                                        
            .defaultAdvisors(new MessageChatMemoryAdvisor(chatMemory, UUID.randomUUID().toString(), 10))
            .build();                                                                                
}

UUID 會作為此次對話的唯一標識,ChatMemory會將之前的對話內容記錄下來,每次對模型的輸入就是歷史的對話記錄,最終實現對話記憶。

這種做法最終會影響使用大模型的成本,就如上面所說,輸入和輸出都會影響總token數量,而token就相當于金錢。

總結

Spring AI解決了AI集成的核心難題:即無縫連接企業數據、API與AI模型,同時也簡化了Java 開發人員對AI應用的編程復雜度,還提供檢索增強生成 (RAG)、函數調用等關鍵功能。對于Java 開發人員來講,通過 Spring AI 可以探索更多的 AI 應用場景。

責任編輯:武曉燕 來源: Hi程序員
相關推薦

2025-05-27 01:35:00

SpringAI監控

2020-06-29 11:24:39

華為云

2020-12-14 13:39:39

AI人工智能算法

2025-03-31 09:30:52

2020-12-14 15:26:38

AIAI算法

2024-11-12 13:41:49

2023-06-19 09:01:17

2021-11-30 08:04:32

AIIT運維

2025-05-22 02:00:00

AI人工智能前端

2025-02-19 12:00:00

SpringBootDeepSeekAI

2021-01-14 12:06:22

鴻蒙HarmonyOSAI應用

2025-07-28 01:55:00

2021-01-25 09:58:01

鴻蒙HarmonyOS應用開發

2024-11-26 09:50:18

AIjs 工具庫前端開發

2021-01-15 09:50:06

鴻蒙HarmonyOSAI應用

2025-08-08 02:00:00

AI應用開發

2021-01-15 11:36:16

鴻蒙HarmonyOSAI應用

2021-01-19 12:46:45

鴻蒙HarmonyOSHelloworld

2025-05-09 06:30:52

點贊
收藏

51CTO技術棧公眾號

蜜臀av在线观看| 欧美日韩在线观看免费| abab456成人免费网址| 国产欧美一区二区精品忘忧草 | 中文字幕无码日韩专区免费| 国产精品一区二区美女视频免费看| 亚洲欧洲综合另类| 精品欧美一区二区精品久久| 69av视频在线观看| 欧美欧美天天天天操| 亚洲欧美日韩在线高清直播| 肉色超薄丝袜脚交| 欧美18—19sex性hd| 亚洲人成人一区二区在线观看| 精品国产综合| 97人妻人人澡人人爽人人精品 | 亚洲国产精品久久久久婷蜜芽| 成年网站在线| 成人一级视频在线观看| 国产激情久久久| 1024手机在线视频| 国精一区二区| 亚洲成人999| www.国产视频.com| 三级成人黄色影院| 亚洲成av人片在线观看无码| 天堂一区二区三区| 日韩电影免费| 成人国产亚洲欧美成人综合网| 国产精品影片在线观看| aaa人片在线| 欧美激情五月| xxx成人少妇69| 久久只有这里有精品| 精品福利网址导航| 日韩欧美国产三级电影视频| 日韩精品你懂的| 韩日成人影院| 欧美天堂在线观看| 免费看黄在线看| 在线看三级电影| 成人欧美一区二区三区1314| 日韩国产欧美精品| 日本不卡免费播放| aaa国产一区| 国产精品视频免费一区| 亚洲精品久久久狠狠狠爱 | 国产精品久久久久久久久久久新郎 | 国产美女主播在线观看| 免费看欧美美女黄的网站| 亲爱的老师9免费观看全集电视剧| 久久精品久久国产| 亚洲国产激情| 国语自产精品视频在免费| 免费在线一级片| 欧美精品国产一区二区| 久久91亚洲精品中文字幕奶水| 日本高清一二三区| 在线中文字幕第一区| 久久综合亚洲社区| 永久免费看黄网站| 黄色欧美日韩| 91黄色8090| 国产在线观看黄色| 久久激情中文| 国产精品视频久久久久| 91亚洲欧美激情| 国产精品一区二区不卡| 99re视频在线观看| 日韩在线观看视频一区| 99re热视频精品| 欧美精品亚洲精品| 91porn在线观看| 成人欧美一区二区三区视频网页| 黑人巨大国产9丨视频| 日本大胆在线观看| 激情av一区二区| 精品久久久久久久无码| 视频欧美精品| 欧美videofree性高清杂交| 97人妻精品一区二区三区免费 | 久久国产剧场电影| 亚洲xxx自由成熟| 欧美77777| 国产婷婷色一区二区三区 | 五月天丁香社区| 欧美丝袜美腿| 综合欧美国产视频二区| 久久久久亚洲天堂| 久久一区中文字幕| 91午夜理伦私人影院| 欧美一级淫片aaaaaa| 国产丝袜在线精品| 亚洲一区 在线播放| 免费在线小视频| 欧美日韩mp4| 人妻 日韩 欧美 综合 制服| av伊人久久| 欧美夫妻性生活xx| 瑟瑟视频在线免费观看| 国产成人免费高清| 日韩精品第一页| 麻豆蜜桃在线| 亚洲精品911| 日韩av高清在线观看| 亚洲xxxx18| 欧美日本网站| 一区二区三区欧美亚洲| 国产成人无码一二三区视频| 成人乱码手机视频| 亚洲毛片在线看| 国产大片免费看| 日韩激情一二三区| 国产精品福利视频| 日本在线人成| 91福利在线免费观看| 亚洲一二三四五| 成人网18免费网站| 97成人超碰免| 国产成人三级一区二区在线观看一 | 97av视频在线| 99热这里只有精品66| 国产区在线观看成人精品 | 欧美理论电影| 欧美精品一二三区| 国产精品揄拍100视频| 午夜精品久久久久99热蜜桃导演 | 日韩一区二区三区四区五区| 日韩电影中文字幕在线观看| 久久久久久久久久久久国产| 久久精品久久久精品美女| 精品九九九九| 51精品视频| 日韩免费在线观看| 九九精品视频免费| 麻豆专区一区二区三区四区五区| 裸体丰满少妇做受久久99精品| 女子免费在线观看视频www| 欧美久久一二三四区| 国产又粗又黄又猛| 美女精品一区| 欧美日本韩国一区二区三区| 国产精品论坛| 亚洲精品成人网| 国产午夜小视频| 成人免费的视频| 六月婷婷激情综合| 综合久久成人| 欧美极品少妇xxxxⅹ免费视频| 国产成人三级在线播放| 亚洲精选视频免费看| 91蝌蚪视频在线| 欧美日韩久久| 91热精品视频| 在线电影福利片| 精品剧情v国产在线观看在线| 免费一级片在线观看| 风流少妇一区二区| 老太脱裤让老头玩ⅹxxxx| 综合伊人久久| 韩国福利视频一区| 四虎在线视频| 日韩人体视频一二区| 中文字幕免费视频| 美女视频黄久久| 法国空姐在线观看免费| 一区二区三区在线资源| 久久免费成人精品视频| 手机在线观看毛片| 欧美艳星brazzers| 麻豆一区在线观看| 高清免费成人av| 日本精品久久久久久久久久| 亚洲婷婷影院| 国产精品免费一区二区三区都可以| 91在线直播| 制服.丝袜.亚洲.中文.综合| 欧美成人手机视频| wwww国产精品欧美| 久久婷五月综合| 欧美fxxxxxx另类| 欧美成熟毛茸茸复古| 成人综合网站| 欧美大片免费看| 五月婷婷狠狠干| 欧美日韩一二三| 五月婷婷一区二区| 久久综合视频网| 天天影视色综合| 亚洲美女黄网| 亚洲视频导航| 久久久久影视| 国产精品男女猛烈高潮激情| 视频在线这里都是精品| 亚洲欧洲自拍偷拍| 国产免费一区二区三区最新不卡| 亚洲午夜私人影院| youjizz亚洲女人| 成人毛片在线观看| 中文字幕在线综合| 亚洲精品国产日韩| 三年中国中文在线观看免费播放| 红杏aⅴ成人免费视频| 国产精品男女猛烈高潮激情| 国产天堂在线播放视频| 最近中文字幕日韩精品 | 国产精品无码粉嫩小泬| 亚洲国产一区二区在线播放| 又色又爽的视频| 成人福利在线看| 国产福利精品一区二区三区| 日韩午夜免费| 成人小视频在线观看免费| 第一会所sis001亚洲| 国产伦精品一区二区三区视频免费| 精品美女一区| 国产精品91久久久久久| 2019中文字幕在线电影免费| 久久亚洲精品视频| av在线电影院| 亚洲欧美国产va在线影院| 丰满熟女一区二区三区| 欧美一区二区视频观看视频| 国内av在线播放| 色综合久久天天综合网| 国产精品成人久久| 亚洲激情网站免费观看| 天天鲁一鲁摸一摸爽一爽| 国产日韩欧美一区二区三区综合| 人妻体内射精一区二区三区| 国产一区二区91| 国产无色aaa| 老汉av免费一区二区三区| 欧美精品一区二区三区免费播放| 国产欧美一级| 精品视频在线观看一区| 影音先锋亚洲精品| 日韩欧美精品免费| 午夜激情一区| 996这里只有精品| 午夜精品av| 久艹在线免费观看| 亚洲国产二区| 国产精品又粗又长| 在线综合亚洲| 欧美私人情侣网站| 天堂资源在线中文精品| av无码精品一区二区三区| 亚洲制服少妇| 久久综合久久色| 男女视频一区二区| 国产精品自在自线| 国产又黄又大久久| 久久久久久无码精品人妻一区二区| 欧美日韩在线二区| 日韩视频免费观看高清完整版| 国产精品国产精品国产| 色94色欧美sute亚洲线路一ni | 天天操综合网| 亚洲欧美影院| 国产精品精品| 99久re热视频精品98| 欧美一区在线看| 青青在线视频免费观看| 影音先锋在线一区| 国产成人黄色片| 日本伊人午夜精品| 国产三级生活片| 国产精品一二一区| 中文字幕人妻一区| 91女人视频在线观看| 亚洲AV无码国产成人久久| 亚洲国产激情av| 久久嫩草捆绑紧缚| 亚洲动漫第一页| 中文字幕黄色片| 欧美性大战久久久久久久蜜臀| 亚洲一线在线观看| 精品久久久久久无| 国产私拍精品| 久久久精品国产网站| 91jq激情在线观看| 国产精品一区二区久久久久| 国产精品亚洲欧美日韩一区在线 | 亚洲精品免费在线观看| 在线免费日韩av| 色狠狠色噜噜噜综合网| 国产精品无码天天爽视频| 亚洲国内精品视频| 一区二区三区视频网站 | 国产大片中文字幕| 日本道免费精品一区二区三区| 国产日韩精品suv| 亚洲精品国产福利| 麻豆最新免费在线视频| 国产综合在线视频| 日本a人精品| 久久国产精品 国产精品| 午夜精品一区二区三区国产 | 欧美精品一区男女天堂| a天堂中文在线88| 欧美精品久久久久a| 国产成人精品一区二区三区在线 | 国产精品一区二区小说| 99久久精品99国产精品| 99成人在线观看| 色噜噜狠狠一区二区三区果冻| 精品国产九九九| 中文字幕日韩欧美精品在线观看| 123区在线| 91久久国产综合久久蜜月精品| 国产精品欧美三级在线观看| 蜜臀精品一区二区| 九色综合国产一区二区三区| 熟女少妇一区二区三区| 亚洲高清不卡在线观看| 国产毛片久久久久| 伊人久久综合97精品| 国产一二在线播放| av资源站久久亚洲| 99久久久久国产精品| 天天爱天天操天天干| 久久蜜臀中文字幕| 日韩三级视频在线| 欧美成va人片在线观看| 婷婷成人激情| 国产精品日韩电影| 色综合中文网| 无码精品a∨在线观看中文| 成人网男人的天堂| www青青草原| 欧美一区二区大片| 好吊日视频在线观看| 91精品国产自产在线老师啪| 色婷婷亚洲mv天堂mv在影片| 人妻无码视频一区二区三区| 91亚洲永久精品| 日韩欧美三级视频| 亚洲精品美女久久久| av电影院在线看| 国产精品久久亚洲| 欧美天堂亚洲电影院在线观看| 中文 日韩 欧美| 亚洲女厕所小便bbb| av中文在线观看| 久精品免费视频| aiai久久| 被灌满精子的波多野结衣| 成人av网址在线| 日韩欧美一区二区一幕| 亚洲免费视频观看| 成人av三级| 日韩av图片| 蜜臀av性久久久久蜜臀aⅴ | 亚洲一区二区欧美| 少妇喷水在线观看| 97av在线播放| 国产精品免费不| 五月天av在线播放| 一区二区三区精密机械公司| 成人黄色在线观看视频| 欧美精品xxx| 婷婷激情久久| 国产av人人夜夜澡人人爽| 国产精品国产三级国产aⅴ入口 | 国产一区二区三区影视| 在线观看成人av| 国产成人激情av| 日韩黄色一级大片| 一区二区三区日韩在线| 二区三区精品| 免费看毛片的网址| 国产日韩欧美a| 97人妻一区二区精品免费视频| 欧美激情国产高清| 婷婷综合成人| 在线观看免费av网址| 亚洲国产va精品久久久不卡综合| 欧美老女人性开放| 国产日产欧美精品| 极品av少妇一区二区| 久久久久无码精品国产sm果冻| 欧美日韩一区精品| missav|免费高清av在线看| 欧美日韩精品免费观看| 激情欧美日韩一区二区| 精品成人免费视频| 在线视频欧美日韩精品| 第一区第二区在线| 三级a在线观看| 亚洲国产欧美在线人成| 国产精品久久久久久久龚玥菲| 亚洲aⅴ男人的天堂在线观看 | 国产激情视频在线播放| 欧美在线视频免费观看| 天天射—综合中文网| 精品人妻一区二区免费视频| 欧美剧情电影在线观看完整版免费励志电影| 金瓶狂野欧美性猛交xxxx| 亚洲欧美日韩精品在线|