You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决LangGraph与Streamlit中的GRAPH_RECURSION_LIMIT错误

解决LangGraph自循环递归超限(GraphRecursionError)问题

核心原因

你的面试流程自循环没有正确触发停止条件,导致LangGraph触发默认的25次递归限制报错。本质是分支判断逻辑未正确识别信息收集完成状态,或状态更新逻辑未同步收集进度。

具体解决步骤

1. 修复分支判断的停止条件

确保循环分支的判断函数能准确识别信息收集完成的状态,切换到生成面试问题的节点:

def should_continue(state):
    # 假设状态中维护了需要收集的字段列表和已收集字段集合
    required_fields = ["name", "age", "work_experience", "skill"]
    collected_fields = [k for k, v in state.items() if v]
    
    if len(collected_fields) == len(required_fields):
        # 收集完成,进入生成问题节点
        return "generate_questions"
    else:
        # 继续收集信息
        return "collect_info"

2. 确保状态更新逻辑正确

在collect_info节点函数中,必须同步更新状态里的收集进度,否则分支判断永远无法触发停止:

def collect_info(state):
    required_fields = ["name", "age", "work_experience", "skill"]
    # 找出未收集的第一个字段
    missing_field = next((f for f in required_fields if not state.get(f)), None)
    
    if missing_field:
        # Streamlit输入组件收集信息
        input_value = st.text_input(f"请输入候选人的{missing_field}:")
        if input_value:
            # 更新状态,标记该字段已收集
            state[missing_field] = input_value
    
    return state

3. 临时调整递归限制(非核心修复)

如果业务确实需要超过25次循环,可以在编译图时修改递归上限,但这只是临时方案,核心还是要修复停止条件:

from langgraph.graph import StateGraph, END

# 定义状态 schema(示例)
class State(TypedDict):
    candidate_id: str
    name: str
    age: str
    work_experience: str
    skill: str

graph = StateGraph(State)
# 添加节点和分支逻辑...
# 编译时设置递归限制为50次
compiled_graph = graph.compile(recursion_limit=50)

4. 调试状态变化

在Streamlit中加入状态打印,实时确认收集进度是否正确更新,方便定位问题:

def collect_info(state):
    # ...收集逻辑...
    st.write("当前收集状态:", state)
    return state

内容的提问来源于stack exchange,提问作者naruto007

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 08:42:39