基于Springboot+微信小程序調用文心一言大模型實現AI聊天

一、文章前言

此文主要實現基于Springboot+微信小程序調用文心一言大模型實現AI聊天對話功能,使用Java作為后端語言進行支持,界面友好,開發簡單。

二、開發流程及工具準備

2.1、登錄百度智能云平臺,獲取 API Key 和 Secret Key兩個憑證
2.2、注冊微信公眾平臺賬號。
2.3、下載安裝IntelliJ IDEA(后端語言開發工具),Mysql數據庫,微信Web開發者工具。

三、開發步驟

1.創建maven project

先創建一個名為SpringBootDemo的項目,選擇【New Project】
在這里插入圖片描述

然后在彈出的下圖窗口中,選擇左側菜單的【New Project】(注:和2022之前的idea版本不同,這里左側沒有【Maven】選項,不要選【Maven Archetype】!!!),輸入Name(項目名):SpringBootDemo,language選擇【java】,build system選擇【maven】,然后選擇jdk,我這里選的是jdk18.

在這里插入圖片描述然后點擊【Create】
在這里插入圖片描述

2.在project下創建module

點擊右鍵選擇【new】—【Module…】
在這里插入圖片描述
左側選擇【Spring initializr】,通過idea中集成的Spring initializr工具進行spring boot項目的快速創建。窗口右側:name可根據自己喜好設置,group和artifact和上面一樣的規則,其他選項保持默認值即可,【next】
在這里插入圖片描述

Developer Tools模塊勾選【Spring Boot DevTools】,web模塊勾選【Spring Web】

在這里插入圖片描述

此時,一個Springboot項目已經搭建完成,可開發后續功能

3.編寫一個消息實體類、Mapper、service(三層架構)

@Data
public class Chat {@TableId(type = IdType.AUTO)private Long id;private Long userId;private Long targetUserId;private LocalDateTime createTime;private String userName;private String targetUserName;private String content;}

由于我們使用mybatis-plus,所以簡單的增刪改查不用自己寫,框架自帶了,只需要實現或者繼承他的Mapper、Service
在這里插入圖片描述在這里插入圖片描述

4.編寫調用ai服務類

//獲取AccessKey
public static String GetAccessToken()
{String url = "https://aip.baidubce.com/oauth/2.0/token";String params="grant_type=client_credentials&client_id=xxxx&client_secret=xxxxx";// 發送 POST 請求String response = HttpUtil.post(url, params);JSONObject json=JSONObject.parseObject(response);return json.getString("access_token");
}

5.創建控制器Controller

先創建Controller Package
在這里插入圖片描述

創建一個Controller
在這里插入圖片描述
輸入類名,選在【Class】
在這里插入圖片描述

因為要編寫Rest風格的Api,要在Controller上標注@RestController注解

6.創建具體的Api接口

@RestController
public class DemoController {@RequestMapping("chat-gpt")public Map chat(String sender){String token= GetAccessToken();List<MessageDTO> messageDTOS=new ArrayList<>();messageDTOS.add(new MessageDTO("user",sender));Map<String, Object> map=new HashMap<>();map.put("user_id","");map.put("messages",messageDTOS);map.put("temperature",0.95);map.put("top_p",0.8);map.put("penalty_score",1);map.put("disable_search",false);map.put("enable_citation",false);map.put("stream",false);String url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/ernie-speed-128k?access_token="+token;String response = HttpUtil.createPost(url).header("Content-Type", "application/json").body(JSONObject.toJSONString(map)).execute().body();ReturnMap returnMap = new ReturnMap();returnMap.setData(JSONObject.parse(response));return returnMap.getreturnMap();}}

7.小程序代碼
在這里插入圖片描述
3.20、在pages文件夾下面創建一個文件夾并新建對應的page文件,并實現聊天對話框樣式。
在這里插入圖片描述

在這里插入圖片描述

<view class="cu-chat" id="j_page"><view class="cu-item 'self'" wx:for="{{chatData}}"><view class="main"><view class="content shadow bg-green"><text>{{item.content}}</text></view></view><view class="cu-avatar radius" style="background-image:url(../../../images/cat.jpg)"></view><view class="date">{{item.createTime}}</view></view>
</view><view class="cu-bar foot input {{InputBottom!=0?'cur':''}}" style="bottom:{{InputBottom}}px"><view class="action"><text class="cuIcon-sound text-grey"></text></view><input class="solid-bottom" value="{{content}}" bindinput="formMsg"  bindfocus="InputFocus" bindblur="InputBlur" adjust-position="{{false}}" focus="{{false}}" maxlength="300" cursor-spacing="10"></input><view class="action"><text class="cuIcon-emojifill text-grey"></text></view><button class="cu-btn bg-green shadow" bindtap="sendMsg">發送</button>
</view>
.cu-chat {display: flex;flex-direction: column;
}.cu-chat .cu-item {display: flex;padding: 30rpx 30rpx 70rpx;position: relative;
}.cu-chat .cu-item>.cu-avatar {width: 80rpx;height: 80rpx;
}.cu-chat .cu-item>.main {max-width: calc(100% - 260rpx);margin: 0 40rpx;display: flex;align-items: center;
}.cu-chat .cu-item>image {height: 320rpx;
}.cu-chat .cu-item>.main .content {padding: 20rpx;border-radius: 6rpx;display: inline-flex;max-width: 100%;align-items: center;font-size: 30rpx;position: relative;min-height: 80rpx;line-height: 40rpx;text-align: left;
}.cu-chat .cu-item>.main .content:not([class*="bg-"]) {background-color: var(--white);color: var(--black);
}.cu-chat .cu-item .date {position: absolute;font-size: 24rpx;color: var(--grey);width: calc(100% - 320rpx);bottom: 20rpx;left: 160rpx;
}.cu-chat .cu-item .action {padding: 0 30rpx;display: flex;align-items: center;
}.cu-chat .cu-item>.main .content::after {content: "";top: 27rpx;transform: rotate(45deg);position: absolute;z-index: 100;display: inline-block;overflow: hidden;width: 24rpx;height: 24rpx;left: -12rpx;right: initial;background-color: inherit;
}.cu-chat .cu-item.self>.main .content::after {left: auto;right: -12rpx;
}

3.22、準備兩張頭像,在WXML中根據對應的用戶名判斷聊天記錄是否是自己發出,并賦對應的class樣式,后續這個步驟可以直接在接口返回的數據中進行判斷,請求查詢列表的接口將用戶token作為參數傳輸過去即可。


<view class="cu-chat" id="j_page"><view class="cu-item {{item.userId=='2'?'self':''}}" wx:for="{{chatData}}"><view class="cu-avatar radius" style="background-image:url(../../../images/cat.jpg)" wx:if="{{item.userId=='1'}}"></view><view class="main"><view class="content shadow {{item.userId=='1'?'bg-green':''}}"><text>{{item.content}}</text></view></view><view class="cu-avatar radius" style="background-image:url(../../../images/dog.jpg)" wx:if="{{item.userId=='2'}}"></view><view class="date">{{item.createTime}}</view></view>
</view> 

3.23、這里需要注意的是,我們需要在每次發送消息后將頁面內容定位在底部,一直保持一個閱讀最新消息的狀態。

wx.pageScrollTo({scrollTop: 9999
})

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

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

相關文章

leaflet前端初始化項目

1、通過npm安裝leaflet包&#xff0c;或者直接在項目中引入leaflet.js庫文件。 npm 安裝&#xff1a;npm i leaflet 如果在index.html中引入leaflet.js,在項目中可以直接使用變量L. 注意:盡量要么使用npm包&#xff0c;要么使用leaflet.js庫&#xff0c;兩者一起使用容易發生…

Deepseek官網接口文檔

API 接口 生成完成 生成聊天完成 創建模型 列出本地模型 顯示模型信息 復制模型 刪除模型 拉取模型 推送模型 生成嵌入 列出運行中的模型 版本 約定 模型名稱 模型名稱遵循 model:tag 格式&#xff0c;其中 model 可以有一個可選的命名空間&#xff0c;例如 ex…

容器運行常見數據庫

一.涉及鏡像壓縮包 均為amd架構版本&#xff1a;mysql:5.7.42、postgres:13.16、dm8:20250206_rev257733_x86_rh6_64、oceanbase-ce:v4.0、opengauss:5.0.2 通過網盤分享的文件&#xff1a;db.tgz 鏈接: https://pan.baidu.com/s/1EBbFPZj1FxCA4_GxjVunWg?pwd563s 提取碼: 5…

python爬蟲系列課程2:如何下載Xpath Helper

python爬蟲系列課程2:如何下載Xpath Helper 一、訪問極簡插件官網二、點擊搜索按鈕三、輸入xpath并點擊搜索四、點擊推薦下載五、將下載下來的文件解壓縮六、打開擴展程序界面七、將xpath.crx文件拖入擴展程序界面一、訪問極簡插件官網 極簡插件官網地址:https://chrome.zzz…

PHP支付寶--轉賬到支付寶賬戶

官方參考文檔&#xff1a; ?https://opendocs.alipay.com/open/62987723_alipay.fund.trans.uni.transfer?sceneca56bca529e64125a2786703c6192d41&pathHash66064890? 可以使用默認應用&#xff0c;也可以自建新應用&#xff0c;此處以默認應用來講解【默認應用默認支持…

前端開發崗模擬面試題套卷A答案及解析(一)技術面部分

前端開發崗模擬面試題套卷A答案及解析(一)技術面部分 (一)技術面 一、JavaScript核心技術(ES6+) 1-1、實現防抖函數 function debounce(fn, delay) {let timer = null;return function(...args) {clearTimeout(timer); // 清除已有定時器timer = setTimeout(() =>…

對稱加密算法——IDEA加密算法

Java IDEA算法詳解 1. 理論背景 IDEA&#xff08;International Data Encryption Algorithm&#xff09;是一種對稱密鑰加密算法&#xff0c;由Xuejia Lai和James Massey于1991年提出。它被設計用于替代DES&#xff08;Data Encryption Standard&#xff09;算法&#xff0c;…

單例模式、構造函數、左值右值

拷貝構造函數 簡單的說就是——用一個對象構造另外一個對象 class Myclass {public:int d0;Myclass(int d_){d d_}; //常用的構造函數Myclass(Myclass c) //拷貝構造函數{d c.d;} }; //對比 class Myclass {public:int d0;Myclass(int d_){d d_}; //常用的構造函數Myclass…

rustdesk遠程桌面自建服務器

首先&#xff0c;我這里用到的是阿里云服務器 centos7版本&#xff0c;win版客戶端。 準備工作 centos7 服務器端文件&#xff1a; https://github.com/rustdesk/rustdesk-server/releases/download/1.1.11-1/rustdesk-server-linux-amd64.zip win版客戶端安裝包&#xff1…

【深度學習】Transformer入門:通俗易懂的介紹

【深度學習】Transformer入門&#xff1a;通俗易懂的介紹 一、引言二、從前的“讀句子”方式三、Transformer的“超級閱讀能力”四、Transformer是怎么做到的&#xff1f;五、Transformer的“多視角”能力六、Transformer的“位置記憶”七、Transformer的“翻譯流程”八、Trans…

用deepseek學大模型03-數學基礎 概率論 最大似然估計(MLE)最大后驗估計(MAP)

https://metaso.cn/s/r4kq4Ni 什么是最大似然估計&#xff08;MLE&#xff09;最大后驗估計&#xff08;MAP&#xff09;&#xff1f;深度學習中如何應用&#xff0c;舉例說明。 好的&#xff0c;我現在需要回答關于最大似然估計&#xff08;MLE&#xff09;和最大后驗估計&…

Socket通訊協議理解及客戶端服務器程序流程

Socket通訊我們可以從以下幾個方面簡單理解 1.Socket是網絡通信中的一項重要技術&#xff0c;它提供了在網絡上進行數據交換的接口。用C#、Java、C等開發語言&#xff0c;都可以開發Socket網絡通信程序。 2.Socket(套接字)是計算機網絡編程中的一種抽象&#xff0c;它允許不同…

《Stable Diffusion繪畫完全指南:從入門到精通的Prompt設計藝術》-配套代碼示例

第一章&#xff1a;模型加載與基礎生成 1.1 基礎模型加載 from diffusers import StableDiffusionPipeline import torch# 加載SD 1.5基礎模型&#xff08;FP32精度&#xff09; pipe StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5",…

【DL】淺談深度學習中的知識蒸餾 | 輸出層知識蒸餾

目錄 一 核心概念與背景 二 輸出層知識蒸餾 1 教師模型訓練 2 軟標簽生成&#xff08;Soft Targets&#xff09; 3 學生模型訓練 三 擴展 1 有效性分析 2 關鍵影響因素 3 變體 一 核心概念與背景 知識蒸餾&#xff08;Knowledge Distillation, KD&#xff09;是一種模…

嵌入式學習第十六天--stdio(二)

文件打開 open函數 #include <fcntl.h> int open(const char *pathname&#xff0c;int flags); int open(const char *pathname&#xff0c;int flags&#xff0c;mode_t mode); 功能: 打開或創建文件 參數: pathname //打開的文件名 flags //操作…

對話智面創始人陶然:一是初心和心態,二是堅持和心力

隨著經濟全球化的加深和市場競爭的日益激烈&#xff0c;企業迅速發展成為了每一個企業家的夢想。然而&#xff0c;要實現企業的快速發展并保持競爭力&#xff0c;企業戰略的人力資源管理起著至關重要的作用。 企業的核心競爭力是“人才”的競爭&#xff0c;無論是研發、銷售、…

mybatis使用typeHandler實現類型轉換

使用mybatis作為操作數據庫的orm框架&#xff0c;操作基本數據類型時可以通過內置的類型處理器完成java數據類型和數據庫類型的轉換&#xff0c;但是對于擴展的數據類型要實現與數據庫類型的轉換就需要自定義類型轉換器完成&#xff0c;比如某個實體類型存儲到數據庫&#xff0…

Qt開發①Qt的概念+發展+優點+應用+使用

目錄 1. Qt的概念和發展 1.1 Qt的概念 1.2 Qt 的發展史&#xff1a; 1.3 Qt 的版本 2. Qt 的優點和應用 2.1 Qt 的優點&#xff1a; 2.2 Qt 的應用場景 2.3 Qt 的應用案例 3. 搭建 Qt 開發環境 3.1 Qt 的開發工具 3.2 Qt SDK 的下載和安裝 3.3 Qt 環境變量配置和使…

mac安裝Pyspark并連接Mysql

安裝Scala, apache-spark, Hadoop brew install scala brew install apache-spark brew install hadoop pip install pyspark注意不要自己另外安裝jdk, 會造成版本對不上報錯。因為安裝apache-spark的過程中會自動安裝openjdk。 配置環境變量 JAVA_HOME/opt/homebrew/Cellar…

【Go語言快速上手】第二部分:Go語言進階之網絡編程

文章目錄 前言&#xff1a;網絡編程一、TCP/UDP 編程&#xff1a;net 包的使用1. TCP 編程1.1 TCP 服務器1.2 TCP 客戶端 2. UDP 編程2.1 UDP 服務器2.2 UDP 客戶端 二、HTTP 編程&#xff1a;net/http 包的使用&#xff0c;編寫 HTTP 服務器和客戶端2.1 HTTP 服務器2.2 HTTP 客…