京东6.18大促主会场领京享红包更优惠

 找回密码
 立即注册

QQ登录

只需一步,快速开始

利用FetchEventSource在大模型流式输出的应用方式

2024-11-2 22:48| 发布者: 4d5a8576d| 查看: 19| 评论: 0

摘要: 目次FetchEventSource在大模型流式输出应用使用 FetchEventSource 的一些关键点以调用Qwen大模型为例总结FetchEventSource在大模型流式输出应用 先讲讲这个微软开辟的可以使用POST的SSE的api,github链接:GitHub -
目次

FetchEventSource在大模型流式输出应用

先讲讲这个微软开辟的可以使用POST的SSE的api,github链接:GitHub - Azure/fetch-event-source: A better API for making Event Source requests, with all the features of fetch()

[code]FetchEventSource[/code] 是微软在 ASP.NET Core 中引入的一个功能,它允许开辟者以一种更简单和高效的方式处置惩罚 HTTP 请求和响应。

这个功能是作为 ASP.NET Core 的一部分提供的,它利用了 [code]System.Net.Http.Desktop[/code] 命名空间中的 [code]FetchResult[/code] 范例。

在 ASP.NET Core 中,[code]FetchEventSource[/code] 通常用于处置惩罚服务器发送的变乱(Server-Sent Events,SSE),这是一种允许服务器向客户端异步推送实时数据的技术。

使用 [code]FetchEventSource[/code],开辟者可以更容易地创建和消耗这些实时数据流。

使用 FetchEventSource 的一些关键点

  • 创建 EventSource 客户端:开辟者可以通过 [code]FetchEventSource[/code] 创建一个 [code]EventSource[/code] 对象,该对象用于连接到服务器上的特定端点。
  • 监听变乱:一旦 [code]EventSource[/code] 对象被创建,就可以通过注册变乱监听器来监听服务器发送的变乱。
  • 处置惩罚连接:[code]EventSource[/code] 对象可以处置惩罚连接的创建、重连和关闭,以及可能出现的错误。
  • 吸收数据:当服务器向客户端推送数据时,可以通过注册的变乱监听器吸收这些数据。
  • 断线重连:如果连接丢失,[code]EventSource[/code] 对象可以主动尝试重新连接到服务器。
  • 取消订阅:开辟者可以取消对特定变乱的订阅,大概完全关闭 [code]EventSource[/code] 连接。

以调用Qwen大模型为例

[code]import { fetchEventSource } from '@microsoft/fetch-event-source'; export default { data() { return { output: '', apiKey: '$your-dashscope-api-key', // 替换为你的 DashScope API-KEY url: 'https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation', body: { model: 'qwen-turbo', input: { messages: [ { role: 'system', content: 'You are a helpful assistant.' }, { role: 'user', content: '你好' } ] }, parameters: { incremental_output: true } } }; }, methods: { async startSSE() { const headers = { 'Content-Type': 'application/json', 'Authorization': `Bearer ${this.apiKey}`, 'X-DashScope-SSE': 'enable' }; try { this.eventSource = await fetchEventSource(this.url, { method: 'POST', headers: headers, body: JSON.stringify(this.body), onopen: (response) => { if (!response.ok) { throw new Error('Server returned an error'); } }, onmessage: (event) => { const data = JSON.parse(event.data); if (data.output && data.output.choices) { const content = data.output.choices[0].message.content; this.output += content; // 将内容添加到输出中 } }, onerror: (err) => { console.error('EventSource failed:', err); this.stopSSE(); } }); } catch (error) { console.error('Failed to start SSE:', error); } }, stopSSE() { if (this.eventSource) { this.eventSource.close(); this.eventSource = null; } } }, unmounted() { this.stopSSE(); } };[/code]

这样就可以创建SSE的链接了。

那么有小搭档就要问了,那前端怎么实时显示吸收到的输出呢?

[code]onmessage: (event) => { const data = JSON.parse(event.data); if (data.output && data.output.choices) { const content = data.output.choices[0].message.content; this.output += content; // 将内容添加到输出中 } }[/code]
  • 变乱处置惩罚器声明
[code]onmessage: (event) => { // ... },[/code]

这里界说了一个 [code]onmessage[/code] 变乱处置惩罚器。

当通过 SSE 连接吸收到消息时,会触发这个处置惩罚器。

  • 解析吸收到的数据
[code]const data = JSON.parse(event.data);[/code]

[code]event.data[/code] 包罗了服务器发送的消息内容,通常是以 JSON 格式的字符串。

[code]JSON.parse[/code] 函数用于将这个 JSON 字符串解析为 JavaScript 对象。

  • 查抄输出数据
[code]if (data.output && data.output.choices) { // ... }[/code]

这里使用 [code]if[/code] 语句来确保 [code]data[/code] 对象中存在 [code]output[/code] 属性,而且 [code]output[/code] 属性中存在 [code]choices[/code] 数组。

这是一种防御性编程的做法,用来克制在数据结构不完整时出现错误。

  • 获取消息内容
[code]const content = data.output.choices[0].message.content;[/code]

这行代码进一步从 [code]choices[/code] 数组中的第一个元素(通常是最相干的大概默认的消息)中提取 [code]message.content[/code]。

这通常是服务器推送的有用信息或数据。

  • 累加内容
[code]this.output += content;[/code]

[code]this.output[/code] 是 Vue 组件实例的一个数据属性,用于累积从服务器吸收到的全部消息内容。

这里使用 [code]+=[/code] 利用符将新吸收到的 [code]content[/code] 追加到 [code]this.output[/code] 的当前值上。

整个 [code]onmessage[/code] 变乱处置惩罚器的作用是:当通过 SSE 吸收到消息时,它将解析消息内容,从中提取有用的信息,并将其追加到 Vue 组件的 [code]output[/code] 数据属性中。

这样,组件的模板中的 [code]<pre>{{ output }}</pre>[/code] 就可以显示全部吸收到的消息内容,保持其原始的格式。

总结

以上为个人履历,盼望能给各人一个参考,也盼望各人多多支持脚本之家。


来源:https://www.jb51.net/javascript/326701cxc.htm
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
关闭

站长推荐上一条 /6 下一条

QQ|手机版|小黑屋|梦想之都-俊月星空 ( 粤ICP备18056059号 )|网站地图

GMT+8, 2025-7-2 03:25 , Processed in 0.035080 second(s), 19 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2025 Discuz! Team.

返回顶部