首页 > 其他分享 >chatgpt流式文本输出(纯文本+特殊文本)

chatgpt流式文本输出(纯文本+特殊文本)

时间:2024-12-24 09:41:16浏览次数:3  
标签:tick const value content 流式 chatgpt 文本 currentIndex

最近做了一个demo,是有关gpt的流式文本输出,分为两个版本,一个是纯文本A,另一个是含数学公式等特殊文本的版本B。目前,A效果还不错,B能实现但是有缺憾;B只能在公式的latex全部输出完后才能转化为数学公式。如果B的返回结果比较长,那么一大段串的latex输出却迟迟不能转化为公式,这使用体验就差了点,目前还未解决,在想办法。
以下为目前两个版本

A

<script setup lang="ts">
import {onMounted, ref} from "vue";

const displayContent = ref<string>('');
const currentIndex = ref<number>(0);

const handleDisplayContent = (content: string) => {
  const delay = 50

  const tick = () => {
    if (currentIndex.value < content.length) {
      displayContent.value += content.charAt(currentIndex.value);
      currentIndex.value++;
      setTimeout(tick, delay);
    }
  }

  tick();
}

onMounted(async () => {
  try {
    const response = await fetch('https://api.xygeng.cn/one');
    if (!response.body) return;

    const reader: ReadableStreamDefaultReader<Uint8Array> = response.body.getReader();//stream读取
    let receivedContent = '';
    const decoder: TextDecoder = new TextDecoder();//文本解码器, 用于将二进制数据转换为文本

    while (true) {
      const {done, value} = await reader.read();//value为二进制
      if (done) break;
      receivedContent += decoder.decode(value, {stream: true});
    }
    let json2ObjectContent = JSON.parse(receivedContent).data.content;//将json字符串转换为对象,并取得content字段
    handleDisplayContent(json2ObjectContent);

  } catch (error) {
    console.error("fetch请求错误:", error);
  }
});

</script>

<template>
  <div v-html="displayContent"></div>
</template>

<style scoped lang="scss">
/* 添加样式以美化输出 */
</style>

B

<script setup lang="ts">
import {onMounted, ref, nextTick} from "vue";
import Mathjax from "@/utils/mathjax.ts";

const displayContent = ref<string>('');
const currentIndex = ref<number>(0);

// 处理文本显示
const handleDisplayContent = (content: string) => {
  const delay = 5;

  const tick = async () => {
    if (currentIndex.value < content.length) {
      displayContent.value += content.charAt(currentIndex.value);
      currentIndex.value++;
      setTimeout(tick, delay);
    } else if (currentIndex.value === content.length) {
      await nextTick(() => {
        if (Mathjax.isMathjaxConfig) {
          Mathjax.initMathjaxConfig();
        }
        Mathjax.MathQueue('.displayViewContainer');
      });
    }
  };

  tick();
};

onMounted(async () => {
  try {
    const response = await fetch('http://127.0.0.1:3007/api/test', {method: 'POST'});
    if (!response.body) return;

    const reader: ReadableStreamDefaultReader<Uint8Array> = response.body.getReader(); // stream读取
    let receivedContent = '';
    const decoder: TextDecoder = new TextDecoder(); // 文本解码器, 用于将二进制数据转换为文本

    while (true) {
      const {done, value} = await reader.read(); // value为二进制
      if (done) break;
      receivedContent += decoder.decode(value, {stream: true});
    }
    let json2ObjectContent = JSON.parse(receivedContent).content; // 将json字符串转换为对象, 并取得content字段
    handleDisplayContent(json2ObjectContent);
  } catch (error) {
    console.error("fetch请求错误:", error);
  }
});
</script>

<template>
  <div class="displayViewContainer" v-html="displayContent"></div>
</template>

<style scoped lang="scss"></style>

标签:tick,const,value,content,流式,chatgpt,文本,currentIndex
From: https://www.cnblogs.com/yapi-wwj/p/18626665

相关文章

  • 文本嵌入模型必知 - 如何根据输入文本的长度设置最合适的嵌入维度?
    在自然语言处理(NLP)领域,文本嵌入模型(TextEmbeddingModels)通过将文本转换为高维向量表示,以捕捉其语义和语法特征。这些向量表示在下游任务(如分类、聚类、检索等)中起关键作用。嵌入维度(EmbeddingDimension)是文本嵌入模型的重要参数之一,决定向量表示的大小和表达能力。合理......
  • 08. 文本框控件
    一、文本框控件  图形界面上需要输入信息,与程序进行沟通,输入数据信息的控件有单行文本控件、多行文本控件等。我们可以在终端中使用pip安装pyside6模块。pipinstallpyside6二、单行文本框控件  QLineEdit控件是单行文本编辑器,用于接收用户输入的字符串数据,并显示......
  • NLP论文速读|如何在没有模型崩溃的情况下合成文本数据?
    论文速读|HOWTOSYNTHESIZETEXTDATAWITHOUT MODELCOLLAPSE?论文信息:简介:    本文讨论了在人工智能(AI)模型训练中,合成数据(syntheticdata)的使用可能导致模型崩溃(modelcollapse)的问题。随着生成性AI技术的发展,合成数据在网络数据生态系统中变得越来越普遍,未来......
  • 鸿蒙(HarmonyOS)原生AI能力之文本识别
    鸿蒙(HarmonyOS)原生AI能力之文本识别原生智能介绍在之前开发中,很多场景我们是通过调用云端的智能能力进行开发。例如文本识别、人脸识别等。原生即指将一些能力直接集成在本地鸿蒙系统中,通过不同层次的AI能力开放,满足开发者的不同场景下的诉求,降低应用开发门槛,帮助开发者......
  • 如何解决无法在 Intel 芯片的 macOS 上安装 ChatGPT 桌面版软件 All In One
    如何解决无法在Intel芯片的macOS上安装ChatGPT桌面版软件AllInOneYoucan’topentheapplication“ChatGPT.app”becausethisapplicationisnotsupportedonthisMac.solutiuons使用ChatGPT网页版✅https://chatgpt.com/更换一台Apple芯片的M......
  • ChatGPT接口测试用例生成的流程
     通常,使用ChatGPT生成接口测试用例的流程可以分为以下关键步骤。收集接口信息收集接口的相关文档和信息,如接口名称、请求方法、请求参数、返回结果等。这些是ChatGPT生成测试用例需要的输入信息。这一步骤的重要性不可忽视,因为它为ChatGPT提供了上下文,使其能够......
  • 2000-2023年 上市公司-企业数字化转型(报告词频、文本统计)原始数据、参考文献、代码、
    一、数据介绍数据名称:企业数字化转型-年度报告词频、文本统计数据范围:1999-2023年5630家上市公司样本数量:63051条,345个变量数据来源:上市公司年度报告数据说明:内含数字化转型314个词频、各维度水平、文本统计面板二、整理说明爬取1999-2023年上市公司年报将原始报告文本......
  • 文本编辑器:EverEdit是一个不错的选择
    1为什么选择了EverEdit注:本文来自一位编辑器老用户的体会。  世面上文本编辑器各类繁多,开源免费的编辑器更是多不胜数,既然有这么多免费的替代品,为什么还要EverEdit?  免费文本编辑器的顶流:神的编辑器(Emacs)、编辑器的神(Vim),这些都是非常强大的文本编辑器,但你会发......
  • Python调用星火认知大模型API(流式传输)
    Python调用星火认知大模型API流式传输前言1.获取API认证信息2.快速调用集成星火认知大模型3.实现AI流式回复1)SparkApi.py2)SparkApiMain.py3)SparkPicture.py4)spider.py5)开始测试参考文档前言最近对大模型比较感兴趣,想要调用大模型的API,实现AI助手那种问答效果,正......
  • ChatGPT生成接口测试用例(二)
    5.1.4自动生成测试数据       测试数据的生成通常是接口测试的一个烦琐任务。ChatGPT可以帮助测试团队生成测试数据,包括各种输入和它们的组合。测试人员可以描述他们需要的数据类型和范围,ChatGPT可以生成符合要求的测试数据,从而减轻测试人员的负担。对于一个在线预......