关于Langchain/Langgraph框架的流式与非流式返回——invoke/ainvoke/stream/astream 原创

发布于 2025-8-18 07:43
浏览
0收藏

“ 框架是对底层能力的抽象与封装,而并不能绕过底层能力实现一些不存在的功能。”

在使用Langchain和Langgraph大模型应用开发框架的过程中,一直在使用invoke/ainvoke/stream/astream这四个方法;刚开始只知道这四种方法可以实现流式和非流式返回,并且有同步和异步的区别,但一直没搞明白是怎么回事;总以为是框架封装的功能。

但直到这两天才偶然发现原来其并没有想象中的那么复杂;虽然说这四个方法是框架封装的方法不能说有错,但其实本质上还是对大模型功能的应用。

流式返回问题的研究

在Langchain和Langgraph框架中实现同步和异步,流式与非流式的四个方法——invoke/ainvoke/stream/astream,从本质上来说是对大模型能力的封装,而不是其框架能力的封装。

首先,我们要弄明白一个问题——那就是任何框架,哪怕功能再强大,其都不可能绕过底层功能的限制;以Langchain/Langgraph框架为例,其支持的流式和非流式返回的根本是因为大模型有流式和非流式传输;否则,如果大模型不支持流式输出,即使框架支持流式输出,也只是假流式输出而不是真流式。

所以说框架中非流式invoke和流式stream输出的区别就是stream=False/True的区别。

关于Langchain/Langgraph框架的流式与非流式返回——invoke/ainvoke/stream/astream-AI.x社区

所以在使用框架时,流式输出默认调用模型时的stream的参数值等于True,而非流式输出的默认参数值stream=False。

那么,所谓的invoke/ainvoke同步和异步又有什么区别呢?

所谓的同步和异步,从本质上来说就是同步网络框架和异步网络框架的区别;在python开发中,同步网络包有requests,异步网络包有aiohttp,还有同时支持同步和异步的httpx等。

所以,所谓的同步非流式就是使用同步网络包+stream=False,同步流式就是同步网络包+stream=True;而异步流式与非流式同理,就是异步网络包aiohttp/httpx+stream=True/False的区别。

只不过,Langchain/Langgraph框架并不是直接调用模型的接口,而是通过openai封装好的工具包进行调用;原因就在于,openai已经成为模型应用的一种标准,现在市面上绝大部分模型的接口都是按照openai的标准进行开发的;这样一是避免了完全从零开始开发,二是统一标准之后有更好的迁移性。

关于Langchain/Langgraph框架的流式与非流式返回——invoke/ainvoke/stream/astream-AI.x社区

关于非流式返回没什么好说的,就是在大模型处理完成之后一次性把所有结果进行返回;但关于流式返回,在框架中是通过迭代器的方式进行处理的,流式接口stream/astream返回一个迭代器对象,然后通过遍历迭代器的方式就可以实现流式获取模型的返回结果。

从框架中这四个方法的研究中悟出了一个道理,那就是我们有时候太过在意框架本身;反而忽略了最基础的东西,毕竟框架是对底层功能的抽象和封装,而并不能直接跳过底层能力,而实现一些不存在的功能。

所以,我们在学习框架的同时,还要多关注一下大模型基础功能的发展,这样我们才能知道大模型到底应该怎么用。


本文转载自​​​AI探索时代​​​ 作者:DFires

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
收藏
回复
举报
回复
相关推荐