花瓣小跑 发表于 2024-12-20 01:38:11

前端对接AI模子接口 实现ChatGPT流式数据并【实现打字效果】和【终止会话】

https://i-blog.csdnimg.cn/direct/e93e500d40b940938d8ab6fe565d755e.jpeg
被动触发中~~~~~疯狂输出
让我们赶紧开始吧
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 = dataObj
            } else {
                sessionList.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 //根据索引取分割数组中的项
    sessionList.value.output.text += char//赋值
    timer = setTimeout(() => {    //打字速度
      simulateGPTResponse(strings)
    }, 50)
}
}  4.使用AbortController实现(正在会话中)立即停止会话操作【制止入坑,此操作简朴粗暴】
function stop() {
abortController.abort()
} 到这里就结束了哟
渴望这些步骤能资助你在Vue应用中使用microsoft/fetch-event-source插件库接收GPT或其他大模子的流式数据。
https://i-blog.csdnimg.cn/blog_migrate/6f6bea563ab9f306b05232a0c39c0684.png


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 前端对接AI模子接口 实现ChatGPT流式数据并【实现打字效果】和【终止会话】