LangGraph做Agent闭环流程怎么设计?节点、状态和重试边界要定清

时间:2026-06-15 17:56:25 来源:互联网

LangGraph做Agent闭环流程,核心是把“模型判断、工具调用、结果检查、失败重试”拆成清楚的图结构。节点负责做事,状态负责传递上下文,条件边决定去工具、返回模型还是结束,重试只放在可控边界内。

LangGraph做Agent闭环流程怎么设计?节点、状态和重试边界要定清

LangGraph做Agent闭环流程怎么设计?节点、状态和重试边界要定清

闭环不是让模型一直自我循环

很多人设计Agent时,会把“继续思考”“再试一次”“调用工具”都塞进一个大函数里。这样短期能跑,问题一多就很难定位:到底是提示词没给够,工具返回不稳定,还是状态被覆盖了。LangGraph更适合把流程拆开,让每一步都有名字、有输入、有输出。

可维护的闭环一般从StateGraph开始。你需要先定义状态里保存什么,例如读者问题、messages、工具结果、错误次数、是否满足结束条件。状态不要什么都放,越杂越难判断下一步该走哪条边。

节点要按责任拆,不按代码行拆

一个基础Agent闭环通常有三个关键节点:模型节点、工具节点、检查节点。模型节点只负责读状态并生成下一步意图;工具节点只负责执行检索、计算、接口调用等动作;检查节点判断结果能不能交付,或是否需要回到模型节点补充。

  1. 模型节点:读取读者输入和历史结果,决定直接回答还是调用工具。
  2. 工具节点:接收模型给出的工具名称和参数,执行后把结果写回状态。
  3. 检查节点:判断工具结果是否为空、格式是否可用、是否触发重试上限。
  4. 结束节点:只在答案完整、状态满足交付条件时进入。

节点不要承担太多隐藏判断。比如工具失败后直接在工具节点里改写问题再调用模型,会让失败原因变得模糊。更稳的做法是把错误写入状态,由条件边决定回到模型节点、进入重试节点,还是结束并返回可解释的失败信息。

状态字段决定Agent能不能回头

闭环流程最怕“看起来在重试,实际在重复犯错”。状态里至少要有三类字段:任务上下文、执行结果、控制字段。任务上下文保存读者目标和必要历史;执行结果保存工具输出、模型草稿、验证结果;控制字段保存retry_count、last_error、route等。

不要只保存一串messages。messages适合给模型看,不适合做工程判断。比如接口返回超时、JSON解析失败、工具结果为空,这些都应该成为明确字段,条件边才能精准判断下一步。

状态设计还有一个细节:节点输出最好只改自己负责的字段。模型节点不要清空工具结果,工具节点不要改写读者问题,检查节点不要顺手生成最终答案。字段边界清楚,后面做单节点测试和失败复现会轻很多。

条件边要回答三个问题

LangGraph里的条件边不是装饰,它是Agent闭环的方向盘。每次节点执行完,都要回答:任务完成了吗;还需要工具吗;失败是否值得重试。只要这三个问题没有写成明确分支,流程就容易变成随机游走。

  1. 模型输出含工具调用,并且参数完整,进入工具节点。
  2. 模型输出不需要工具,且答案满足格式要求,进入结束节点。
  3. 工具结果为空或报错,检查retry_count是否达到上限。
  4. 未到上限,带着last_error回到模型节点重新规划。
  5. 达到上限,进入失败收束节点,给出可执行的下一步。

这里的“失败收束”很重要。工程里的Agent不应该无限等待模型变聪明。达到边界后要告诉读者缺少什么输入、哪个工具没返回、下一次该补什么条件,而不是给出看似完整的答案。

重试边界放在工具和验证后

重试不是越多越好。网络请求、外部API、检索为空、模型格式错误,重试策略都不一样。工具调用失败可以短重试,格式错误可以回模型修正,业务条件不满足就不该重试。

推荐把重试次数写进状态,而不是藏在节点内部。这样条件边能看到已经重试几次,测试时也能直接构造retry_count为0、1、3的状态,验证流程是否按预期进入工具节点、模型节点或结束节点。

比较稳的边界是:工具超时重试1到2次;工具结果为空回模型改写查询1次;输出格式不合格让模型修正1次;业务数据缺失直接结束并提示缺少字段。这样闭环不会卡死,也不会把同一个错误包装成不同答案。

验证要从单节点开始

Agent闭环上线前,不要只跑一条完整样例。更有效的是把关键节点单独喂状态测试:模型节点是否生成正确route,工具节点是否只改工具结果字段,检查节点是否能把失败和成功分开。

还要准备几类坏输入:读者问题不完整、工具返回空数组、接口报错、模型返回了错误格式、retry_count已经到上限。每一类都跑过,才能确认闭环不是只在演示样例里成立。

落到实际设计,可以从最小闭环开始:START进入模型节点,模型节点通过条件边去工具节点或END,工具节点回到模型节点,检查节点负责收束失败。等这个流程稳定后,再加多工具路由、人工确认、缓存和长期记忆,结构会清楚很多。