国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

在微信小程序中如何支持使用流模式(stream),打造ChatGPT實時回復(fù)機器人,最詳細講解。

這篇具有很好參考價值的文章主要介紹了在微信小程序中如何支持使用流模式(stream),打造ChatGPT實時回復(fù)機器人,最詳細講解。。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

有開發(fā)過ChatGPT相關(guān)應(yīng)用的都知道,小程序是不支持流式請求的,目前市面上大多數(shù)開發(fā)者的解決方案都是使用websocket來解決。

還有一部分開發(fā)者是小程序嵌套網(wǎng)頁解決這個問題,前者對于我們軟件銷售型的團隊來說,交付會很麻煩,而且問題也會很多,而后者主要是體驗不怎么好,而且需要設(shè)置網(wǎng)頁授權(quán)域名。

作為ChatGPT最早期的開發(fā)者,我們開發(fā)的ChatGPT分銷版占據(jù)了市面上60%左右的市場,和下面圖片相似的都是我們的ChatGPT分銷版。

在微信小程序中如何支持使用流模式(stream),打造ChatGPT實時回復(fù)機器人,最詳細講解。

?在開發(fā)這個項目之前,我們開源了這個產(chǎn)品的前端模板,現(xiàn)在市面上很多雷同的產(chǎn)品都是基于我們的模板進行開發(fā)的,或者是借鑒開發(fā)的。

有客戶運營我們的產(chǎn)品,目前已經(jīng)累計200w+的充值金額,凈利潤預(yù)估至少100w+,我們的產(chǎn)品質(zhì)量源自于這些客戶的數(shù)據(jù)支撐。

我們的后端使用ThinkPHP5.0進行開發(fā),Saas架構(gòu),界面看上去很大氣,如下圖所示。

在微信小程序中如何支持使用流模式(stream),打造ChatGPT實時回復(fù)機器人,最詳細講解。

?顏值絕對秒殺市面上的所有ChatGPT應(yīng)用,當然我們的定價和服務(wù)也是相當超值的。

廢話不多說,接下來我來詳細介紹下我是怎么實現(xiàn)微信小程序的流式請求的。

一、設(shè)置請求頭

我的微信小程序和網(wǎng)頁H5都是用的同一個接口,而微信小程序不支持stream的方式,只能使用分段傳輸?shù)姆绞健?/p>

所以在這一步你需要做一個接口的兼容,我是傳一個參數(shù)代表是微信小程序請求還是網(wǎng)頁請求,從而設(shè)置不同的請求頭。

網(wǎng)頁H5的我就不給出header了,這里主要給出小程序的請求頭,如下所示。

// 設(shè)置響應(yīng)頭信息
header('Access-Control-Allow-Credentials: true');
// 設(shè)置響應(yīng)頭信息
header('Transfer-Encoding: chunked');
header('Cache-Control: no-cache');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type');
header('Connection: keep-alive');
header('X-Accel-Buffering: no');

二,設(shè)置回復(fù)兼容

網(wǎng)頁H5的流式請求我是直接返回的官方的響應(yīng)數(shù)據(jù),所以這里不能動之前的數(shù)據(jù)格式,在小程序請求這個接口時,需要單獨返回對應(yīng)的數(shù)據(jù)格式。

if ($is_wxapp) {
    echo "success: " . json_encode(['content' => $content]) . "\r\n";
}

結(jié)尾使用“\r\n”,并且當所有數(shù)據(jù)響應(yīng)完成之后一定要輸出0,如下圖所示。

if ($is_wxapp) {
    echo "0\r\n\r\n";
    ob_flush();
    flush();
}

我這里為了兼容網(wǎng)頁H5的流式請求,也是同樣的加了判斷之后輸出的。

三,進入前端請求代碼

以下是我完整的小程序請求方法,里面包含了我很多的業(yè)務(wù)邏輯,你可以根據(jù)你的業(yè)務(wù)進行修改,后面我會挑幾個注意事項進行簡述。

async onChatApplet() {
	let _this = this;
	let token = uni.getStorageSync('token');
	const url = "";
	const requestTask = uni.request({
		url: url,
		timeout: 15000,
		responseType: 'text',
		method: 'GET',
		enableChunked: true,
		data: {},
		success: response => {
			// console.log(response)
		},
		fail: error => {}
	})
	requestTask.onHeadersReceived(function(res) {
		// console.log(res.header);
	});
	requestTask.onChunkReceived(function(response) {
		const arrayBuffer = response.data;
		const uint8Array = new Uint8Array(arrayBuffer);
		let text = uni.arrayBufferToBase64(uint8Array)
		text = new Buffer(text, 'base64')
		text = text.toString('utf8');
		if (text.indexOf('error') > 0) {
			let error = text.replace("event: error\ndata: ", "").replace("\r\n", "")
			error = JSON.parse(error)
			let len = _this.question.length
			_this.disabled = false
			if (error.code == 0) {
				_this.$refs.uToast.show({
					type: 'error',
					message: error.msg
				})
				if (len > 0) {
					_this.question[len - 1].content = error.msg
				} else {
					_this.question[0].content = error.msg
				}
				return false;
			}
			if (in_array(error.code, [10001, 11000, 500, 404])) {
				let length1 = 0
				if (length1 > 0) {
					_this.question[length1 - 1].content = error.msg
				} else {
					_this.question[0].content = error.msg
				}
				_this.$refs.uToast.show({
					type: 'error',
					message: error.msg
				})
				return false;
			}
			switch (error.code) {
				case -1:
					_this.question.pop()
					uni.navigateTo({
						url: '/pages/user/passport/login'
					})
					break;
				case 101:
					_this.question.pop()
					_this.$refs.uToast.show({
						type: 'error',
						message: error.msg,
						complete() {
							uni.navigateTo({
								url: '/pages/user/recharge/index'
							})
						}
					})
					break;
				case 102:
					let length = _this.question.length
					if (length > 0) {
						_this.question[length - 1].content = error.msg
					} else {
						_this.question[0].content = error.msg
					}
					_this.$refs.uToast.show({
						type: 'error',
						message: error.msg
					})
					break;
				default:
					break;
			}
			return false;
		}
		if (text.indexOf('success') != -1) {
			let json = text.split('success: ');
			json.forEach(function(element) {
				if (element) {
					element = JSON.parse(element)
					let index = 0
					if (_this.question.length > 0) {
						index = _this.question.length - 1
					}
					_this.question[index].content += element.content;
					_this.$nextTick(() => {
						uni.pageScrollTo({
							scrollTop: 2000000,
							duration: 0
						});
					});
				}
			})
			return false;
		}
		let done = text.replace("\r\n", "")
		if (done == 0) {
			_this.disabled = false
		}
	})
}

注意事項:編碼

const arrayBuffer = response.data;
const uint8Array = new Uint8Array(arrayBuffer);
let text = uni.arrayBufferToBase64(uint8Array)
text = new Buffer(text, 'base64')
text = text.toString('utf8');

我這個方式比較簡單粗暴,我在網(wǎng)上看到有人使用了第三方庫,但是我測試下來行不通,就使用了uni官方這個轉(zhuǎn)成Base64,然后再進行轉(zhuǎn)碼。

以上就是整個小程序的流式響應(yīng)回復(fù)所需要用到的技術(shù),也是最直接有效的方法,如果你現(xiàn)在掌握這門技術(shù),再加上ChatGPT目前的勢頭,我相信你也能做出一些事情。

好了,就這樣,做一個小小的記錄,后期如果有空,我會繼續(xù)分享我在開發(fā)ChatGPT產(chǎn)品的其他思路。

個人公眾號:程序員在囧途

歡迎大佬交流合作,交個朋友也行。文章來源地址http://www.zghlxwxcb.cn/news/detail-455573.html

到了這里,關(guān)于在微信小程序中如何支持使用流模式(stream),打造ChatGPT實時回復(fù)機器人,最詳細講解。的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【uni-app】只支持在微信小程序運行的 導(dǎo)入外部3d模型

    【uni-app】只支持在微信小程序運行的 導(dǎo)入外部3d模型

    uniapp 導(dǎo)入3d模型,在微信小程序端運行。只支持在微信小程序端使用,若要支持 h5 和 APP端,可以查看這篇,點擊這里 只導(dǎo)入了3d模型,未設(shè)置讓模型動。 glb 格式 (1)首先文件 下載適配微信小程序的 three.js 地址:https://github.com/wechat-miniprogram/threejs-miniprogram (2)導(dǎo)入文件

    2023年04月08日
    瀏覽(24)
  • 在微信小程序中如何引入iconfont

    在微信小程序中如何引入iconfont

    略 iconfont 指 https://www.iconfont.cn/。 通過 iconfont 可組建自己的圖標庫。 注冊帳號 創(chuàng)建項目 添加圖標 Font Family:默認為iconfont。當項目中已有iconfont名稱的字體時,需要使用不同的名字。 略 將 iconfont.css 重命名為 iconfont20231007.wxss 將 iconfont20231007.wxss 文件復(fù)制到小程序的font目錄

    2024年02月03日
    瀏覽(39)
  • 在微信小程序中如何改變默認打開的頁面

    在微信小程序中如何改變默認打開的頁面

    在微信小程序中,在我們編寫頁面的時候,可能會在重新渲染的時候?qū)е马撁嫣D(zhuǎn)到默認打開的頁面上,為了提升用戶的一個體驗,我們可以設(shè)置一些內(nèi)容來修改小程序默認打開的頁面,提升開發(fā)者的開發(fā)體驗。 當我們打開一個微信小程序的時候,這里是普通編譯 那么,我

    2024年02月03日
    瀏覽(51)
  • 在微信小程序中如何配置騰訊位置服務(wù)并調(diào)用

    在微信小程序中如何配置騰訊位置服務(wù)并調(diào)用

    因為很多服務(wù)都已經(jīng)被封裝好了,所以我們只需要調(diào)用引入配置就行了。 下面進入正題,我們要先 先注冊一個賬號,然后點擊控制臺,進去以后找到左側(cè)的應(yīng)用管理,然后點擊創(chuàng)建應(yīng)用,創(chuàng)建完成以后點擊添加key 添加好以后點編輯 ? 然后填寫好相應(yīng)的信息 ?然后我們要下載

    2024年02月09日
    瀏覽(30)
  • 如何在微信小程序中加載自己的地圖數(shù)據(jù)

    如何在微信小程序中加載自己的地圖數(shù)據(jù)

    由于微信小程序無法進行DOM操作,導(dǎo)致像openlayers、leaflet這種常用的js庫無法在微信小程序內(nèi)使用,導(dǎo)致加載高德、百度、mapbox還有自定義的瓦片地圖數(shù)據(jù)變得很困難。 目前,大多數(shù)情況下是使用以下三種方法實現(xiàn)加載自定義的瓦片數(shù)據(jù)。 1. 使用web-view 優(yōu)勢:可以使用豐富的

    2024年02月10日
    瀏覽(22)
  • 如何在微信小程序中實現(xiàn)音視頻通話

    微信小程序的音視頻通話可以通過微信提供的實時音視頻能力實現(xiàn)。這個能力包括了音視頻采集、編碼、傳輸和解碼等多個環(huán)節(jié),開發(fā)者只需要使用微信提供的 API 接口就可以輕松地實現(xiàn)音視頻通話功能。 在具體實現(xiàn)上,開發(fā)者需要先在微信開放平臺上注冊并創(chuàng)建小程序,然

    2023年04月09日
    瀏覽(44)
  • uniapp項目如何運行在微信小程序模擬器上

    uniapp項目如何運行在微信小程序模擬器上

    在HbuilderX中的小程序?qū)懲旰笞约阂欢ㄒ4?,否則會出不來效果 那么怎么讓uniapp項目運行在微信小程序開發(fā)工具中呢 1 在hbuilderx中點擊運行到小程序模擬器 2 然后在項目目錄中會生成一個文件夾 在微信小程序開發(fā)軟件中的工具安全設(shè)置打開端口 或者在微信小程序中導(dǎo)入項目

    2024年02月13日
    瀏覽(27)
  • 在微信小程序使用picker實現(xiàn)日期選擇

    在微信小程序使用picker實現(xiàn)日期選擇

    而且選擇開始時間后,選擇結(jié)束時間,能夠選擇的日期不能比開始日期還要早。要實現(xiàn)以上效果可這樣寫: 在wxml中寫

    2024年02月16日
    瀏覽(99)
  • 在微信小程序中怎么使用vant框架?

    在微信小程序中怎么使用vant框架?

    Vant 是一個輕量、可定制的移動端組件庫,于 2017 年開源。 目前 Vant 官方提供了 Vue 2 版本、Vue 3 版本和微信小程序版本,并由社區(qū)團隊維護 React 版本和支付寶小程序版本。 Vant 是有贊前端團隊開源的移動端組件庫,于 2017 年開源,已持續(xù)維護 4 年時間。Vant 對內(nèi)承載了有贊所

    2024年02月10日
    瀏覽(22)
  • 使用百度地圖坐標在微信小程序中定位顯示

    使用百度地圖坐標在微信小程序中定位顯示

    一.需求描述:設(shè)備在上線時需要在上線點記錄所在地點的坐標和位置描述信息 分別需要實現(xiàn)三個功能 1. 根據(jù)坐標點顯示位置信息 , 圖1 中的紅色坐標點跳轉(zhuǎn)到 圖2 時,在騰訊地圖上標出所在坐標點,并顯示地點信息; 2. 定位當前所在位置 :點擊藍色圖標,會定位當前所在位

    2024年02月09日
    瀏覽(94)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包