在复杂的图计算任务中,LangGraph 的递归限制常常是一个令人头疼的问题。一旦递归次数超过默认值,就会触发 GraphRecursionError
错误,让程序陷入困境。但别担心,本文将为你揭秘如何巧妙地控制 LangGraph 的递归次数,让你的图计算更加得心应手!
递归限制,简而言之,就是 LangGraph 图在执行过程中允许的最大递归步骤数。默认情况下,这个值被设定为 25 步。这个限制可以在运行时进行调整,通过传递一个配置字典给 .invoke
或 .stream
方法来实现。
我们先来试一个例子,看看如何设置递归限制:
graph.invoke(inputs, config={"recursion_limit": 5})
这行代码将递归限制设置为 5 步。接下来,我们运行这个图,看看它是否能正常工作。你会发现,当达到递归限制时,图会返回一个错误——这是正常的反应。
那么,如何在避免递归错误的同时,还能获取到图的状态呢?答案就是引入一个新的状态键:remaining_steps
。这个键将跟踪到达递归限制前剩余的步骤数。
首先,我们需要定义一个新的 State
类,包含 value
和 remaining_steps
两个键:
from typing_extensions import TypedDict
from langgraph.graph import StateGraph, START, END
class State(TypedDict):
value: str
remaining_steps: 'RemainingSteps'
接下来,我们需要修改 router
函数,使其在达到递归限制前检查 remaining_steps
的值:
def router(state: State):
if state["remaining_steps"] <= 2:
return END
# ... 其他逻辑 ...
最后,别忘了更新 workflow
的定义,添加 remaining_steps
的节点和边:
workflow = StateGraph(State)
workflow.add_node("decision", decision_node)
workflow.add_node("action", action_node)
workflow.add_edge(START, "decision")
workflow.add_conditional_edges("decision", router, ["action", END])
workflow.add_edge("action", "decision")
现在,当我们运行这个图时,它将在达到递归限制之前获取状态的最后一个值,而不会引发错误。
通过上述方法,我们成功地为 LangGraph 图引入了递归次数的控制机制。这不仅避免了递归错误,还能让我们更加灵活地控制图的执行流程。希望这篇文章能为你在处理 LangGraph 递归问题时提供有益的参考和帮助!
声明:
1、本博客不从事任何主机及服务器租赁业务,不参与任何交易,也绝非中介。博客内容仅记录博主个人感兴趣的服务器测评结果及一些服务器相关的优惠活动,信息均摘自网络或来自服务商主动提供;所以对本博客提及的内容不作直接、间接、法定、约定的保证,博客内容也不具备任何参考价值及引导作用,访问者需自行甄别。
2、访问本博客请务必遵守有关互联网的相关法律、规定与规则;不能利用本博客所提及的内容从事任何违法、违规操作;否则造成的一切后果由访问者自行承担。
3、未成年人及不能独立承担法律责任的个人及群体请勿访问本博客。
4、一旦您访问本博客,即表示您已经知晓并接受了以上声明通告。
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
Copyright 2005-2024 yuanmayuan.com 【源码园】 版权所有 备案信息
声明: 本站非腾讯QQ官方网站 所有软件和文章来自互联网 如有异议 请与本站联系 本站为非赢利性网站 不接受任何赞助和广告