跳转到主要内容

我们很高兴能够利用asyncio库在LangChain中推出最初的异步支持。Asyncio使用协程和事件循环来执行非阻塞I/O操作;这些协同程序能够在等待最终结果时“暂停”(等待),并在此期间让其他例程运行。要了解更多关于asyncio的信息,以及它与多线程和多处理的比较,请查看这个很棒的教程。

动机

由于LangChain应用程序往往是相当I/O和网络绑定的(调用LLM API并与数据存储交互),asyncio通过允许您同时运行LLM、链和代理提供了显著的优势:当一个代理正在等待LLM调用或工具完成时,另一个代理可以继续取得进展。LangChain中的异步支持还允许您将异步链和代理更无缝地集成到支持异步的框架中,例如FastAPI。

特别查看异步代理文档,看看并发执行可以在多大程度上加快速度!

用法

作为起点,我们已经实现了对以下各项的异步支持:

LLM via agenerate (see docs):

  • OpenAI

Chain via arun and acall (see docs):

  • LLMChain
  • LLMMathChain

Agent and Tool via arun (see docs):

  • SerpAPIWrapper
  • LLMMathChain

下一步

我们才刚刚开始使用异步。在不久的将来,我们希望补充:

  • 异步支持更多LLM、链和代理工具
  • 能够为单个操作输入同时运行多个工具
  • 对回调处理程序的异步支持
  • 通过跟踪提供更无缝的支持