如何使用 Burr、FastAPI 和 React 构建流媒体代理

概述如何使用开源工具利用流式传输来构建简单的代理聊天机器人

如何使用 Burr、FastAPI 和 React 构建流媒体代理_第1张图片

       欢迎来到雲闪世界。我们的代理应用程序模型。我们将向您展示如何使用流式传输来构建该模型,以便您可以创建出色的用户体验。图片由作者提供。 在这篇文章中,我们将介绍如何构建一个代理聊天机器人,利用Burr的(我是作者)流式传输功能、FastAPI 的 StreamingResponse和React查询的服务器发送事件 (SSE)向用户发送响应。所有这些都是开源工具。这针对的是那些想要更多地了解 Python 中的流式传输以及如何为其代理/应用程序添加交互性的人。虽然我们使用的工具相当具体,但这些课程应该适用于广泛的流式响应实现。

首先,我们将讨论为什么流式传输很重要。然后,我们将介绍我们使用的开源工具。我们将通过一个示例向您介绍可用于入门的代码,然后分享更多资源和替代实现。

您可以在此处跟踪 Burr + FastAPI 代码,并在此处跟踪前端代码。 您也可以通过运行来运行此示例(您需要一个 OPENAI_API_KEY 环境变量)pip install “burr[start]” && burr,然后导航到 localhost:7241/demos/streaming-chatbot(浏览器将自动打开,只需单击左侧的 demos/streaming-chatbot 即可。 注意,此示例需要burr>=0.23.0

为何要进行流式传输?

虽然通过网络进行流媒体传输是一项90 年代的技术,如今已无处不在(视频游戏、流媒体电视、音乐等),但最近生成式 AI 应用的激增引起了人们对逐字提供和渲染流式文本的兴趣。

LLM 是一项有趣的技术(甚至可能很有用),但运行速度相对较慢,用户不喜欢等待。幸运的是,可以将结果流式传输,以便用户在生成 LLM 响应时看到它。此外,鉴于 LLM 通常机械而沉闷的性质,流式传输可以使它们看起来更具交互性,几乎就像它们在思考一样。

适当的实施将允许跨多个服务边界的流通信,从而使中间代理能够在向用户呈现流数据时增强/存储它。

如何使用 Burr、FastAPI 和 React 构建流媒体代理_第2张图片

​ 聊天机器人架构的简单展示

编辑

虽然这些都不是火箭科学,但使 Web 开发变得简单且基本标准化的相同工具(OpenAPI / FastAPI / React + 朋友等)都具有不同程度的支持,这意味着您经常有多种与您习惯不同的选择。流式传输通常是框架设计中的事后考虑,这会导致各种限制,您可能直到构建到一半才知道。

让我们介绍一下用来实现上述堆栈的一些工具,然后看一个示例。

开源工具

我们将利用这些工具来构建这个,它们彼此之间是很好地解耦的 — — 如果你愿意,你可以交换类似的工具,但仍然应用相同的课程/代码。

伯尔

Burr是一个轻量级 Python 库,可用于将应用程序构建为状态机。您可以使用一系列操作(这些操作可以是修饰函数或对象)构建应用程序,这些操作声明来自状态的输入以及来自用户的输入。这些操作指定自定义逻辑(委托给任何框架)以及如何更新状态的说明。状态是不可变的,这允许您在任何给定点检查它。Burr 处理编排、监控、持久性等)。

@action(reads=["count"], writes=["count"])
def counter(state: State) -> State:
    return state.update(counter=state.get("count", 0) +1)
 
  

您将 Burr 操作作为应用程序的一部分运行 — 这使您可以将它们与一系列(可选)从一个操作到另一个操作的条件转换串联在一起。

from burr.core import ApplicationBuilder, default, expr
app = (
    ApplicationBuilder()
    .with_actions(
        count=count, 
        done=done # implementation left out above
    ).with_transitions(
        ("counter", "counter", expr("count < 10")), # Keep counting if the counter is < 10
        ("counter", "done", default) # Otherwise, we're done
    ).with_state(count=0)
    .with_entrypoint("counter") # we have to start somewhere
    .build()
)
 
  

Burr 带有一个用户界面,可以实现监控/遥测,以及在执行期间保持状态/执行任意代码的挂钩。

您可以将其可视化为流程图,即图形/状态机:

如何使用 Burr、FastAPI 和 React 构建流媒体代理_第3张图片

Burr 免费为您提供这张图片。图片由作者提供。

并使用本地遥测调试器对其进行监控:

如何使用 Burr、FastAPI 和 React 构建流媒体代理_第4张图片

操作系统遥测 UI 可告诉您应用程序在任何给定时间点的状态

虽然上述示例只是一个简单的说明,但 Burr 通常用于代理(如本例)、RAG 应用程序和人机交互 AI 界面。请参阅存储库示例&#

你可能感兴趣的:(人工智能,大语言模型,fastapi)