LangGraph 工作流:用一次交付过程做复盘
这篇不先堆名词。我们把《一个LangGraph项目上线后最先暴露的并不是代码问题》拆成几级台阶看完至少知道下一步该学什么、该练什么。摘要先把这篇文章的目标说清楚看完之后你应该能判断这件事值不值得做以及从哪里动手。上周把那个基于 LangGraph 构建的企业内部知识问答 Agent 正式推上了生产环境。按照常规思维这时候我该庆祝 Demo 到 Production 的跨越或者写篇“保姆级教程”教大家怎么装依赖、配 API Key。但现实给了我一记响亮的耳光。上线第一天监控报警没响因为模型没挂业务方投诉没来因为接口通了。直到第三天客服主管拿着日志截图找我问“为什么这个 Agent 帮用户查了三次密码重置第四次却直接报错说‘权限不足’而且没有记录这次失败的尝试”那一刻我才意识到我们在写代码时满脑子都是State怎么流转、Node 怎么执行、Prompt 怎么写得更聪明。我们忽略了 Agent 作为一个“系统”最本质的属性它不是一个黑盒函数而是一个有状态、有分支、甚至有人介入的工作流。如果你也正准备把 Agent 从 Jupyter Notebook 搬进 Kubernetes请先停下手中的 Prompt 优化看看这篇关于“可控性”的复盘。目录为什么脚本式 Agent 无法支撑生产环境State 与 Node给 Agent 建立“记忆中枢”Edge 与条件分支让流程“听话”人工审批节点生产环境的“刹车片”工程化落地日志、监控与回滚总结为什么脚本式 Agent 无法支撑生产环境很多开发者刚接触 LLM 应用时喜欢写这种“脚本式”代码def run_agent(user_input): # 1. 调模型 response llm.invoke(user_input) # 2. 调工具 result tool.execute(response.content) # 3. 返回 return result这种写法在本地测试时丝般顺滑。但在生产环境中它有三大致命缺陷1. 不可回溯一旦中间步骤出错你无法知道是哪一环的问题。是 Prompt 理解错了还是工具调用超时还是数据库连接断了2. 状态丢失LLM 本身是无状态的。如果需要多轮对话中的上下文记忆你需要自己维护一个列表。一旦列表过长Token 费用飙升且上下文窗口溢出整个逻辑就会崩溃。3. 缺乏确定性分支简单的if-else很难处理复杂的业务逻辑。比如“如果用户问价格走 A 流程如果问技术细节走 B 流程如果涉及敏感操作插入人工审核”。LangGraph 的出现本质上是为了解决这个问题把 Agent 的控制权从“概率性的模型输出”收回到“确定性的图结构”中。State 与 Node给 Agent 建立“记忆中枢”在 LangGraph 中State不仅仅是变量它是整个工作流的单一事实来源Single Source of Truth。我之前的一个踩坑经历是试图在每个 Node 里通过全局变量传递数据。结果在多并发下状态完全混乱A 用户的查询结果混进了 B 用户的响应里。正确的做法是定义一个 TypedDict 作为 State 基类明确每个节点读写的数据字段。from typing import TypedDict, Annotated, List import operator from langgraph.graph.message import add_messages class AgentState(TypedDict): # messages: 显式的消息历史支持追加操作 messages: Annotated[List, add_messages] # tools_used: 记录已使用的工具用于防重复调用或审计 tools_used: List[str] # is_escalated: 是否触发人工升级 is_escalated: bool这里的add_messages是一个关键技巧。它保证了无论哪个 Node 往messages里塞了什么系统都能自动合并历史消息而不是简单覆盖。这就是“记忆”的工程化实现。Node 则是纯函数。输入 State输出 State 的部分更新。切记Node 不要有副作用如直接打印日志、修改外部 DB副作用应该放在 Edge 或 Graph 编译后的 Hook 中处理。 这样做的目的是保证 Node 的可测试性和可替换性——你可以随时把“调用 GPT-4”换成“调用本地 Llama3”而不需要重写业务流程。Edge 与条件分支让流程“听话”如果说 Node 是原子操作那 Edge 就是交通规则。LangGraph 提供了两种边1. 普通边Normal Edges固定顺序A - B - C。适用于线性流程。2. 条件边Conditional Edges根据当前 State 决定下一步去哪个 Node。这是 Agent 具备“思考”能力的关键。以刚才提到的“权限升级”为例我们可以定义一个路由函数def route_after_check(state: AgentState): last_message state[messages][-1] # 假设大模型在最后一步输出了结构化 JSON包含 needs_human 字段 try: decision json.loads(last_message.content) if decision.get(needs_human): return human_approval_node else: return finalize_response_node except: return error_handler_node workflow.add_conditional_edges( tool_execution_node, route_after_check, { human_approval_node: human_approval_node, finalize_response_node: END, error_handler_node: error_handler_node } )这里有一个容易被忽视的细节循环Loops。如果你的业务逻辑需要“模型生成草稿 - 检查员修改 - 模型再次润色”你可以创建一个自环。LangGraph 天然支持max_iterations设置防止模型陷入无限循环。在生产环境中永远不要信任模型的自我纠错能力无限次成功设置上限是最低成本的兜底策略。人工审批节点生产环境的“刹车片”这是本期文章最想强调的差异化点。在 Demo 阶段我们追求的是“全自动”。但在生产环境尤其是涉及资金、隐私、敏感内容时“人”是最高级的容错机制。LangGraph 支持interrupt_before和interrupt_after。这意味着你可以在某个 Node 执行前后暂停工作流等待人类介入。# 在编译时配置中断点 app workflow.compile(interrupt_before[sensitive_action_node]) # 运行时 state app.invoke({messages: [{role: user, content: 帮我删除所有用户数据}]}) # 此时程序会暂停等待外部回调恢复 # state app.update_state(state.graph_id, {approved: True}, as_nodehuman_approval)这种做法的价值在于1. 审计合规谁批准了这次敏感操作时间戳是多少这些都在 State 里留痕。2. 容灾当模型出现幻觉输出了危险的指令时人工节点可以拦截它而不是让它执行下去。3. 灵活性你可以动态调整哪些节点需要人工审核无需修改代码只需配置图结构。很多团队上线崩盘不是因为模型笨而是因为没有给模型装上刹车。工程化落地日志、监控与回滚回到开篇那个“权限不足”的 Bug。问题出在哪里出在tools_used状态没有被正确持久化到日志系统中。当我们使用 LangGraph 时State 的变化是内部的。为了让监控生效我们需要结合 OpenTelemetry 或自定义 Callbacks。一个简单的实践建议在每个 Node 执行前后记录 State 的快照。import time def logging_decorator(node_func): def wrapper(state): start_time time.time() result node_func(state) duration time.time() - start_time # 这里将 state 和 duration 发送到你的日志服务 (ELK/Splunk) log_to_monitoring(node_namenode_func.__name__, state_snapshotresult, cost_msduration * 1000) return result return wrapper此外版本控制至关重要。LangGraph 的图结构是可以序列化的。建议将图的定义存储在 Git 中每次发布带上一个版本号。一旦线上出现严重逻辑错误可以通过回滚图结构版本快速恢复而不是去改代码重新部署。这比传统的“热修复”要安全得多。总结LangGraph 不仅仅是一个库它是一种工程化思维的转变。从脚本式调用到图工作流我们获得的不是更聪明的 AI而是更可控的系统。State 提供了可追溯的记忆。Nodes 提供了模块化能力。Edges 提供了确定的逻辑分支。Interrupts 提供了人机协同的安全阀。当你在下一个项目中考虑“要不要用 Agent”时先问自己三个问题1. 这个流程是否有多步决策2. 是否需要保存中间状态以便调试3. 最关键的操作是否有“后悔药”如人工审核如果答案是肯定的那么 LangGraph 就是你的首选。否则一个简单的 Chain 或 Script 可能更轻量、更高效。记住在 AI 应用工程中确定性比智能更珍贵。资料展示下面是我整理的AI大模型学习资料和工具包预览适合收藏后按主题逐步学习。如果你想看完整资料目录可以在评论区留言「资料」也欢迎告诉我你更关注AI大模型里的哪类内容。

相关新闻

LangGraph新手入门:打造你的第一个AI Agent,收藏这份超实用教程!

LangGraph新手入门:打造你的第一个AI Agent,收藏这份超实用教程!

本文介绍了LangGraph框架在构建AI Agent系统中的应用,特别是ReAct Agent的原理和实现。LangGraph支持复杂流程、状态管理和持久化等功能,但学习曲线较陡峭。文章推荐使用langgraph-up-react模板,该模板集成了国内主流模型和工具,简…

2026/7/22 4:15:01阅读更多 →
S2B2C供应链商城网站建设:架构、模块、技术与全流程落地

S2B2C供应链商城网站建设:架构、模块、技术与全流程落地

在产业数字化加速推进的当下,S2B2C供应链商城成为打通上游供应商、中游渠道商、下游终端用户的核心载体。它依托数字化能力缩短供应链链路、降低流通成本、实现多方协同共赢。 本文全面讲解S2B2C供应链商城的架构设计、上下游功能模块、技术选型以及落地部署全流程&…

2026/7/22 6:39:31阅读更多 →
从Prompt到RAG:LLM工程实战全链路解析

从Prompt到RAG:LLM工程实战全链路解析

# 从Prompt到RAG:LLM工程实战全链路解析## 背景与挑战2024年,LLM应用开发已从“调用API写个Demo”走向工程化阶段。开发者面临的核心痛点不再是“模型能不能生成合理回复”,而是:**如何通过系统化的Prompt Engineering提升输出质量…

2026/7/22 6:28:30阅读更多 →
AndroidNavigation性能调优:避免常见陷阱的7个关键点

AndroidNavigation性能调优:避免常见陷阱的7个关键点

AndroidNavigation性能调优:避免常见陷阱的7个关键点 【免费下载链接】AndroidNavigation A library managing navigation, nested Fragment, StatusBar, Toolbar for Android 项目地址: https://gitcode.com/gh_mirrors/an/AndroidNavigation AndroidNaviga…

2026/7/22 23:28:24阅读更多 →
AndroidNavigation在大型项目中的应用:架构设计与模块化实践

AndroidNavigation在大型项目中的应用:架构设计与模块化实践

AndroidNavigation在大型项目中的应用:架构设计与模块化实践 【免费下载链接】AndroidNavigation A library managing navigation, nested Fragment, StatusBar, Toolbar for Android 项目地址: https://gitcode.com/gh_mirrors/an/AndroidNavigation Androi…

2026/7/22 23:28:24阅读更多 →
树莓派部署BirdNET-Go常见问题解答:从硬件要求到性能优化

树莓派部署BirdNET-Go常见问题解答:从硬件要求到性能优化

树莓派部署BirdNET-Go常见问题解答:从硬件要求到性能优化 【免费下载链接】birdnet-go Self-hosted realtime soundscape analyser for birds, bats and other wildlife. Multi-model local AI inference, runs 24/7 on a Raspberry Pi. 项目地址: https://gitcod…

2026/7/22 23:28:24阅读更多 →
gh_mirrors/log/logback授权控制详解:基于角色与权限的访问管理

gh_mirrors/log/logback授权控制详解:基于角色与权限的访问管理

gh_mirrors/log/logback授权控制详解:基于角色与权限的访问管理 【免费下载链接】logback 💡 SpringBootSpring Security基本配置 项目地址: https://gitcode.com/gh_mirrors/log/logback gh_mirrors/log/logback是一个基于SpringBootSpring Secu…

2026/7/22 23:28:24阅读更多 →
终极指南:OpenSpeedy如何通过Ring3 Hook技术实现游戏时间函数拦截与帧率控制优化

终极指南:OpenSpeedy如何通过Ring3 Hook技术实现游戏时间函数拦截与帧率控制优化

终极指南:OpenSpeedy如何通过Ring3 Hook技术实现游戏时间函数拦截与帧率控制优化 【免费下载链接】OpenSpeedy 🎮 An open-source game speed modifier. 项目地址: https://gitcode.com/gh_mirrors/op/OpenSpeedy OpenSpeedy是一款基于Ring3级别H…

2026/7/22 23:28:24阅读更多 →
做公司PPT最烦的不是写内容,是套模板

做公司PPT最烦的不是写内容,是套模板

近两年来,利用AI生成PPT这样的事情普及开来的速度还是比较快的。输入那么一小段需求,几十秒钟就能够弄出那么一份结构比较完整的PPT,内容方面的逻辑还算可以,排版也勉强说得过去 。 但问题出在拿到之后,许多公司皆拥有…

2026/7/22 23:26:24阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 0:53:59阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 0:53:59阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 0:53:59阅读更多 →
中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业做小程序,最常见的矛盾是预算有限,但又不希望功能太单薄;没有技术团队,但又希望后续能自己运营;想快速上线,又担心隐性收费和售后失联。选型时如果只看“低价套餐”或“案例数量”,很容…

2026/7/22 0:01:17阅读更多 →
GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

企业做营销,最怕钱花完了,资产没有留下。 效果广告能带来一段时间的曝光,但预算停止后,流量往往也随之停止。短视频内容可能在几天内冲高,也可能很快沉下去。AI搜索时代,企业需要重新思考一个问题&#xff…

2026/7/22 0:01:17阅读更多 →
Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复 一、你的 Agent 在"再想想"的循环里绕了 12 轮,用户已经关窗口了 Agent 与人最大的区别是:人知道什么时候该停下来给答案,Agent 会一直"想"下去。你给 Agent 接…

2026/7/22 0:01:17阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/22 22:56:18阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/22 18:55:50阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/22 18:55:50阅读更多 →