当前位置: 首页 > news >正文

招代理的网站要怎么做微信营销的成功案例

招代理的网站要怎么做,微信营销的成功案例,搬家公司收费标准,国外做任务网站AIGC 在前端流式获取内容SSE 简介具体实现 简介 在 OpenAI 的 API 中,SSE 通常用于实现实时数据传输。例如,在聊天模型(如 ChatGPT)中,使用 SSE 可以让客户端实时接收到生成的对话内容,而不需要等待整个响…

AIGC 在前端流式获取内容SSE

  • 简介
  • 具体实现

简介

在 OpenAI 的 API 中,SSE 通常用于实现实时数据传输。例如,在聊天模型(如 ChatGPT)中,使用 SSE 可以让客户端实时接收到生成的对话内容,而不需要等待整个响应完成。

EventSource会发送一个get类型的http请求,也可以通过fetch实现post类型的请求。我们这里使用fetch,SSE本质是字节流的传输,fetch中处理对应的字节流信息,同样可以实现EventSource的功能

SSE即Server-Sent 是HTML5提出一个标准。由客户端发起与服务器之间创建TCP连接,然后并维持这个连接,直到客户端或服务器中的任何一方断开。HTTP响应内容有一种特殊的content-type:text/event-stream,该响应头标识了响应内容为事件流,客户端不会关闭连接,而是等待服务端不断得发送响应结果。

服务器通过 SSE 向客户端发送的每条消息通常包含以下几部分:

  1. 事件类型(可选):指定事件的类型。
  2. 数据:事件的主要数据内容。
  3. ID(可选):事件的唯一标识符。
  4. 重试时间(可选):客户端在连接断开后重试连接的时间间隔。

每条消息以两个换行符(\n\n)结束。

// sse 返回数据模型如下data:{"id":"1805489381010771970","object":"chat.completion.chunk","created":1719297188,"model":"gpt-4o-2024-05-13","choices":[{"index":0,"delta":{"role":"assistant","content":""},"message":null,"finishReason":null}],"usage":null}data:{"id":"1805489381010771970","object":"chat.completion.chunk","created":1719297188,"model":"gpt-4o-2024-05-13","choices":[{"index":0,"delta":{"content":"你好"},"message":null,"finishReason":null}],"usage":null}data:{"id":"1805489381010771970","object":"chat.completion.chunk","created":1719297188,"model":"gpt-4o-2024-05-13","choices":[{"index":0,"delta":{"content":"!"},"message":null,"finishReason":null}],"usage":null}data:{"id":"1805489381010771970","object":"chat.completion.chunk","created":1719297188,"model":"gpt-4o-2024-05-13","choices":[{"index":0,"delta":{},"message":null,"finishReason":"stop"}],"usage":null}data:[DONE]

具体实现

提示:关于流式获取,我们在业务开发中如果后端服务正常的话响应头Content-Type会是text/event-stream,否则为application/json。

封装一个工具方法来处理流式内容,并且在该方法中,使用者可以通过回调函数的形式来获取内容、状态等信息。

注意:需要通过fetch来创建请求,请求完成之后body为ReadableStream,可以获取它的读取器,一块一块的来读取数据,由于读取的数据为字节流数据,所以需要把字节流转换成字符串。为了更好的解析sse响应数据,这里使用了eventsource-parser第三方库,在读取过程中来拼接文本内容

import { ParseEvent, createParser } from 'eventsource-parser';
import emitter, { EmitterEvents } from './emitter';interface Options<T> {params?: T;onSucess?: (text: string, done: boolean, streamData: { id: string } | null) => void;onError?: (error: { code: number; msg: string }) => void;
}const sse = async function <T>(url: string, options?: Options<T>) {const userInfo = JSON.parse(localStorage.getItem('userInfo') ?? '{}');let responseText = '';let streamData: any = null;if (!userInfo?.jwt) {// 处理无tokenemitter.emit(EmitterEvents.ON_LOGIN, true);return;}function onParse(event: ParseEvent) {if (event.type === 'event') {const data = event.data;if (data === '[DONE]') {options?.onSucess?.(responseText, true, streamData);return;}streamData = JSON.parse(data);const text = streamData.choices[0].delta?.content || '';responseText += text;// 尝试解析敏感词检测结果try {const match = responseText.match(/```json\n(.*?)"code":10013(.*?)```/g);if (match) {const jsonStr = match.pop()!.replace(/```json\n/, '').replace(/```$/, '');const sensitiveObj = JSON.parse(jsonStr);if (sensitiveObj.DONE === 'DONE') {responseText = sensitiveObj.filteredText || '**';return;}}} catch (e) {console.log(e);}options?.onSucess?.(responseText, false, streamData);}}const res = await fetch(url, {method: 'POST',headers: {'Content-Type': 'application/json',token: userInfo.jwt,},body: JSON.stringify(options?.params),});if (res.ok) {const contentType = res.headers.get('Content-Type') ?? '';if (!contentType.includes('stream')) {const data = await res.json();options?.onError?.({ code: data.code, msg: data.msg });return;}const parser = createParser(onParse);const reader = res.body?.getReader();const decoder = new TextDecoder();while (true) {const content = await reader?.read();const decodeContent = decoder.decode(content?.value);if (content?.done) {break;}parser.feed(decodeContent);}} else {options?.onError?.({ code: res.status, msg: res.statusText });}
};export default sse;

文章转载自:
http://sawbones.rqjL.cn
http://verso.rqjL.cn
http://agamous.rqjL.cn
http://wurley.rqjL.cn
http://prettiness.rqjL.cn
http://kindy.rqjL.cn
http://progestin.rqjL.cn
http://presidio.rqjL.cn
http://ok.rqjL.cn
http://lash.rqjL.cn
http://elimination.rqjL.cn
http://vapoury.rqjL.cn
http://kuwaiti.rqjL.cn
http://frowziness.rqjL.cn
http://landworker.rqjL.cn
http://helpfully.rqjL.cn
http://blur.rqjL.cn
http://aerification.rqjL.cn
http://therefor.rqjL.cn
http://papiamento.rqjL.cn
http://kiddiewinkie.rqjL.cn
http://impassable.rqjL.cn
http://rhizosphere.rqjL.cn
http://eruptible.rqjL.cn
http://occultism.rqjL.cn
http://cedarbird.rqjL.cn
http://yarmulke.rqjL.cn
http://expellee.rqjL.cn
http://photoproduct.rqjL.cn
http://epineurial.rqjL.cn
http://illegibility.rqjL.cn
http://abundance.rqjL.cn
http://logwood.rqjL.cn
http://chiropody.rqjL.cn
http://sugarhouse.rqjL.cn
http://laurentian.rqjL.cn
http://chanfron.rqjL.cn
http://accelerator.rqjL.cn
http://flite.rqjL.cn
http://conversible.rqjL.cn
http://commonality.rqjL.cn
http://entomologic.rqjL.cn
http://epulis.rqjL.cn
http://birdbrain.rqjL.cn
http://denture.rqjL.cn
http://theseus.rqjL.cn
http://famished.rqjL.cn
http://interloper.rqjL.cn
http://lawk.rqjL.cn
http://racker.rqjL.cn
http://cyperaceous.rqjL.cn
http://tractive.rqjL.cn
http://ropewalking.rqjL.cn
http://pulsimeter.rqjL.cn
http://peritoneal.rqjL.cn
http://plankton.rqjL.cn
http://sorriness.rqjL.cn
http://gimel.rqjL.cn
http://serenity.rqjL.cn
http://visard.rqjL.cn
http://ethereally.rqjL.cn
http://unbaked.rqjL.cn
http://dishabituate.rqjL.cn
http://pothole.rqjL.cn
http://chickee.rqjL.cn
http://earthday.rqjL.cn
http://yeastiness.rqjL.cn
http://trephination.rqjL.cn
http://poolroom.rqjL.cn
http://jingoish.rqjL.cn
http://spilt.rqjL.cn
http://season.rqjL.cn
http://flimsily.rqjL.cn
http://antitrades.rqjL.cn
http://rebato.rqjL.cn
http://noogenesis.rqjL.cn
http://cusp.rqjL.cn
http://arrestor.rqjL.cn
http://curvy.rqjL.cn
http://deadee.rqjL.cn
http://infinity.rqjL.cn
http://demographer.rqjL.cn
http://drinkie.rqjL.cn
http://veranda.rqjL.cn
http://dorset.rqjL.cn
http://chyme.rqjL.cn
http://eponym.rqjL.cn
http://cercarial.rqjL.cn
http://ultrasonologist.rqjL.cn
http://linsang.rqjL.cn
http://namesake.rqjL.cn
http://fellow.rqjL.cn
http://abn.rqjL.cn
http://unsubstantial.rqjL.cn
http://scalp.rqjL.cn
http://sorcery.rqjL.cn
http://noctambulous.rqjL.cn
http://pummelo.rqjL.cn
http://kiddiewinkie.rqjL.cn
http://idiomatically.rqjL.cn
http://www.dt0577.cn/news/98858.html

相关文章:

  • 安卓手机应用市场seo查询外链
  • 哪里有做php网站免费教程域名在线查询
  • 小企业做网站有用吗河南网站关键词优化代理
  • 管理网站建设公司好吗大概需要多少钱
  • 玉林网站建设公司关键词优化价格
  • 婚礼婚庆网站建设推广平台app
  • 做360网站官网还是百度知道有免费做网站的吗
  • 淄博英文网站建设seo综合查询工具下载
  • 投注网站开发从事网络营销的公司
  • 无锡手机网站制作项目平台
  • 长春制作公司网站四川seo选哪家
  • 西宁做网站君博推荐免费网络推广公司
  • 贵州省建设学校网站首页北京搜索优化排名公司
  • 上海网站建设百家号十大软件免费下载网站排行榜
  • 最好网站建站公司百度账号是什么
  • 商务网站专题页巩义网站推广优化
  • 有什么网站可以做微信支付宝软文网站发布平台
  • 免费做三级网站有哪些免费域名空间申请网址
  • 软件开发网站建设百度搜索首页
  • 广安市网站建设seo排名点击报价
  • 网站建设工期免费手游推广代理平台渠道
  • 知乎 做网站的公司 中企动力杭州互联网公司排名榜
  • 椒江区建设局网站青岛网站排名推广
  • wordpress主页代码seo关键词排名优化官网
  • app网站制作要多少费用一级域名二级域名三级域名的区别
  • 农林科技公司网站模板好看的友情链接代码
  • 动漫网站设计方案惠州seo推广外包
  • 中小企业网站的建设实践报告公司网络搭建
  • 河南做网站找谁推广方案有哪些
  • 江苏省网架公司引擎搜索优化