被动触发中~~~~~疯狂输出
让我们赶紧开始吧
1.首先,安装microsoft/fetch-event-source插件库。可以通过运行以下命令来安装:
npm install @microsoft/fetch-event-source
2.在Vue应用的入口文件(通常是main.js)中导入该插件库:
import { fetchEventSource } from '@microsoft/fetch-event-source'
3.创建一个Vue实例,并在该实例的生命周期钩子函数中使用fetchEventSource来监听流式数据:
这里只展示了部分代码片段!!!!仅供伙伴们参考哦
new Vue({
created() {
//这里只展示了部分代码片段!!!!仅供伙伴们参考哦
const sseSendStream = (content) => {
if (abortController) {
abortController = null
}
abortController = new AbortController() //会话暂停控制器
let url = 'https://api.coze.cn/v3/chat' //这里使用的是抖音扣子模型
// 模型参数
let params = {
bot_id: '7405395880901427212',
user_id: uuidv4(),
stream: true,
auto_save_history: true,
additional_messages: [
{
role: 'user',
content: content,
content_type: 'text'
}
]
}
fetchEventSource(url, {
method: 'post',
headers: {
'Content-Type': 'application/json',
Accept: 'text/event-stream',
Authorization: tokens
},
body: JSON.stringify(params),
openWhenHidden: true,
signal: abortController.signal,
async onopen(response) {
//建立连接的回调
console.log('建立连接的回调', response)
},
onmessage(msg) {
//接收一次数据段时回调,因为是流式返回,所以这个回调会被调用多次
if (msg.event == 'conversation.message.delta') {
//进行连接正常的操作
try {
const dataObj = JSON.parse(msg.data)
//实时返回流渲染效果
if (sendIndex.value == 0) {
sessionList[sessionList.length - 1] = dataObj
} else {
sessionList[sessionList.length - 1].content += dataObj.content
}
sendIndex.value = 2
//if (dataObj.usage.output_tokens == 1) {
// dataObj.output.text = ''
// sessionList.value.push(dataObj)
//}
// setTimeout(() => {
// simulateGPTResponse(strings) //打字效果、方法请往下看
// }, 1000)
} catch (e) {}
}
},
onclose() {
console.log('停止了')
//在这里可以写一些GPT停止后的一些操作
},
onerror(err) {
//连接出现异常回调
// 取消请求
throw err
}
})
}
},
// 其他Vue配置项
}).$mount('#app');
实现打字效果
各大模型返回的流式数据格式不一样,以下是根据通义千问大模型返回数据来实现打字效果
function simulateGPTResponse(strings) {
if (timer) {
clearTimeout(timer)
}
//sendIndex 当前打印字符所在长度
//strings 模型返回参数;字符串并分割成数组
// 如:"你好啊"分割成["你","好","啊"]
if (sendIndex.value < strings.length) {
const char = strings[sendIndex.value++] //根据索引取分割数组中的项
sessionList.value[sessionList.value.length - 1].output.text += char //赋值
timer = setTimeout(() => { //打字速度
simulateGPTResponse(strings)
}, 50)
}
}
4.利用AbortController实现(正在会话中)立即停止会话操作【避免入坑,此操作简单粗暴】
function stop() {
abortController.abort()
}
到这里就结束了哟
希望这些步骤能帮助你在Vue应用中使用microsoft/fetch-event-source插件库接收GPT或其他大模型的流式数据。
版权归原作者 砖业二十年 所有, 如有侵权,请联系我们删除。