我们很高兴通过利用 asyncio 库在 LangChain 中推出初始异步支持。Asyncio 使用协程和事件循环来执行非阻塞 I/O 操作;这些协程能够在等待最终结果时“暂停”(await
),并让其他例程在此期间运行。要了解有关 asyncio 以及它与多线程和多进程相比如何的更多信息,请查看这篇精彩教程。
动机
由于 LangChain 应用程序往往是 I/O 和网络密集型的(调用 LLM API 并与数据存储交互),asyncio 通过允许您并发运行 LLM、链和代理提供了显着优势:当一个代理正在等待 LLM 调用或工具完成时,另一个代理可以继续取得进展。LangChain 中的异步支持还允许您更无缝地将异步链和代理集成到支持 asyncio 的框架中,例如 FastAPI
。
特别查看异步代理文档,了解并发执行如何显着加快速度!
用法
作为起点,我们已经实现了对以下内容的异步支持
通过 agenerate
的 LLM
(参见文档)
OpenAI
通过 arun
和 acall
的 Chain
(参见文档)
LLMChain
LLMMathChain
通过 arun
的 Agent
和 Tool
(参见文档)
SerpAPIWrapper
LLMMathChain
下一步
我们才刚刚开始使用 asyncio。在不久的将来,我们希望添加
- 对更多 LLM、链和代理工具的异步支持
- 为单个操作输入并发运行多个工具的能力
- 对回调处理程序的异步支持
- 与追踪更无缝的集成