订阅以接收新文章的通知:

Workers AI 中大型语言模型的流式传输和更长的背景信息

2023/11/14

6 分钟(阅读时间)
Streaming LLMs and longer context lengths available in Workers AI

Workers AI 是我们的无服务器 GPU 驱动的推理平台,在 Cloudflare 的全球网络之上运行。它提供了越来越多的现成模型目录,这些模型可以使用 Workers 无缝运行,并使开发人员能够在几分钟内构建强大且可扩展的 AI 应用程序。我们已经看到开发人员使用 Workers AI 构建出了惊人的作品,随着我们继续扩展平台,我们迫不及待地想看到他们的最新成果。为此,今天我们很高兴地宣布推出一些饱受期待的新功能:Workers AI 上所有大型语言模型 (LLM) 的流式响应、更长的背景信息和序列窗口以及全精度 Llama-2 模型变体 。

如果您以前使用过 ChatGPT,那么您就会熟悉响应流的好处,其中响应按令牌逐个流动。LLM 的内部工作方式是使用重复推理过程按顺序生成响应,LLM 模型的完整输出本质上是数百或数千个单独预测任务的序列。因此,生成一个令牌只需要几毫秒,而生成完整的响应则需要更长的时间,大约需要几秒钟。好消息是,我们可以在生成第一个令牌后立即开始显示响应,并追加每一个额外的令牌,直到响应完成。这将为最终用户带来更好的体验——随着文本的生成逐步显示文本,不仅能提供即时响应,还能让最终用户有时间阅读和解释文本。

截至今天,您可以对我们目录中的任何 LLM 模型使用响应流,包括非常流行的 Llama-2 模型。下面是它的工作原理。

Server-sent events:浏览器 API 中的宝藏

Server-sent events 易于使用、易于在服务器端实施、合乎标准,并且可在许多平台上原生或作为填充程序广泛使用。Server-sent events 填补了处理来自服务器的更新流的空白,处理事件流原本所需的样板代码如今已不再需要。

易于使用 流传输 双向
fetch
Server-sent events
Websockets
比较 fetch、server-sent events 和 websocket

要开始在WorkersAI的文本生成模型上通过 server-sentevents 使用流式传输,请在请求输入中将“stream”参数设置为true。这会将响应格式和 mime-type 更改为 text/event-stream

下面是通过 REST API 使用流式传输的示例:

curl -X POST \
"https://api.cloudflare.com/client/v4/accounts/<account>/ai/run/@cf/meta/llama-2-7b-chat-int8" \
-H "Authorization: Bearer <token>" \
-H "Content-Type:application/json" \
-d '{ "prompt": "where is new york?", "stream": true }'

data: {"response":"New"}

data: {"response":" York"}

data: {"response":" is"}

data: {"response":" located"}

data: {"response":" in"}

data: {"response":" the"}

...

data: [DONE]

下面是使用 Worker 脚本的示例:

import { Ai } from "@cloudflare/ai";
export default {
    async fetch(request, env, ctx) {
        const ai = new Ai(env.AI, { sessionOptions: { ctx: ctx } });
        const stream = await ai.run(
            "@cf/meta/llama-2-7b-chat-int8",
            { prompt: "where is new york?", stream: true  }
        );
        return new Response(stream,
            { headers: { "content-type": "text/event-stream" } }
        );
    }
}

如果您想在浏览器页面中使用此 Worker 的输出事件流,则客户端 JavaScript 类似于:

const source = new EventSource("/worker-endpoint");
source.onmessage = (event) => {
    if(event.data=="[DONE]") {
        // SSE spec says the connection is restarted
        // if we don't explicitly close it
        source.close();
        return;
    }
    const data = JSON.parse(event.data);
    el.innerHTML += data.response;
}

您可以将此简单的代码与任何简单的 HTML 页面、使用 React 或其他 Web 框架的复杂 SPA 结合使用。

这为用户创造了更具交互性的体验,现在,随着响应的增量创建,用户会看到页面更新,而不是看到一个旋转画面,等待整个响应序列生成。尝试在 ai.cloudflare.com 上进行流式传输。

Workers AI 支持 Llama-2 模型以及我们未来添加到目录中的任何 LLM 模型的流式文本响应。

但这还不是全部。

更高的精度以及更长的背景信息和序列长度

Workers AI 推出后,我们从社区听到的另一个最重要的请求是在我们的 Llama-2 模型中提供更长的问题和答案。在 LLM 术语中,这意味着更高的背景信息长度(模型在进行预测之前作为输入的令牌数量)和更高的序列长度(模型在响应中生成的令牌数量)。

我们听取了建议,并结合流式传输,今天我们在目录中添加了更高的 16 位全精度 Llama-2 变体,并增加了现有 8 位版本的背景信息和序列长度。

模型 背景信息长度(输入) 序列长度(输出)
@cf/meta/llama-2-7b-chat-int8 2048(之前为 768) 1800(之前为 256)
@cf/meta/llama-2-7b-chat-fp16 3072 2500

流式传输、更高的精度以及更长的背景信息和序列长度可提供更好的用户体验,并使用 Workers AI 中的大型语言模型启用新的、更丰富的应用程序。

查看 Workers AI 开发人员文档以获取更多信息和选项。如果您对 Workers AI 有任何疑问或反馈,请在 Cloudflare 社区Cloudflare Discord 中与我们联系。
如果您对机器学习和无服务器 AI 感兴趣,Cloudflare Workers AI 团队正在构建一个全球规模的平台和工具,让我们的客户能够在我们的网络之上运行快速、低延迟的推理任务。请查看我们的职位页面,了解工作机会。

我们保护整个企业网络,帮助客户高效构建互联网规模的应用程序,加速任何网站或互联网应用程序抵御 DDoS 攻击,防止黑客入侵,并能协助您实现 Zero Trust 的过程

从任何设备访问 1.1.1.1,以开始使用我们的免费应用程序,帮助您更快、更安全地访问互联网。要进一步了解我们帮助构建更美好互联网的使命,请从这里开始。如果您正在寻找新的职业方向,请查看我们的空缺职位
Workers AI (CN)Cloudflare Workers (CN)Developer Platform (CN)JavaScript (CN)Serverless (CN)简体中文

在 X 上关注

Celso Martinho|@celso
Cloudflare|@cloudflare

相关帖子

2024年4月02日 13:01

升级版 Workers AI:现已正式发布且具备更多新增功能

今天,我们欣然发布包括 Workers AI、Cloudflare 的推理平台进入 GA 阶段以及支持使用 LoRA 对模型进行微调,并支持从 HuggingFace 进行一键部署等一系列消息。 Cloudflare Workers 现已支持 Python 编程语言及更多功能...

2024年3月14日 12:30

缓解 Cloudflare AI 产品中的令牌长度侧信道攻击

Workers AI 和 AI Gateway 团队最近与本古里安大学的安全研究人员密切合作,通过我们的公共漏洞悬赏计划提交了一份研究报告。通过这个流程,我们发现并完全修补了一个可能会影响所有大型语言模型 (LLM) 提供商的漏洞。以下是完整的内容...