江西南昌网站定制,迁西个人网页设计制作软件,微信第三方网站怎么做,先做网站再付款 怎么回答越来越多的人开始使用LangGraph搭建可控、可观测、可插拔的AI工作流。无论是智能客服、多步骤智能体#xff0c;还是自动化运维机器人、AI建站系统#xff0c;它都能游刃有余地实现。
然而#xff0c;许多开发者在初次接触LangGraph时#xff0c;往往会感到无从下手#x…越来越多的人开始使用LangGraph搭建可控、可观测、可插拔的AI工作流。无论是智能客服、多步骤智能体还是自动化运维机器人、AI建站系统它都能游刃有余地实现。然而许多开发者在初次接触LangGraph时往往会感到无从下手想快速入门却又缺乏对其整体框架和运行机制的系统性认知。因此本文的目标是用最短的时间帮助大家建立对LangGraph的“整体认知”。全文不绕弯、不堆概念而是通过一个极简但完整的示例直观展示LangGraph中以下六个核心知识点的具体实现State、Node、流程控制、工具调用、State 持久化以及人工干预。通过本文让大家轻松了解掌握Graph是怎么搭建和运作的节点、状态、工具、流程之间是什么关系如何编排顺序、分支、循环、并行业务流本文以一个旅游规划助手为例整体框架如下用户我想去云南旅游5天预算8000流程开始 → 解析意图 → 并行查询 → 汇总结果 → 预算评估↓预算优化循环最多3次←→ 人工干预条件分支↓生成最终行程 → 文件写入 → 结束↓中断恢复支持任意节点可恢复说明解析意图调用大模型解析用户的输入分析想去的地点、天数、预算如果缺少关键信息需要返回让用户补充顺序验证预算、目的、时间、个人信息并行查询查询机票信息查询酒店信息查询景点信息汇总查询汇总打印并行执行返回的内容循环节点预算优化、行程优化调用大模型生成行程表调用工具保存接下来我们逐个拆解这些流程在LangGraph中的具体实现。1、State状态流程的“唯一数据源”State就是整个业务流程的“数据背包”所有Node、工具等都从这里读数据、写结果。class TravelState(TypedDict): 旅游规划状态 messages: Annotated[Sequence[BaseMessage], add_messages] input: Optional[str] # 用户输入查询 travel_info: Optional[Dict[str, Any]] # 旅行基本信息destination, days, budget, travel_date, travelers, requirements query_results: Optional[Dict[str, Any]] # 合并所有查询结果 cost_analysis: Optional[Dict[str, Any]] # 合并成本分析 itinerary: Optional[str] # 生成的行程 status: str # 当前状态 _control: Optional[Dict[str, Any]] # 流程控制字段 # 并行查询结果键 flight_info: Optional[Dict[str, Any]] # 航班查询结果 hotel_info: Optional[Dict[str, Any]] # 酒店查询结果 attractions_info: Optional[Dict[str, Any]] # 景点查询结果无论是查机票、查酒店、查景点、评估预算、生成行程表一切数据都在State中流动。一句话总结State是流程的“唯一上下文”所有节点靠它协作其本质就是一个全局可共享的上下文字典。2、Node节点每一Node都是一个“功能模块”Node是Graph的基本执行单元可以把它理解为“流程步骤函数”。创建旅游规划Graph workflow StateGraph(TravelState) # 添加核心处理节点 workflow.add_node(parse_intent, node_parse_intent) # 解析用户意图提取旅游需求信息 # 顺序执行节点链 - 旅行前置验证流程 workflow.add_node(validate_budget, node_validate_budget) # 1️⃣ 预算验证 workflow.add_node(check_destination, node_check_destination) # 2️⃣ 目的地可行性检查 workflow.add_node(verify_travel_time, node_verify_travel_time) # 3️⃣ 时间可行性检查 workflow.add_node(check_documents, node_check_documents) # 4️⃣ 个人信息验证 # 并行执行节点 workflow.add_node(query_flights, node_query_flights) # 并行查询航班信息 workflow.add_node(query_hotels, node_query_hotels) # 并行查询酒店信息 workflow.add_node(query_attractions, node_query_attractions) # 并行查询景点信息 workflow.add_node(aggregate_results, node_aggregate_parallel_results) # 汇总并行查询结果 # 循环执行节点 - 预算优化循环 workflow.add_node(budget_optimization, node_budget_optimization) # 预算优化处理 workflow.add_node(check_budget_satisfaction, node_check_budget_satisfaction) # 检查预算满意度 # 循环执行节点 - 行程优化循环 workflow.add_node(itinerary_optimization, node_itinerary_optimization) # 行程优化处理 workflow.add_node(check_itinerary_satisfaction, node_check_itinerary_satisfaction) # 检查行程满意度 workflow.add_node(human_intervention, node_human_intervention) # 人工干预处理 workflow.add_node(generate_itinerary, node_generate_itinerary) # 生成最终旅游行程一个Node专注一件事意图解析、预算验证、航班查询、酒店查询、景点查询……模块越拆越细后期编排流程越灵活。一句话总结Node 单功能步骤函数。3、Control Flow流程控制让智能体能决定下一步LangGraph支持多种流程控制方式也就是Node的“组织方式”。①顺序执行A → B → C最常见让 Node A → Node B → Node C 按顺序执行最简单的流水线# 顺序执行链 - 旅行前置验证流程 print( 配置顺序执行链预算验证 → 目的地检查 → 时间验证 → 文件检查) workflow.add_edge(validate_budget, check_destination) # 1️⃣ → 2️⃣ workflow.add_edge(check_destination, verify_travel_time) # 2️⃣ → 3️⃣ workflow.add_edge(verify_travel_time, check_documents) # 3️⃣ → 4️⃣ workflow.add_edge(check_documents, start_parallel) # 4️ → 下一个节点一句话总结顺序流程适用于有明确固定业务流程的业务。②条件分支根据状态决定下一步# 解析意图后的路由 def after_parse_router(state: TravelState) - str: control state.get(_control, {}) status state.get(status, ) print(f 路由检查: status{status}, control{control}) if status collecting_info: return END # 需要用户输入暂停流程 elif status planning and not control.get(validation_completed): return validate_budget # 开始顺序执行的前置验证流程 elif status planning and control.get(validation_completed): print(✅ 验证已完成跳过重复验证) return start_parallel # 直接进入并行查询 elif status processing and not control.get(parsed_attempted): return parse_intent # 首次解析 elif status processing and control.get(user_confirmed): return generate_itinerary # 用户已确认生成行程 elif status continuing: # 人工干预后继续流程 if control.get(human_intervention_completed): print(✅ 人工干预完成继续生成行程) return generate_itinerary else: print(⚠️ 人工干预状态异常) return END else: # 避免无限循环如果状态不明确就结束 print(f⚠️ 未知状态结束流程: status{status}) return END workflow.add_conditional_edges( parse_intent, after_parse_router, { parse_intent: parse_intent, validate_budget: validate_budget, # 开始顺序验证流程 start_parallel: start_parallel, # 跳过验证直接并行查询 generate_itinerary: generate_itinerary, END: END } )一句话总结通过条件分支Graph可以根据运行时状态决定流程的走向。③循环自动反复直到通过# 预算优化循环逻辑 def budget_satisfaction_router(state: TravelState) - str: 预算优化循环的条件路由 - 示例条件分支判断 control state.get(_control, {}) budget_attempts control.get(budget_optimization_attempts, 0) budget_satisfied control.get(budget_satisfied, False) needs_human_intervention control.get(needs_human_intervention, False) cost_analysis state.get(cost_analysis, {}) is_over_budget cost_analysis.get(is_over_budget, False) print(f [条件分支判断] 预算循环路由决策:) print(f 尝试次数: {budget_attempts}/3) print(f ✅ 预算满意: {budget_satisfied}) print(f ⚠️ 超出预算: {is_over_budget}) print(f 需要人工干预: {needs_human_intervention}) # 条件分支的优先级判断 if budget_satisfied: print( ➡️ 路由决策: 预算满意 → 进入行程优化) return itinerary_optimization # 预算满意进入行程优化 elif needs_human_intervention or (budget_attempts 3 and is_over_budget): print( ➡️ 路由决策: 需要人工干预或达到最大尝试次数且仍超预算 → 人工干预) return human_intervention # 需要人工干预 elif budget_attempts 3: print( ➡️ 路由决策: 达到最大尝试次数但预算可接受 → 进入行程优化) return itinerary_optimization # 强制进入下一阶段 else: print( ➡️ 路由决策: 继续预算优化) return budget_optimization # 继续优化 workflow.add_edge(budget_optimization, check_budget_satisfaction) workflow.add_conditional_edges( check_budget_satisfaction, budget_satisfaction_router, { budget_optimization: budget_optimization, # 继续优化 itinerary_optimization: itinerary_optimization, # 进入行程优化 human_intervention: human_intervention # 人工干预 } ) 这就是一个天然的循环不需要while。 一句话总结循环本质是节点再次指向自己或前序节点。④并行同一条输入多路同时计算例如根据用户的意图同时查询机票、酒店、景点# LangGraph原生并行从start_parallel同时启动3个查询节点 workflow.add_edge(start_parallel, query_flights) workflow.add_edge(start_parallel, query_hotels) workflow.add_edge(start_parallel, query_attractions) # 所有并行查询完成后汇总结果 workflow.add_edge(query_flights, aggregate_results) workflow.add_edge(query_hotels, aggregate_results) workflow.add_edge(query_attractions, aggregate_results)一句话总结并行流程允许多个节点基于同一份 State 同时执行并在汇总节点统一合并各自的执行结果。4、工具调用Tool / MCP智能体真正“能做事”将生成的旅游规划内容保存到文件中# 创建统一的工具节点包含所有工具 all_tools [write_itinerary_to_file] tool_node ToolNode(all_tools) # 行程生成后写入文件 workflow.add_edge(generate_itinerary, write_itinerary_file) # 写入文件节点生成工具调用后交给ToolNode执行 workflow.add_edge(write_itinerary_file, tool_node) # ToolNode执行完成后结束 workflow.add_edge(tool_node, END)扩展如果想让LLM自动决定是否调用工具请使用responsellm.invoke( {messages: state[messages]}, tools[write_itinerary_to_file] )注意模型只返回调用的工具名和参数内容实际需要ToolNode执行具体的工具一句话总结工具让AI从“说话”变成真正“执行”。****5、状态持久化流程可暂停、可恢复、可追踪一句配置让Graph变成“有记忆系统”的工作流引擎async with AsyncSqliteSaver.from_conn_string(travel_planning.db) as checkpointer: app workflow.compile(checkpointercheckpointer)一句话总结状态持久化让Graph能够跨执行周期保存状态从而支持暂停、恢复和审计。6、人工干预遇到需要用户确认的信息智能体可以暂停等人工确认def node_human_intervention(state: TravelState) - TravelState: 人工干预节点 - 预算超支时的用户决策点 print(\n *60) print( [条件分支] 人工干预处理) print(*60) messages state.get(messages, []) cost_analysis state.get(cost_analysis, {}) total_cost cost_analysis.get(total_cost, 0) budget cost_analysis.get(budget, 0) control state.get(_control, {}) or {} print(f 当前总费用: {total_cost:,}元) print(f 用户预算: {budget:,}元) print(f 超支金额: {total_cost - budget:,}元) # 检查是否为非交互模式 interactive_mode control.get(interactive_mode, True) if not interactive_mode: print( 非交互模式自动应用优化建议) # 在非交互模式下自动接受优化建议 control[user_confirmed] True control[user_choice] accept # 检查是否已经处理过用户确认 if control.get(user_confirmed): # 用户已确认应用相应方案 user_choice control.get(user_choice, accept) if user_choice accept: # 应用优化建议 overspend total_cost - budget overspend_ratio overspend / budget # 根据超支比例确定优化幅度 if overspend_ratio 0.3: reduction_rate 0.25 # 大幅优化 adjustments [ 调整目的地为性价比更高的城市, 缩短行程天数减少2天, 选择经济型住宿 ] elif overspend_ratio 0.2: reduction_rate 0.20 # 中等优化 adjustments [ 选择经济型酒店节省15%, 调整航班时间非节假日出行, 减少部分自费项目 ] else: reduction_rate 0.15 # 轻度优化 adjustments [ 减少购物预算, 选择部分免费景点, 优化餐饮预算 ] adjusted_total total_cost * (1 - reduction_rate) human_adjustment { suggestions: control.get(suggestions, []), adjusted_total: adjusted_total, reduction_rate: reduction_rate, adjustments: adjustments, advisor_note: f已根据预算优化方案减少{reduction_rate*100:.0f}%费用确保核心体验不受影响 } updated_cost_analysis { **cost_analysis, total_cost: adjusted_total, is_over_budget: adjusted_total budget, human_adjustment: human_adjustment } print(✅ 用户选择接受优化建议) print(f️ 应用优化方案费用从 {total_cost:,}元 降至 {adjusted_total:,}元) return { **state, cost_analysis: updated_cost_analysis, status: planning, _control: {**control, optimization_applied: True, human_intervention_completed: True}, messages: messages [ AIMessage(contentf ✅ 已应用优化方案 ️ 具体调整 {chr(10).join([f• {adj} for adj in adjustments])} 调整后总花费{adjusted_total:,}元 节省金额{total_cost - adjusted_total:,}元 备注{human_adjustment.get(advisor_note, )} ✅ 优化完成继续生成行程表... ) ] } elif user_choice reject: # 用户拒绝优化终止规划 print(❌ 用户选择拒绝继续终止规划) return { **state, status: terminated, _control: {**control, human_intervention_completed: True, planning_terminated: True}, messages: messages [ AIMessage(content ❌ 已终止旅游规划 由于预算限制用户选择不继续当前规划。 建议可以考虑调整预算或旅游需求后重新规划。 感谢使用智能旅游规划系统 ) ] } else: # 用户选择保持原方案继续规划 print( 用户选择保持原方案继续规划) return { **state, status: planning, _control: {**control, optimization_applied: True, human_intervention_completed: True}, messages: messages [ AIMessage(contentf 已保持原方案继续规划 总花费{total_cost:,}元 预算{budget:,}元 ⚠️ 超支{total_cost - budget:,}元 将按原方案继续生成详细行程表... ) ] } # 首次进入生成优化建议并等待用户确认 overspend total_cost - budget overspend_ratio overspend / budget suggestions [f当前超支 {overspend:,}元] # 根据超支比例给出建议 if overspend_ratio 0.3: suggestions.extend([ 建议调整目的地或缩短行程天数, 预计可节省25%费用 ]) elif overspend_ratio 0.2: suggestions.extend([ 建议选择经济型酒店节省约800-1500元, 建议调整航班时间非节假日出行, 预计可节省20%费用 ]) else: suggestions.extend([ 建议减少购物预算或选择部分免费景点, 预计可节省15%费用 ]) print(f 生成优化建议: {suggestions}) print(⏳ 等待用户决策...) # 等待用户确认 return { **state, status: waiting_confirmation, _control: { **control, waiting_confirmation: True, suggestions: suggestions, overspend: overspend, overspend_ratio: overspend_ratio }, messages: messages [ AIMessage(contentf ⚠️ 预算超支提醒 当前情况 • 总花费{total_cost:,}元 • 预算{budget:,}元 • 超支{overspend:,}元 ({overspend_ratio*100:.1f}%) 优化建议 {chr(10).join([f• {s} for s in suggestions])} 请选择您的决策 1. 接受优化建议输入接受或1 2. 保持原方案继续输入保持或2 3. 终止规划输入终止或3 请输入您的选择 ) ] } 一句话总结通过人工干预Graph可以在自动执行过程中 引入用户决策点。总结本文基于LangGraph 1.0构建了一个完整的智能旅游规划系统主要展示了State、Node、流程控制、工具调用、State持久化与人工干预等工作流的具体实现让初学LangGraph的同学能够系统性地了解 LangGraph的核心概念与运行机制理解复杂AI工作流业务是如何被拆解为清晰、可控的图结构流程为自己的AI应用与智能系统设计提供实践参考。最后我在一线科技企业深耕十二载见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事早已在效率与薪资上形成代际优势我意识到有很多经验和知识值得分享给大家也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我整理出这套 AI 大模型突围资料包✅AI大模型学习路线图✅Agent行业报告✅100集大模型视频教程✅大模型书籍PDF✅DeepSeek教程✅AI产品经理入门资料完整的大模型学习和面试资料已经上传带到CSDN的官方了有需要的朋友可以扫描下方二维码免费领取【保证100%免费】为什么说现在普通人就业/升职加薪的首选是AI大模型人工智能技术的爆发式增长正以不可逆转之势重塑就业市场版图。从DeepSeek等国产大模型引发的科技圈热议到全国两会关于AI产业发展的政策聚焦再到招聘会上排起的长队AI的热度已从技术领域渗透到就业市场的每一个角落。智联招聘的最新数据给出了最直观的印证2025年2月AI领域求职人数同比增幅突破200%远超其他行业平均水平整个人工智能行业的求职增速达到33.4%位居各行业榜首其中人工智能工程师岗位的求职热度更是飙升69.6%。AI产业的快速扩张也让人才供需矛盾愈发突出。麦肯锡报告明确预测到2030年中国AI专业人才需求将达600万人人才缺口可能高达400万人这一缺口不仅存在于核心技术领域更蔓延至产业应用的各个环节。资料包有什么①从入门到精通的全套视频教程⑤⑥包含提示词工程、RAG、Agent等技术点② AI大模型学习路线图还有视频解说全过程AI大模型学习路线③学习电子书籍和技术文档市面上的大模型书籍确实太多了这些是我精选出来的④各大厂大模型面试题目详解⑤ 这些资料真的有用吗?这份资料由我和鲁为民博士共同整理鲁为民博士先后获得了北京清华大学学士和美国加州理工学院博士学位在包括IEEE Transactions等学术期刊和诸多国际会议上发表了超过50篇学术论文、取得了多项美国和中国发明专利同时还斩获了吴文俊人工智能科学技术奖。目前我正在和鲁博士共同进行人工智能的研究。所有的视频教程由智泊AI老师录制且资料与智泊AI共享相互补充。这份学习大礼包应该算是现在最全面的大模型学习资料了。资料内容涵盖了从入门到进阶的各类视频教程和实战项目无论你是小白还是有些技术基础的这份资料都绝对能帮助你提升薪资待遇转行大模型岗位。智泊AI始终秉持着“让每个人平等享受到优质教育资源”的育人理念通过动态追踪大模型开发、数据标注伦理等前沿技术趋势构建起前沿课程智能实训精准就业的高效培养体系。课堂上不光教理论还带着学员做了十多个真实项目。学员要亲自上手搞数据清洗、模型调优这些硬核操作把课本知识变成真本事如果说你是以下人群中的其中一类都可以来智泊AI学习人工智能找到高薪工作一次小小的“投资”换来的是终身受益应届毕业生无工作经验但想要系统学习AI大模型技术期待通过实战项目掌握核心技术。零基础转型非技术背景但关注AI应用场景计划通过低代码工具实现“AI行业”跨界。业务赋能 突破瓶颈传统开发者Java/前端等学习Transformer架构与LangChain框架向AI全栈工程师转型。获取方式有需要的小伙伴可以保存图片到wx扫描二v码免费领取【保证100%免费】**