中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

網(wǎng)站開發(fā)軟件培訓(xùn)seo網(wǎng)絡(luò)培訓(xùn)班

網(wǎng)站開發(fā)軟件培訓(xùn),seo網(wǎng)絡(luò)培訓(xùn)班,新中式家具,珠海城鄉(xiāng)建設(shè)廳網(wǎng)站前言:我的最終目的是為了在QQ上集成一個AI機器人,因此在這里先實現(xiàn)一個簡單的集成 先上效果圖 總體還是很簡單的,我在調(diào)用websock獲取回復(fù)內(nèi)容的基礎(chǔ)上另外集成了一個事件總線,讓我們在調(diào)用獲取消息的時候能夠更加方便快捷 工具代…

前言:我的最終目的是為了在QQ上集成一個AI機器人,因此在這里先實現(xiàn)一個簡單的集成
先上效果圖
在這里插入圖片描述
總體還是很簡單的,我在調(diào)用websock獲取回復(fù)內(nèi)容的基礎(chǔ)上另外集成了一個事件總線,讓我們在調(diào)用獲取消息的時候能夠更加方便快捷
工具代碼如下:

import CryptoJS from 'crypto-js'export function getWebsocketUrl(API_KEY: string, API_SECRET: string) {return new Promise((resolve, reject) => {var apiKey = API_KEYvar apiSecret = API_SECRETvar url = 'wss://spark-api.xf-yun.com/v1.1/chat'var host = location.hostvar date = new Date().toGMTString()var algorithm = 'hmac-sha256'var headers = 'host date request-line'var signatureOrigin = `host: ${host}\ndate: ${date}\nGET /v1.1/chat HTTP/1.1`var signatureSha = CryptoJS.HmacSHA256(signatureOrigin, apiSecret)var signature = CryptoJS.enc.Base64.stringify(signatureSha)var authorizationOrigin = `api_key="${apiKey}", algorithm="${algorithm}", headers="${headers}", signature="${signature}"`var authorization = btoa(authorizationOrigin)url = `${url}?authorization=${authorization}&date=${date}&host=${host}`resolve(url)})
}export default class TTSRecorder {appId: string;apiKey: string;apiSecret: string;status: string;onWillStatusChange: any;ttsWS: any;content: string;revertText: string;_events: any[];constructor(appId: string, API_KEY: string, API_SECRET: string) {this.appId = appIdthis.apiKey = API_KEYthis.apiSecret = API_SECRETthis._events = [];this.status = 'init'}// 修改狀態(tài)setStatus(status: string) {this.onWillStatusChange && this.onWillStatusChange(this.status, status)this.status = status}// 連接websocketconnectWebSocket() {this.setStatus('ttsing')return getWebsocketUrl(this.apiKey, this.apiSecret).then(url => {let ttsWSif ('WebSocket' in window) {ttsWS = new WebSocket(url as string)} else if ('MozWebSocket' in window) {ttsWS = new MozWebSocket(url)} else {alert('瀏覽器不支持WebSocket')return}this.ttsWS = ttsWSttsWS.onopen = e => {this.webSocketSend()}ttsWS.onmessage = e => {this.result(e.data)}ttsWS.onerror = e => {clearTimeout(this.playTimeout)this.setStatus('error')alert('WebSocket報錯,請f12查看詳情')console.error(`詳情查看:${encodeURI(url.replace('wss:', 'https:'))}`)}ttsWS.onclose = e => {console.log(e)}})}// websocket發(fā)送數(shù)據(jù)webSocketSend() {var params = {"header": {"app_id": this.appId,"uid": "fd3f47e4-d"},"parameter": {"chat": {"domain": "general","temperature": 0.5,"max_tokens": 1024}},"payload": {"message": {"text": [{"role": "user","content": this.content}]}}}console.log(JSON.stringify(params))this.ttsWS.send(JSON.stringify(params))}start(text: string) {this.revertText = ""; // 請空回答歷史this.content = textthis.connectWebSocket()}// websocket接收數(shù)據(jù)的處理result(resultData: string) {let jsonData = JSON.parse(resultData)// 提問失敗if (jsonData.header.code !== 0) {const data = {code: jsonData.header.code,content: jsonData.header.message}this.emit('error', data)return}if (jsonData.header.code === 0 && jsonData.header.status === 2) {this.ttsWS.close()this.setStatus("init")this.emit('message', {content: this.revertText,code: 0})this.emit('endRecord', {content: this.revertText,code: 0})}// 記錄回答const textArr = jsonData.payload.choices.text && jsonData.payload.choices.text.map(item => item.content) || []this.revertText = this.revertText + textArr.join('')}on(event: string, fn: Function) {if (Array.isArray(event)) {for (let i = 0, l = event.length; i < l; i++) {this.on(event[i], fn)}} else {// 存在直接push, 不存在創(chuàng)建為空數(shù)組再push(this._events[event] || (this._events[event] = [])).push(fn)}}once(event: string, fn: Function) {let _self = this;function handler() {_self.off(event, handler);fn.apply(null, arguments);//emit里面調(diào)用時會給on方法傳參}handler.fn = fn;//off里面根據(jù)這個判斷銷毀事件this.on(event, handler);}off(event: string, fn: Function) {//不傳參數(shù)表示清空所有if (!arguments.length) {this._events = [];}//數(shù)組循環(huán)清空if (Array.isArray(event)) {for (let i = 0, l = event.length; i < l; i++) {this.off(event[i], fn)}}const cbs = this._events[event];if (!cbs) {return;}//不傳第二參表示清空某事件所有監(jiān)聽函數(shù)if (arguments.length == 1) {this._events[event] = null}let cb, i = cbs.lengthwhile (i--) {cb = cbs[i]if (cb === fn || cb.fn === fn) { //cb.fn===fn用來移除once注冊的事件cbs.splice(i, 1)break}}}emit(event: string, ...args: any[]) {console.log(args, typeof args)// 不存在event,直接返回if (!this._events[event]) {return}let cbs = [...this._events[event]];if (cbs) {for (let i = 0, l = cbs.length; i < l; i++) {try {cbs[i].apply(null, [...arguments].slice(1))} catch (e) {new Error(`event handler for "${e}"`)}}}}
}

不管你是想一次性接收到所有的內(nèi)容,還是想像官方一樣一點一點的接收,都能很方便的使用,視圖調(diào)用代碼如下:

const xfConfig = reactive({appid: "",apisecret: "",apikey: "",
});function testXfSend() {if (!sendTest.content) {ElNotification.error({title: "請輸入發(fā)送內(nèi)容",});return;}const XfBot = new XfUtil(xfConfig.appid, xfConfig.apikey, xfConfig.apisecret);sendTest.revert = "";sendTest.loading = true;XfBot.start(sendTest.content);XfBot.on("endRecord", (data) => {console.log("回復(fù)內(nèi)容", data.content);sendTest.loading = false;sendTest.revert = data.content;});// XfBot.on("message", (data) => {});XfBot.on("error", (data) => {sendTest.loading = false;ElNotification.error({title: data.content,});});
}
http://m.risenshineclean.com/news/59508.html

相關(guān)文章:

  • b2b網(wǎng)站怎么發(fā)布信息微營銷
  • 東方網(wǎng)站建設(shè)百度打開百度搜索
  • 網(wǎng)站建設(shè)技術(shù)服務(wù)公司白度指數(shù)
  • wordpress還原站點設(shè)計網(wǎng)站用什么軟件
  • 深圳做手機網(wǎng)站建設(shè)seo優(yōu)化包括什么
  • 什么店是做網(wǎng)站制作的今天最火的新聞頭條
  • 紹興免費做網(wǎng)站專業(yè)搜索引擎seo服務(wù)
  • 廣告體驗程序網(wǎng)站開發(fā)快速排名方案
  • 建設(shè)網(wǎng)站各方面費用預(yù)算網(wǎng)絡(luò)宣傳
  • 購物網(wǎng)站建設(shè)比較好的知乎關(guān)鍵詞排名優(yōu)化工具
  • 網(wǎng)站后臺怎么修改前臺的某個超鏈接網(wǎng)址常州seo招聘
  • 勝芳網(wǎng)站建設(shè)qiansi湖南靠譜的關(guān)鍵詞優(yōu)化
  • 做網(wǎng)站比特幣錢包淘寶關(guān)鍵詞優(yōu)化推廣排名
  • 嘉興市建設(shè)委員會網(wǎng)站seo實戰(zhàn)視頻
  • 黃浦網(wǎng)站制作seo國外推廣軟件
  • 做照片的網(wǎng)站有哪些seo網(wǎng)站關(guān)鍵詞排名優(yōu)化
  • 國外黑客網(wǎng)站成都多享網(wǎng)站建設(shè)公司
  • 做網(wǎng)站 幫別人賣服務(wù)器地推拉新接單網(wǎng)
  • 開發(fā)網(wǎng)站比較好的公司廈門人才網(wǎng)597人才網(wǎng)
  • 響應(yīng)式網(wǎng)站建設(shè)報價單百度信息流投放在哪些平臺
  • 設(shè)計網(wǎng)站的三個要素揭陽seo推廣公司
  • 尚云網(wǎng)站建設(shè)網(wǎng)絡(luò)運營怎么學(xué)
  • favicon wordpress做seo需要用到什么軟件
  • 怎么做公司網(wǎng)站需要什么科目百度問答官網(wǎng)
  • 網(wǎng)購手表網(wǎng)站查詢網(wǎng)站域名
  • 武漢網(wǎng)絡(luò)推廣公司哪家服務(wù)好長沙seo男團(tuán)
  • 優(yōu)化網(wǎng)絡(luò)的軟件下載seo百度關(guān)鍵詞優(yōu)化
  • 北京高端網(wǎng)站建設(shè)咸陽今日桂林頭條新聞
  • 陜西網(wǎng)站建設(shè)哪家強企業(yè)模板建站
  • 寫作網(wǎng)站最大看顏色應(yīng)該搜索哪些詞匯