20240603每日AI------------項目引入Spring Cloud Alibaba AI (二)

項目源碼解析

在這里插入圖片描述

前端代碼:

<div class="container"><h1>Spring Cloud Alibaba AI Example</h1><form id="form"><label for="message">User Message</label><input type="text" id="message" name="message" placeholder="Entry your question...(make api key is effective)!"><br><br><input type="submit" value="Send"></form><br><div id="loader" class="loader" style="display: none;"></div><div id="chat-box" class="chat-box"></div>
</div>

該代碼引入一個form表單,供用戶進行信息輸入
chat-box為AI機器回復后,自動補充的div,可為用戶展示對應的AI消息。

JavaScript代碼

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 user-message";userMessage.textContent = "User: " + message;chatBox.appendChild(userMessage);chatBox.scrollTop = chatBox.scrollHeight;loader.style.display = "block";var xhr = new XMLHttpRequest();xhr.open("GET", "http://localhost:8080/ai/example?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();
});

以上代碼編寫了一個前后端的請求方法,請求后端/example接口,當用戶點擊消息發送時候實時和后端接口進行交互,后臺接口獲取到請求后,根據AI大模型返回給前端消息。

后端代碼

controller層


("tongYiSimpleServiceImpl")
private TongYiService tongYiSimpleService;("/example")
public String completion((value = "message", defaultValue = "Tell me a joke")String message
) {return tongYiSimpleService.completion(message);
}
("/stream")
public Map<String, String> streamCompletion((value = "message", defaultValue = "請告訴我西紅柿燉牛腩怎么做?")String message
) {return tongYiSimpleService.streamCompletion(message);
}

service層

public interface TongYiService {/*** Hello World example.** @param message conversation content question.* @return AI answer.*/String completion(String message);}/*** Stream call.** @param message conversation content question.* @return AI answer.*/Map<String, String> streamCompletion(String message);

impl層
編寫聊天服務實現類,由 Spring AI 自動注入 ChatClient、StreamingChatClient,ChatClient 屏蔽底層通義大模型交互細節。


public class TongYiSimpleServiceImpl extends AbstractTongYiServiceImpl {private final ChatClient chatClient;private final StreamingChatClient streamingChatClient;public TongYiSimpleServiceImpl(ChatClient chatClient, StreamingChatClient streamingChatClient) {this.chatClient = chatClient;this.streamingChatClient = streamingChatClient;}
}public String completion(String message) {Prompt prompt = new Prompt(new UserMessage(message));return chatClient.call(prompt).getResult().getOutput().getContent();}public Map<String, String> streamCompletion(String message) {StringBuilder fullContent = new StringBuilder();streamingChatClient.stream(new Prompt(message)).flatMap(chatResponse -> Flux.fromIterable(chatResponse.getResults())).map(content -> content.getOutput().getContent()).doOnNext(fullContent::append).last().map(lastContent -> Map.of(message, fullContent.toString())).block();log.info(fullContent.toString());return Map.of(message, fullContent.toString());}

結語

自此一個簡單的Spring Cloud Alibaba AI的聊天機器人就集成好了,后續會繼續跟進講解如何實現文生圖等其余AI功能。

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

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

相關文章

大模型PEFT(一)之推理實踐學習記錄

1. 簡介 多種模型: LLaMA、Mistral、Mixtral-MoE、Qwen、Yi、Gemmha、Baichuan、ChatGLM、Phi等等。集成方法:(增量)預訓練、指令監督微調、獎勵模型訓練、PPO訓練和DPO訓練。多種精度:32比特全參數微調、16比特凍結微調、16比特LORA微調和基于AQLM/AWQ/GPTQ/LLM.int8 的2/4/8…

一篇文章掌握Java的80%:面向對象與并發編程

Java作為一種廣泛使用的計算機編程語言&#xff0c;其強大之處在于其面向對象的特性和對并發編程的良好支持。作為一名程序員&#xff0c;我深知掌握Java的面向對象概念、集合框架、多線程與并發編程&#xff0c;以及JVM基礎對于編寫高效、可維護的代碼至關重要。本文將引導你快…

操作字符串獲取文件名字(包含類型)

記錄一種操作字符串獲取文件名字的操作方式&#xff0c;方便后期的使用。示例&#xff1a; 輸入&#xff1a;"D:/code/Test/Test.txt" 輸出&#xff1a;"Test.txt" 設計思路&#xff1a; 首先查找路徑中最后一個”/“&#xff0c;然后再通過字符串截取的…

湖南源點調研 為什么中小企業產品上市前一定要做市場調研?

本文由湖南長沙&#xff08;產品前測&#xff09;源點調研咨詢編輯發布 可能有很多企業主會表示&#xff0c;市場調研&#xff0c;產品調研&#xff0c;不都是大公司、大品牌、上市公司才會有的流程嗎&#xff0c;像我們這種小企業、小品牌、小廠家沒有必要去那么做&#xff0…

Python文本分詞工具庫-jieba

內容目錄 一、分詞二、設置分詞三、詞性信息四、關鍵詞提取 jieba庫是一個針對中文文本的分詞工具庫&#xff0c;廣泛應用于自然語言處理&#xff08;NLP&#xff09;領域的中文文本預處理階段。 主要功能: 中文分詞&#xff1a;能夠將連續的中文文本切割成有意義的詞語序列&a…

變壓器中性點接地電阻柜的出廠標準是什么

變壓器中性點接地電阻柜的出廠標準是什么&#xff1f; 現代電氣配電系統中&#xff0c;接地電阻是保障人身安全的非常重要的設施。在高壓電氣設備中&#xff0c;中性點接地電阻柜的作用是限制設備中的過電流和短路故障所產生的電流&#xff0c;以保障人身安全。變壓器中性點接…

楊輝三角形及其C語言實現

一、引言 楊輝三角形&#xff08;Pascal’s Triangle&#xff09;&#xff0c;又稱帕斯卡三角形&#xff0c;是一個在數學中經常出現的數表。它的構造規則非常簡單&#xff1a;三角形中的每個數字等于它上方兩數字之和&#xff08;或者說&#xff0c;它是位于它肩上的兩個數字…

開源VS閉源:大模型發展路徑之爭,你站哪一派?

文章目錄 引言一、數據隱私1.1開源大模型的數據隱私1.2 閉源大模型的數據隱私1.3 綜合考量 二、商業應用2.1 開源大模型的商業應用2.2 閉源大模型的商業應用2.3 商業應用的綜合考量 三、社區參與3.1 開源大模型的社區參與3.2 閉源大模型的社區參與3.3 綜合考量 結論 引言 在人…

解析“分層引流”在顱內感染治療中的價值意義

臨床中&#xff0c;化膿性顱內感染的治療一直是界內關注的重點。近年來&#xff0c;得益于醫療技術的持續革新與提升&#xff0c;顱內感染的治療方法也獲得了不斷的更新與優化。在此背景下&#xff0c;北京精誠博愛醫院所倡導的“分層引流”理念&#xff0c;作為一種新興的治療…

外貿小白到銷冠,如何30天快速提升?

外貿從業8年&#xff0c;在工廠從0-1做外貿&#xff0c;外貿的坑踩過很多&#xff0c;也做出了很多出色的業績&#xff0c;希望這篇文章可以給到外貿新人快速提升的思路。 對于剛剛進入外貿行業的職場新人&#xff1f;應該怎么做&#xff1f; 第一個月應該學什么&#xff1f;…

什么牌子的開放式耳機質量好?2024超強實力派品牌推薦!

耳機對于一個音樂人有重要這個不必多說&#xff0c;我朋友是個音樂編輯&#xff0c;他經常需要長時間佩戴耳機進行音頻編輯和混音工作。在嘗試過多款開放式耳機后&#xff0c;都沒找到合適的。今天&#xff0c;我將從專業角度為大家帶來幾款熱門開放式耳機的測評報告&#xff0…

第二證券炒股知識:股票內盤外盤代表什么意思?

股票內盤是主動性賣盤&#xff0c;表明以買入價成交的股數&#xff0c;持股的投資者主動以等于或是低于買一、買二、買三、買四、買五的價格賣出手中持有的股份&#xff0c;買入成交數量核算參加內盤。 股票外盤是主動性買盤&#xff0c;表明以賣出價成交的股數&#xff0c;場…

跟著大佬學RE(一)

學了一個 map&#xff08;&#xff09;函數的使用 import base64rawData "e3nifIH9b_CndH" target list(map(ord, rawData)) # map 函數將 rawData 中的每個字符傳遞給 ord 函數。ord 函數返回給定字符的 Unicode 碼點 print(target) # 打印 map 對象的內存地址&…

電腦中病毒了怎么辦?7招教你保護電腦安全!

“不知道怎么回事&#xff0c;我的電腦莫名其妙就中病毒了&#xff0c;實在不知道應該怎么操作了&#xff0c;希望大家可以幫我&#xff01;” 在數字化時代的浪潮中&#xff0c;電腦已成為我們生活與工作中不可或缺的一部分。然而&#xff0c;就像任何事物都有其陰暗面一樣&am…

Python | 武理刷題

1. 為什么是非法的&#xff1f; a1a1 在Python&#xff08;以及大多數其他編程語言&#xff09;中&#xff0c;表達式 a1a1 是非法的&#xff0c;因為它試圖將一個值&#xff08;a1 的結果&#xff09;賦給一個表達式&#xff08;a1 本身&#xff09;&#xff0c;而不是一個…

ip地址快速切換軟件有哪些好處

ip地址快速切換軟件有哪些好處&#xff1f;IP地址快速切換軟件具有諸多顯著的好處&#xff0c;以下是對其主要優勢的詳細闡述&#xff1a; 首先&#xff0c;IP地址快速切換軟件極大地提升了網絡活動的靈活性和便捷性。對于需要經常切換網絡環境或進行多賬號管理的用戶而言&…

新版 Vivado 2024.1分享(附安裝包)

Vivado新版本來了&#xff0c;文末附下載方法。 Vivado 2024.1版本的亮點主要集中在多個方面的功能增強和優化上。 Vivado 2024.1版主要亮點&#xff1a; 通用訪問與性能提升&#xff1a; MicroBlaze? V軟處理器&#xff08;基于RISC V開源ISA&#xff09;提供了更廣泛的通…

Python應用開發——Streamlit 創建多頁面應用程序進行APP的構建

創建多頁面應用程序 在附加功能中,我們介紹了多頁面應用程序,包括如何定義頁面、構建和運行多頁面應用程序,以及如何在用戶界面的頁面間導航。更多詳情,請參閱多頁面應用程序指南Multipage apps - Streamlit Docs 在本指南中,讓我們通過將上一版本的 streamlit hello 應…

基于深度學習的音樂合成算法實例

基于深度學習的音樂合成算法可以生成高質量的音樂片段。以下是一個簡化的基于深度學習的音樂合成算法實例,使用了LSTM網絡來生成音樂序列。這個示例展示了如何使用LSTM網絡來訓練和生成音樂。 數據準備 首先,需要準備訓練數據。可以使用MIDI文件作為訓練數據,并將其轉換為…

AI大模型在穿戴設備健康中的心率深度融合與案例分析

文章目錄 1. 架構設計2. 應用場景3. 實現步驟3.1 步驟1&#xff1a;數據預處理3.2 步驟2&#xff1a;邊緣計算初步分析3.3 步驟3&#xff1a;數據上傳到云端3.4 步驟4&#xff1a;云端復雜分析3.5 步驟5&#xff1a;深度學習模型訓練與部署 4. 云端API設計4.1 安裝Flask4.2 API…