跳转到主要内容

category

我们很高兴宣布在LangChain中提供流媒体支持。有很多关于LLM应用程序最佳用户体验的讨论,我们相信流媒体是其核心。我们还更新了chat langchain repo,以包括流和异步执行。我们希望这个回购可以作为开发人员构建一流聊天和问答应用程序的模板。

动机

开发人员在尝试构建有用的LLM应用程序时讨论的最大痛点之一是延迟;这些应用程序经常对LLM API进行多次调用,每次调用需要几秒钟的时间。盯着一个加载微调器看几秒钟以上可能会让用户感到非常沮丧。

流式处理通过逐个令牌而不是一次性返回LLM令牌的输出,有助于减少这种感知的延迟。在聊天应用程序的上下文中,当LLM生成令牌时,它可以立即提供给用户。虽然这不会改变从问题提交到完全响应的端到端执行时间,但它通过向用户显示LLM正在取得进展,大大减少了感知到的延迟。ChatGPT是利用LLM流的应用程序的一个很好的例子。我们构建了一个示例聊天机器人应用程序,该应用程序与ChatGPT一样使用流媒体(更多详细信息如下):

https://www.loom.com/share/a64b1def314a4884ab0526bf77d9fa65

用法

作为起点,我们已经实现了对LLM的OpenAI实现的流式支持。请阅读此处的完整文档。

我们支持一个名为on_llm_new_token的回调,当OpenAI的流参数设置为True时,用户可以在回调处理程序中实现该回调。同步和异步执行都支持流式处理。

Web应用程序模板

既然你已经使用LangChain为Chat Your Data Challenge挑战(或其他应用程序)构建了一个聊天机器人,你可以在终端中运行,接下来会是什么?把这个程序变成一个多用户可以利用的网络应用程序怎么样?

我们已经对聊天语言链进行了一些更改,以强调如何将相关的语言链功能集成到一个可以支持许多用户的随时部署的应用程序中的最佳实践。该应用程序利用FastAPI作为后端,并使用Jinja模板制作了一个非常基本的UI。回购仍然是开源的-欢迎更改和建议!

流(Streaming)

该应用程序利用LangChain流,并实现StreamingLLMCallbackHandler,通过websocket将每个令牌发送回客户端。另一个回调处理程序QuestionGenCallbackHandler用于在ChatVectorDBChain的问题生成步骤向客户端发送消息。

异步执行

该应用程序利用最近添加的对选择链和LLM的异步支持来支持并发执行(而不必生成多个线程和引发竞争)。当有多个客户端连接到应用程序时,这一点很重要:

https://www.loom.com/share/b07b00e0e39147e3ba43afbaae55a82d

下一个

我们才刚刚开始使用流媒体、回调和异步支持!我们希望得到任何反馈。在不久的将来,我们希望实施:

  • 对其他LLM的流式传输支持。
  • 回调处理程序的更多示例和用例。
文章链接