首页 > 其他分享 >LangGraph的两种基础流式响应技巧

LangGraph的两种基础流式响应技巧

时间:2024-11-12 09:19:32浏览次数:1  
标签:LangGraph 模式 响应 流式 LLM 节点

在构建复杂的AI应用时,LangGraph作为一个强大的工具,为我们提供了灵活的图结构程序设计能力。今天,我们将深入探讨LangGraph中的一个关键特性:流式响应模式。这个特性不仅能提高应用的响应速度,还能为用户提供更加流畅的交互体验。

LangGraph中的流式响应:与传统LLM有何不同?

在LangGraph中,编译后的图程序本质上是一个Runnable可运行组件。与传统的大语言模型(LLM)不同,LangGraph支持多种流式模式输出。传统LLM的流式模式通常是一个词一个词地输出,而LangGraph的流式响应每次输出的是一个节点的数据状态。这种设计为我们提供了更细粒度的控制和更丰富的数据展示方式。

两种基本的流式模式

LangGraph提供了两种主要的流式响应模式,每种模式都有其特定的使用场景:

  1. values模式

    • 返回图的完整状态值(总量)
    • 每个节点调用后,返回图的完整状态
    • 适用于需要随时了解整个图状态的场景
  2. updates模式

    • 返回图的状态更新(增量)
    • 每个节点调用后,只返回状态的变化部分
    • 适用于只关注变化部分,或需要节省带宽的场景

如何使用流式模式?

使用流式模式非常简单。在调用stream()函数时,只需传递stream_mode参数即可配置不同的流式响应模式。让我们以ReACT智能体为例,来看看如何使用这两种模式:

# values模式示例
inputs = {"messages": [("human", "2024年北京半程马拉松的前3名成绩是多少?")]}
for chunk in agent.stream(
    inputs,
    stream_mode="values",
):
    print(chunk["messages"][-1].pretty_print())

# updates模式示例 
for chunk in agent.stream(
    inputs,
    stream_mode="updates",
):
    print(chunk)

在values模式下,每次输出都是完整的数据状态。而在updates模式下,返回的是字典格式的增量数据,键为节点名称,值为状态的更新。

当前限制与未来展望

虽然LangGraph的流式响应机制已经为我们提供了强大的功能,但它仍然存在一些限制。目前,虽然我们可以正确获取每个节点的数据,但等待时间仍然较长,特别是涉及大语言模型的节点。这是因为节点本身也应该支持流式输出。理想情况下,大语言模型节点在图的流式输出下应该保持其固有的流式特性,而不是等待完整输出后再返回。

理想的Agent输出方式

市面上常见的Agent系统(如Coze、Dify、智谱、GPTs等)采用了更优的方案:每个步骤(如知识库检索、工具调用、LLM生成内容)完成后立即流式返回。这种方式能够提供更快的响应速度和更好的用户体验。

Agent 执行了几个步骤:知识库检索、工具调用、LLM生成内容,当每个步骤完成之后都会流式返回内容给前端,并且在一些相对耗时的步骤,例如 LLM生成内容 也在该步骤内进行了流式输出,这样可以避免用户亦或者 API 接口长时间没有响应导致连接中断,也能提升用户体验。

结语

LangGraph的流式响应机制为我们构建高效、响应迅速的AI应用提供了强大的工具。通过合理利用values和updates两种模式,我们可以根据具体需求优化应用的性能和用户体验。虽然当前还存在一些限制,但随着技术的不断发展,我们可以期待LangGraph在未来提供更加完善和高效的流式处理能力。

在实际应用中,建议开发者根据具体场景选择合适的流式模式,并持续关注LangGraph的更新,以便利用最新的特性来优化您的AI应用。

标签:LangGraph,模式,响应,流式,LLM,节点
From: https://www.cnblogs.com/muzinan110/p/18541095

相关文章

  • LangGraph中的检查点与人机交互
    一、LangGraph的检查点机制检查点机制是LangGraph中一个强大的功能,它允许我们在图执行的特定点暂停处理,保存状态,并在需要时恢复。1.1检查点的基本概念检查点本质上是图执行过程中的一个快照,包含了当前的状态信息。这对于长时间运行的任务、需要人工干预的流程,或者需要断点续传......
  • 使用LangGraph构建复杂AI工作流:子图架构详解
    一、子图架构概述子图(Subgraph)是LangGraph中一个强大的特性,它允许我们将复杂的工作流程分解成更小、更易管理的组件。通过子图,我们可以实现模块化设计,提高代码的可重用性和可维护性。1.1子图的基本概念子图本质上是一个完整的图结构,可以作为更大图结构中的一个节点使用。它具......
  • LangGraph入门:构建ReACT架构的智能Agent
    引言在人工智能和大语言模型(LLM)快速发展的今天,如何构建高效、灵活的智能Agent成为了一个热门话题。LangGraph作为一个强大的工具,为我们提供了一种新的方式来实现复杂的AI工作流,特别是在构建ReACT(ReasoningandActing)架构的智能Agent方面表现出色。本文将深入探讨如何使用LangGra......
  • LangGraph进阶:条件边与工具调用Agent实现
    在前两篇文章中,我们讨论了LCEL和AgentExecutor的局限性,以及LangGraph的基础概念。今天,我们将深入探讨LangGraph的高级特性,重点关注条件边的使用和如何实现一个完整的工具调用Agent。条件边的高级用法条件边是LangGraph中最强大的特性之一,它允许我们基于状态动态决定执行流......
  • SpringBoot响应式企业官网开发2mutj 程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统内容:用户,资讯信息,类型,产品信息,产品类型,招聘信息,招聘类型,投递信息开题报告内容一、研究背景与意义随着互联网技术的飞速发展,企业官网已成为展示企业......
  • vue将字段绑定为响应式和不为响应式的情况
    背景:在项目中,因为自己直接将列表的对象中的字段在vue中赋值了,并且未使用$set方法,导致赋值的字段没有响应式,在页面点击输入,没有数据的变化。 字段具有响应式的几种方法:1:前端请求的后端接口返回的数组对象中,返回的字段存在的话,前端会将这个对象中的字段设置为响应式的,存在get......
  • Springboot 的Servlet Web 应用、响应式 Web 应用(Reactive)以及非 Web 应用(None)的特点
    基于Servlet的Web应用(ServletWeb)    特点         使用传统的ServletAPI和SpringMVC框架。         采用阻塞I/O模型,每个请求都会占用一个线程直到请求处理完毕。         适合处理同步请求-......
  • 使用 Python 流式 Websocket 传输 Binance 订单更新 附代码
    对于从事加密货币行业的任何人来说,使用RESTapi从交易所查询实时数据并不总是最佳做法,原因有很多效率低下:每个查询都需要时间,并且会显着影响性能,尤其是对于高频策略。交易所施加的限制很容易被打破,例如Binance的硬限制为每分钟1200个请求权重您只能检索有限数量的历史数......
  • ETL架构怎么选?全量、增量还是实时流式?
    一、ETL:基本定义:ETL是将业务系统的数据经过抽取(Extract)、清洗转换(Transform)之后加载(Load)到数据仓库的过程,目的是将企业中分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据。主要组成部分:1、数据抽取:从不同的数据源(如数据库、文件系统、外部系统等)读取......
  • JavaLin第六章:JavaLin的访问管理和默认响应
    文章目录前言一、JavaLin的访问管理二、JavaLin的默认响应总结前言最近忙起来了,就没有更新了,实在不不好意思,最近会进行javalin的陆陆续续的更新,希望大家支持。在Java里面有很多框架,其中权限管理是一个非常重要的功能实现,对于每个用户设定该用户的角色,对应相应用户......