LangGraph 判断节点实战:用条件路由打造智能天气查询 Agent
为什么需要 LangGraph 判断节点常规 AI 对话流程多为固定顺序无法根据用户意图动态调整执行路径。在工具型 Agent 中系统必须先判断用户问题是否需要调用外部工具工具执行后如何衔接结果输出非工具类问题直接结束流程LangGraph 的判断节点本质是工作流的 “大脑”基于对话状态实时决策下一步走向让 Agent 具备类人的思考与分支能力同时保持流程清晰、可扩展、易维护。二、核心设计消息图与判断节点架构本次实践采用 LangGraph 的MessageGraph消息图架构状态以对话消息列表为载体天然适配多轮交互场景。整体流程分为三层节点决策判断节点接收用户输入通过大模型输出标准化指令完成意图识别工具执行节点根据判断结果调用天气查询工具获取真实数据结果生成节点格式化工具返回信息输出友好回答判断节点作为流程入口承担全流程的路由指挥工作是整个 Agent 的逻辑核心。三、判断节点的核心能力1. 意图识别与指令标准化判断节点通过强约束提示词引导大模型输出纯 JSON 格式指令明确两种动作需查询天气触发工具调用无需工具直接结束流程指令格式统一、无冗余内容为后续路由提供稳定输入。2. 运行时动态路由判断节点执行完成后条件路由函数读取指令中的动作字段实时决定流程走向动作匹配天气查询 → 跳转工具节点动作匹配结束指令 → 终止工作流无需硬编码分支逻辑流程可随业务灵活扩展。3. 状态共享与上下文传递判断节点基于全局消息状态做决策工具节点与结果节点可无缝读取上下文保证多步骤间数据一致避免信息断层。四、判断节点实现逻辑拆解1. 节点定义与状态处理判断节点以消息状态为输入调用大模型生成决策指令对输出内容做轻量化清洗保证指令纯净可解析为路由环节筑牢基础。2. 条件边与路由映射通过条件边绑定判断节点与路由函数建立 “指令动作→执行节点” 的映射关系。普通边固定工具执行与结果生成的顺序形成完整闭环判断节点 →条件→ 工具节点 → 结果节点 → 结束判断节点 →条件→ 结束3. 图编译与流程可视化完成节点与边的定义后编译生成可执行工作流并支持 ASCII 流程图输出直观呈现判断节点的分支逻辑便于调试与维护。五、场景验证判断节点的实际效果测试 1天气查询意图用户询问城市天气时判断节点识别工具需求路由至天气工具执行查询后生成格式化回答流程完整闭环。测试 2非工具类问题用户提出无关问题时判断节点直接输出结束指令工作流立即终止避免无效工具调用提升响应效率。两种场景均由判断节点统一调度流程切换流畅逻辑清晰可控。六、总结与扩展价值LangGraph 的判断节点本质是将复杂分支逻辑图式化以节点 条件边的方式替代繁琐的条件嵌套代码。在本次天气 Agent 中判断节点实现了意图精准识别与流程动态调度工具调用与直接回答的自由切换可视化工作流与低耦合架构设计该模式可直接迁移至知识库问答、函数调用、多步骤任务编排等场景是构建可靠、灵活 AI Agent 的核心方案。代码实现123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156importjsonfromlangchain_core.messagesimportHumanMessage, AIMessage,SystemMessagefromlangchain_openaiimportChatOpenAIfromlanggraph.graphimportMessageGraph, ENDimportredefremove_think_tags(text):移除字符串中think/think标签及其内容Args:text: 包含think标签的字符串Returns:移除think标签及其内容后的字符串# 支持多行内容和标签可能有的属性patternrthink[^]*.*?/thinkresultre.sub(pattern, , text, flagsre.DOTALL)# 清理空白字符resultresult.strip()resultre.sub(r\n{3,},\n\n, result)# 限制连续换行returnresult# 1. LLM 配置 # 配置 Deepseek 密钥和模型参数DEEPSEEK_API_KEYxxxxxxxxxxxxxxx# 替换为实际的 API KeyllmChatOpenAI(api_keyDEEPSEEK_API_KEY,base_urlhttps://xxxxxxxxxxxx/v1,# Deepseek 的 API 基础地址modeldeepseek-v3:671b,# Deepseek 对话模型可选deepseek-chat-pro 等高级模型temperature0.7,# 温度参数0-1越低越稳定max_tokens1024# 最大生成 tokens)# 2. 工具节点模拟天气 APIdefweather_tool(city):weather_map{北京:晴25°C微风,上海:多云28°C东南风3级,广州:雷阵雨30°C南风4级,深圳:大雨29°C西南风5级}returnweather_map.get(city, f{city}暂无天气数据)# 3. 定义图节点 defchain1_node(state):决策节点严格约束 LLM 输出纯 JSONprint(chain1_node--state:str(state))# 核心修复强化 Prompt 约束 降低 temperaturesystem_prompt(你是一个天气助手。请严格遵守1. 只输出纯JSON格式为{action:check_weather,action_input:城市名}或{action:Final Answer,action_input:结束end}2. 禁止输出任何其他字符包括空格、换行、标记、解释文字3. 必须使用双引号4. 只输出JSON不要任何其他文字。)# 调用 LLMresponsellm.invoke([SystemMessage(contentsystem_prompt)]state)# 最小清理仅去除首尾空白应对模型可能的空格cleaned_contentresponse.content.strip()#去掉 think部分cleaned_contentremove_think_tags(cleaned_content)# print(chai1cleaned_content:cleaned_content)# 返回清理后的纯文本消息returnAIMessage(contentcleaned_content)deftool_node(state):工具节点执行天气查询print(tool_node--state:str(state))last_msgstate[-1].content# 直接解析假设 chain1_node 已确保纯 JSONaction_datajson.loads(last_msg)# 无 try-except依赖 Prompt 约束cityaction_data.get(action_input,北京)or北京resultweather_tool(city)returnHumanMessage(contentf城市:{city}|天气:{result})defchain2_node(state):结果生成节点print(chain2_node--state:str(state))# state[-1]最后一个元素tool_resultstate[-1].contentcitytool_result.split(|)[0].replace(城市:, )weathertool_result.split(|)[1].replace(天气:, )returnAIMessage(contentf️ {city}当前天气{weather})# 4. 构建带条件边的图 graphMessageGraph()#定义点graph.add_node(chain1, chain1_node)# 决策节点LLM判断要查天气/直接结束graph.add_node(tool, tool_node)# 工具节点调用天气查询函数graph.add_node(chain2, chain2_node)# 结果节点格式化输出天气信息#定义分支graph.set_entry_point(chain1)# 条件边路由函数直接解析无复杂提取defrouter(state):last_msgstate[-1].content# 直接解析 JSON依赖 chain1_node 的纯输出保证actionjson.loads(last_msg)[action]print(f\n 路由决策: action{action})returntoolifactioncheck_weatherelseENDgraph.add_conditional_edges(chain1,router,{tool:tool, END: END})graph.add_edge(tool,chain2)graph.add_edge(chain2, END)appgraph.compile()# 画流程图print(app.get_graph().draw_ascii())# 5. 执行测试 if__name____main__:print(*60)print(️ 天气查询 Agent 测试纯 JSON 输出保障)print(*60)# 测试用例1天气查询print(\n_TestCase 1: 天气查询 → 触发工具调用_)inputs[HumanMessage(content北京天气怎么样)]foreventinapp.stream(inputs):nodelist(event.keys())[0]msgevent[node].contentprint(f\n[→ {node}])print(f {msg})

相关新闻

PVE Tools终极指南:10分钟搞定Proxmox VE复杂配置的完整工具箱

PVE Tools终极指南:10分钟搞定Proxmox VE复杂配置的完整工具箱

PVE Tools终极指南:10分钟搞定Proxmox VE复杂配置的完整工具箱 【免费下载链接】pvetools proxmox ve tools script(debian9 can use it).Including email, samba, NFS set zfs max ram, nested virtualization ,docker , pci passthrough etc. for english user,pl…

2026/6/25 19:56:09阅读更多 →
问卷考试系统测试文档

问卷考试系统测试文档

一、测试概述1.1 编写目的本测试报告旨在对“问卷考试系统”的核心功能模块进行全面、系统的测试总结。通过本次测试,验证系统各功能模块是否满足需求规格说明书中定义的功能要求,评估系统的质量状况,识别并跟踪软件缺陷,为系统的…

2026/6/25 19:56:09阅读更多 →
想要1件起做小批量加工可能吗?超小批量的可行性

想要1件起做小批量加工可能吗?超小批量的可行性

【本文摘要】"1件也可以做"是很多加工厂的招揽话术,但实际执行起来,单件加工的报价逻辑、工厂接单意愿和质量保障能力,与批量生产截然不同。本文从成本结构、工厂决策逻辑和实际可行性三个层面,分析超小批量加工&#x…

2026/6/25 19:56:09阅读更多 →
明明连接的是Redis的DB0,为什么能查到DB3的数据?

明明连接的是Redis的DB0,为什么能查到DB3的数据?

Redis Single 开发过程中,图简单省事,Redis 一般会采用单机模式部署 Spring Boot 应用连接 Redis 配置很简单 spring:redis:database: 8port: 6379password: ******timeout: 1000host: 10.106.22.184如上配置连接的是 Redis 的 DB8 数据库。有些时候为…

2026/6/25 23:47:13阅读更多 →
Web安全攻防:RCE与文件包含漏洞原理、利用与防御实战

Web安全攻防:RCE与文件包含漏洞原理、利用与防御实战

1. 项目概述:从“黑盒”到“白盒”的必经之路刚入行那会儿,听到“RCE”和“文件包含”这些词,总觉得是高手才能玩转的东西,带着一层神秘面纱。后来自己上手做项目,才发现它们其实是Web安全测试里最基础、也最致命的“敲…

2026/6/25 23:47:13阅读更多 →
(论文速读)PFGM++:释放受物理启发的生成模型的潜力

(论文速读)PFGM++:释放受物理启发的生成模型的潜力

论文题目:PFGM: Unlocking the Potential of Physics-Inspired Generative Models(PFGM:释放受物理启发的生成模型的潜力) 会议:ICML2023 摘要:我们介绍了一类新的受物理启发的生成模型,称为PF…

2026/6/25 23:47:13阅读更多 →
3步解锁Roblox帧率限制:完整教程与优化指南

3步解锁Roblox帧率限制:完整教程与优化指南

3步解锁Roblox帧率限制:完整教程与优化指南 【免费下载链接】rbxfpsunlocker FPS Unlocker for Roblox 项目地址: https://gitcode.com/gh_mirrors/rb/rbxfpsunlocker 还在为Roblox游戏的60帧限制而烦恼吗?想要在高性能显示器上享受更流畅的游戏体…

2026/6/25 23:47:13阅读更多 →
新能源工程师培训哪家好?电工转行光伏储能实操避坑

新能源工程师培训哪家好?电工转行光伏储能实操避坑

双碳风口下光伏、户用储能、工商业储能项目遍地开花,市场急需持证新能源工程师,论坛不少水电工、装修师傅、机房运维发帖询问新能源工程师培训哪家好,市面上低价线上速成课层出不穷,踩坑之后既浪费金钱又耽误转行节奏。市面上大部…

2026/6/25 23:47:13阅读更多 →
Azure ML数据与模型漂移检测实战:从告警到闭环治理

Azure ML数据与模型漂移检测实战:从告警到闭环治理

1. 项目概述:为什么“抓牢”数据与模型漂移是生产环境里最硬的生存技能在 Azure Machine Learning 平台上部署一个准确率 92% 的故障预测模型,和让这个模型在产线连续稳定运行 18 个月、持续支撑设备停机决策——这是两件完全不同的事。前者是数据科学实…

2026/6/25 23:42:13阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/25 9:39:54阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/25 2:52:24阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/25 9:01:34阅读更多 →
面试辅助工具横评:我试了5款AI面试工具,最后留下了OfferGo

面试辅助工具横评:我试了5款AI面试工具,最后留下了OfferGo

上半年跳槽,面了十几家公司。说句实话,不是能力不行,是面试现场太容易崩了。 明明准备了一周,面试官换个问法脑子就一片白。面完之后那个懊悔——其实我会的。 后来开始试市面上的AI面试辅助工具。前前后后装了5款,踩…

2026/6/25 11:52:11阅读更多 →
Claude Code 提示词设计:从塑造“人格”到建立“状态机”

Claude Code 提示词设计:从塑造“人格”到建立“状态机”

当前 AI Agent 设计的核心痛点在于:大模型不缺写代码的能力,缺的是克制力、边界感和验证逻辑。Prompt 不再是用来塑造“人格”的,而是用来建立“状态机(State Machine)”和“行为门禁(Guardrails&#xff0…

2026/6/25 11:52:11阅读更多 →
MC-037 | 自定义 Skill 开发:创建你的AI能力模块

MC-037 | 自定义 Skill 开发:创建你的AI能力模块

MONKEYCODE 教程系列 MonkeyCode教程及推广系列 MC-037 自定义 Skill 开发:创建你的AI能力模块 >官网链接注册更放心哦https://monkeycode-ai.com/?ic019e0aed-c823-783c-b08a-4f030f891e4e 系列: 不爱土豆唯爱马铃薯 MonkeyCode 教程系列 字数: 约 1400 字…

2026/6/25 11:52:11阅读更多 →