LangGraph多节点教学聊天机器人节点切换无响应问题排查
问题排查与解决方案
一、teach_ai节点无响应的核心排查点
- 节点无返回值:检查
teach_ai节点函数是否有明确返回值,LangGraph节点必须返回可序列化对象(字典、字符串等),仅执行逻辑不return会导致无输出。 - 状态未正确更新:确认
teach_ai是否将教学内容写入状态的messages或指定键中,LangGraph依赖状态流转传递输出。 - 路由条件不匹配:检查
chathandler收集信息后是否正确设置状态标记(如state["stage"] = "teach_ai"),且路由逻辑准确读取该标记。 - LLM调用异常:若
teach_ai内部调用大模型,需添加异常捕获并打印日志,排查API密钥、参数或网络问题。
二、核心代码修正示例
修复teach_ai节点返回问题
def teach_ai_node(state): # 生成AI主题课程内容 course_content = f"你好{state['user_name']},现在开始AI基础课程:AI是人工智能的简称,核心包含机器学习、深度学习等分支..." # 必须返回更新后的状态,确保内容传递到输出 return {"messages": [{"role": "assistant", "content": course_content}]}
确认路由绑定逻辑
def route_after_chathandler(state): # 校验姓名和年龄是否已收集 if state.get("user_name") and state.get("user_age"): return "teach_ai" else: return "chathandler" # 图构建时绑定路由 graph.add_conditional_edges( "chathandler", route_after_chathandler, {"teach_ai": "teach_ai", "chathandler": "chathandler"} )
三、多节点课程流转逻辑实现
1. 课程完成标记与路由
为每个教学节点添加完成状态,通过路由判断后续流转:
def teach_ai_node(state): course_content = f"你好{state['user_name']},现在开始AI基础课程:AI是人工智能的简称..." # 标记AI课程已完成 completed_courses = state.get("completed_courses", []) + ["ai"] return { "messages": [{"role": "assistant", "content": course_content}], "completed_courses": completed_courses } def route_after_teach(state): # 未完成提示词课程则跳转至对应节点 if "prompt" not in state.get("completed_courses", []): return "teach_prompt" # 所有课程完成进入总结节点 else: return "course_summary"
2. 工具触发流转(transfer_to_teach_prompt)
扩展工具实现节点跳转:
from langchain.tools import tool @tool def transfer_to_teach_prompt(state): """切换到提示词课程节点""" return {"stage": "teach_prompt"} # 工具调用后的路由逻辑 def route_after_tool(state): if state.get("stage") == "teach_prompt": return "teach_prompt" return "default"
3. 课程总结节点
所有课程完成后生成学习总结:
def course_summary_node(state): completed_courses = state.get("completed_courses", []) summary = f"{state['user_name']}你已完成以下课程:{','.join(completed_courses)},恭喜你完成全部教学内容!" return {"messages": [{"role": "assistant", "content": summary}]}
四、调试技巧
- 在每个节点函数中添加
print语句,输出当前状态和执行情况,快速定位无响应节点。 - 使用LangGraph的
print_graph()方法可视化图结构,检查节点连接是否正确。 - 开启调试日志排查细节:
import logging logging.basicConfig(level=logging.DEBUG)
内容的提问来源于stack exchange,提问作者Raheem Tariq
相关产品推荐
相关产品推荐

