马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
被动触发中~~~~~疯狂输出
让我们赶紧开始吧
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或其他大模子的流式数据。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |