自定义agent-langGraphy编排
自定义Agent原理、LangGraph状态编排核心、多Agent协作架构、完整工业级实战代码、生产级调优逐层深入写成一篇逻辑闭环、细节拉满、可直接落地的高级技术博客和上一篇中级RAG文章形成完整进阶体系。高级AI Agent实战自定义Agent、LangGraph状态编排、多Agent协作工业级落地全解前言当你掌握 RAG调优、LCEL链路编排 后你会发现传统Chain与基础Agent存在不可逾越的天花板。传统开发的三大瓶颈普通Chain流程固化固定线性执行无法根据中间结果动态决策分支、循环重试、终止任务。内置AgentOpenAI Tools Agent黑盒不可控无法自定义思考逻辑、无法干预执行步骤、异常无法捕获、无法做复杂任务拆解。单Agent能力混沌一个Agent既要检索、又要计算、又要写作、又要审核职责混乱、幻觉严重、任务超长易崩溃。LangGraph 就是为解决以上问题而生的高级编排框架它把AI应用从「函数调用」升级为 有状态、可循环、可分支、可自愈、可多角色协作 的智能体系统。本文定位 LangChain 高级进阶覆盖企业生产最核心三大能力从零手写自定义Agent脱离框架黑盒完全可控思考工具流程LangGraph 状态机编排核心原理状态、节点、边、条件分支、循环多Agent协作架构角色拆分、任务分发、互相校验、最终收敛输出读完本文你可以独立开发智能数据分析机器人、自动编程Agent、自主调研Agent、审核校对Agent、复杂业务自动化流程。一、为什么必须学 LangGraph高级与中级分水岭1.1 普通LCEL Chain的本质prompt | llm | parser• 无状态每一次调用独立不保存中间数据• 无分支只能从头到尾线性跑完• 无循环失败不能重试、缺数据不能自我补全• 无决策模型不能决定下一步该做什么1.2 LangGraph 的本质大模型 状态机LangGraph 不是替代 LCEL而是 LCEL的超集升级。核心能力让AI拥有记忆、拥有流程、拥有自主决策能力。LangGraph 四大核心基石State 状态全局容器存储对话、中间结果、任务进度、异常信息Node 节点每一个独立执行单元LLM思考、工具调用、校验、写入文件Edge 边节点流转关系顺序执行 / 条件分支 / 循环跳转Router 路由LLM根据状态自主判断下一步执行哪个节点一句话总结LCEL 是「固定流水线」LangGraph 是「可自主决策的智能工作流」。二、基础铺垫LangGraph 核心概念深度拆解2.1 状态 State最核心传统应用只有「输入输出」LangGraph 全程携带全局状态。状态可以自定义字段常见• messages对话历史• query用户原始问题• context检索上下文• result最终结果• error错误日志• step当前执行步骤状态全局共享、节点读写、持久化保存是实现循环、重试、多步骤任务的根本。2.2 节点 Node节点就是一个 Python 函数输入 State返回更新后的 State。所有业务逻辑全部拆解成节点• 思考节点LLM决策• 工具节点检索、计算、爬虫• 校验节点结果合规性检查• 汇总节点整合输出2.3 边 Edge两种流转方式普通边A → B固定顺序执行条件边A → 根据返回结果动态跳转到 B/C/DAI自主路由2.4 循环能力Agent智能的关键LangGraph 原生支持 While循环式工作流思考 → 工具执行 → 校验结果 → 不满足再次思考 → 直至达标这就是「自我修正、自我迭代、自主完成复杂任务」的底层原理。三、高级能力一从零手写【自定义Agent】脱离黑盒市面上所有教程都在用 create_react_agent 快速创建Agent但这是封装好的黑盒。高级开发者必须 手写完整Agent流程完全掌控思考、工具选择、参数解析、执行、结果汇总、重试逻辑。3.1 自定义Agent完整架构自主执行闭环获取当前全局状态LLM思考是否需要调用工具调用哪个工具参数是什么解析模型输出校验参数合法性执行对应工具更新状态判断是否需要继续迭代 / 直接输出答案3.2 可直接上线手写极简自定义 Agent依赖安装pip install langgraph langchain langchain-openai python-dotenv完整代码无任何黑盒封装from dotenv import load_dotenvfrom typing import TypedDict, Annotated, Sequenceimport operatorfrom langchain_core.messages import BaseMessage, HumanMessage, AIMessage, ToolMessagefrom langchain_openai import ChatOpenAIfrom langchain_core.tools import toolfrom langgraph.graph import StateGraph, START, ENDload_dotenv()1. 自定义全局状态class AgentState(TypedDict):messages: Annotated[Sequence[BaseMessage], operator.add]need_tool: bool2. 自定义工具tooldef calculator(expression: str) - str:“”“数学计算工具用于计算复杂公式Args:expression: 数学表达式字符串“””return str(eval(expression))tools [calculator]tool_map {t.name: t for t in tools}3. 初始化模型llm ChatOpenAI(model“gpt-3.5-turbo”, temperature0)llm_with_tool llm.bind_tools(tools)---------------------- 自定义节点 ----------------------思考节点模型判断是否调用工具def think_node(state: AgentState):res llm_with_tool.invoke(state[“messages”])need_tool len(res.tool_calls) 0return {“messages”: [res], “need_tool”: need_tool}工具执行节点def tool_node(state: AgentState):tool_calls state[“messages”][-1].tool_callstool_msgs []for call in tool_calls:tool tool_map[call[“name”]]result tool.invoke(call[“args”])tool_msgs.append(ToolMessage(contentresult, tool_call_idcall[“id”]))return {“messages”: tool_msgs}---------------------- 自定义路由核心 ----------------------def route_node(state: AgentState):if state[“need_tool”]:return “tool”return END---------------------- 构建状态流 ----------------------workflow StateGraph(AgentState)workflow.add_node(“think”, think_node)workflow.add_node(“tool”, tool_node)workflow.add_edge(START, “think”)workflow.add_conditional_edges(“think”, route_node, {“tool”:“tool”, END:END})workflow.add_edge(“tool”, “think”) # 工具执行完再次思考形成循环agent workflow.compile()测试ifname “main”:res agent.invoke({“messages”: [HumanMessage(“3的5次方加上120除以5等于多少”)]})print(res[“messages”][-1].content)3.3 自定义Agent优势生产级价值完全透明每一步思考、调用、结果均可日志记录可控可干预可拦截工具参数、校验输入、过滤危险操作可自定义重试工具失败自动重试、参数错误自动修正可植入业务逻辑可在任意节点加权限校验、数据清洗、格式转换中级开发者会用现成Agent高级开发者会手写、会改造、会掌控Agent全流程四、高级能力二LangGraph 状态编排深度原理4.1 状态叠加机制 operator.addmessages: Annotated[Sequence[BaseMessage], operator.add]这是 LangGraph 最关键的设计• 不是覆盖状态而是 增量追加状态• 每一轮思考、工具结果都会保存历史• 天然支持多轮迭代、上下文永久延续4.2 分支与循环精髓普通代码的循环是代码写死的LangGraph的循环是 AI自主决策的• 模型认为信息不足 → 继续调用工具• 模型认为信息足够 → 直接结束输出4.3 工业级常用编排模式思考-工具-思考 循环模式通用智能Agent串行多节点流水线分步任务拆解→执行→校验→汇总并行多节点同时调用多个工具、并行检索条件分支路由不同问题走不同业务链路五、高级能力三多Agent协作系统企业最高级应用5.1 为什么需要多Agent单Agent弊端• 角色混杂、人格不稳定• 长任务容易遗忘前置步骤• 无法自我审查、容易幻觉• 复杂任务拆解能力弱多Agent核心思想分而治之把一个复杂大任务拆分为 多个专职专业Agent各司其职、互相协作、互相校验。5.2 工业级标准多Agent角色架构最通用、落地最多的「团队协作架构」调度AgentLeader任务拆解、流程控制、分发任务、汇总结果执行AgentWorker检索、计算、调研、数据获取审核AgentReviewer校验结果真实性、完整性、逻辑性、纠错总结AgentSummary整合多份结果输出最终规范答案5.3 多Agent流转逻辑用户需求→ Leader拆解任务→ Worker执行获取信息→ Reviewer校验纠错→ 不达标返回重执行 / 达标进入总结→ Summary输出最终结果闭环迭代、自带审核、自带纠错准确率远超单Agent。六、工业级实战完整可运行「多Agent协作系统」场景智能自动调研问答系统• Leader任务拆解规划• Researcher联网/知识库调研取证• Reviewer内容审核纠错• Summary整合输出报告完整可直接运行代码from dotenv import load_dotenvfrom typing import TypedDict, Sequence, Annotatedimport operatorfrom langchain_core.messages import BaseMessage, HumanMessage, SystemMessagefrom langchain_openai import ChatOpenAIfrom langgraph.graph import StateGraph, START, ENDload_dotenv()llm ChatOpenAI(model“gpt-3.5-turbo”, temperature0.2)全局状态class MultiAgentState(TypedDict):messages: Annotated[Sequence[BaseMessage], operator.add]task_plan: strresearch_content: strreview_result: stris_ok: bool---------------------- 1. Leader调度Agent任务拆解 ----------------------def leader_agent(state: MultiAgentState):prompt “”你是任务规划专家请对用户问题拆解成清晰的调研执行步骤。只输出任务计划不要回答问题本身。“”plan llm.invoke([SystemMessage(contentprompt),HumanMessage(contentstate[“messages”][-1].content)])return {“task_plan”: plan.content}---------------------- 2. Research调研Agent执行任务 ----------------------def research_agent(state: MultiAgentState):prompt f“”你是信息调研专家根据以下任务计划完成信息搜集与作答【任务计划】{state[‘task_plan’]}请给出详细、完整、有理有据的调研内容。“”res llm.invoke(prompt)return {“research_content”: res.content}---------------------- 3. Review审核Agent纠错校验 ----------------------def review_agent(state: MultiAgentState):prompt f“”你是严格的审核专家检查调研内容是否贴合用户问题 2. 信息完整 3. 逻辑通顺 4. 无幻觉编造用户问题{state[‘messages’][-1].content}调研内容{state[‘research_content’]}如果合格输出OK。如果不合格指出问题并给出修改建议。“”res llm.invoke(prompt)is_ok res.content.strip() “OK”return {“review_result”: res.content, “is_ok”: is_ok}---------------------- 4. Summary总结Agent最终输出 ----------------------def summary_agent(state: MultiAgentState):prompt f“”根据合格的调研内容整理成通顺、完整、正式的最终答案{state[‘research_content’]}“”res llm.invoke(prompt)return {“messages”: [res]}---------------------- 条件路由审核不通过则重调研 ----------------------def review_route(state: MultiAgentState):if state[“is_ok”]:return “summary”return “research”---------------------- 构建多Agent流程图 ----------------------workflow StateGraph(MultiAgentState)注册所有角色节点workflow.add_node(“leader”, leader_agent)workflow.add_node(“research”, research_agent)workflow.add_node(“review”, review_agent)workflow.add_node(“summary”, summary_agent)固定流程workflow.add_edge(START, “leader”)workflow.add_edge(“leader”, “research”)workflow.add_edge(“research”, “review”)条件分支审核通过汇总不通过重跑调研workflow.add_conditional_edges(“review”, review_route, {“research”:“research”, “summary”:“summary”})workflow.add_edge(“summary”, END)multi_agent_graph workflow.compile()运行测试ifname “main”:result multi_agent_graph.invoke({“messages”: [HumanMessage(“详细分析LangGraph多Agent的企业落地价值”)]})print(“最终输出\n”, result[“messages”][-1].content)这套架构的工业级价值天然防幻觉专人审核、有错重改超长任务稳定分工明确不会混乱可无限迭代优化可新增Agent角色翻译、格式化、检索、代码执行可团队扩展从4个Agent扩展为数十个Agent的智能团队七、生产级高级调优与避坑指南7.1 状态设计原则状态字段单一职责不要大杂烩字段增量存储所有消息使用 operator.add及时清理冗余超长流程可阶段性压缩历史消息7.2 循环陷阱规避必须设置终止条件防止死循环最大迭代次数限制避免计费爆炸工具异常捕获兜底7.3 多Agent协作最佳实践角色绝对解耦每个Agent只做自己职责内的事统一输出规范每个Agent输出格式标准化单向数据流Leader驱动避免互相抢占7.4 企业真实落地场景• 自动需求分析代码生成代码审核• 知识库深度问答调研→检索→对比→审核→总结• 智能客服工单自动处理• 论文/报告自动撰写、校对、润色• 数据分析、图表生成、结论输出自动化八、进阶学习路线从高级到专家当前阶段自定义Agent 基础多Agent协作专家阶段1子图嵌套SubGraph、复杂流程复用专家阶段2Agent通信协议、主动交接、任务委派专家阶段3记忆分层短时长期向量记忆专家阶段4Agent评估体系、自动迭代优化九、全文总结中级RAG → 高级Agent 能力跃迁中级能力解决「知识问答精准度」问题RAG调优高级能力解决「自主思考、自主执行、复杂任务自动化」问题LangGraph多AgentRAG 让AI会读书Agent 让AI会干活。真正能落地商业化、替代人工的AI应用全部基于 LangGraph 多Agent架构。从固定链路 → 状态流转 → 自主决策 → 多角色团队协作这就是大模型工程化的最高进阶路径。

相关新闻

【JAVA课程设计/毕业设计】基于 SpringBoot+Vue 的家居智能化运维与设备台账管理系统 物联网架构下智能家居综合管理系统【附源码、数据库、万字文档】

【JAVA课程设计/毕业设计】基于 SpringBoot+Vue 的家居智能化运维与设备台账管理系统 物联网架构下智能家居综合管理系统【附源码、数据库、万字文档】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/10/11 11:20:45 阅读更多 →
如何在5分钟内掌握Avidemux2:免费开源视频编辑器的终极入门指南

如何在5分钟内掌握Avidemux2:免费开源视频编辑器的终极入门指南

如何在5分钟内掌握Avidemux2:免费开源视频编辑器的终极入门指南 【免费下载链接】avidemux2 Avidemux2, simple video editor 项目地址: https://gitcode.com/gh_mirrors/avi/avidemux2 Avidemux2是一款功能强大且完全免费的开源视频编辑器,支持W…

2026/10/8 0:57:06 阅读更多 →
如何用ServerPackCreator实现Minecraft服务器包自动化生成?

如何用ServerPackCreator实现Minecraft服务器包自动化生成?

如何用ServerPackCreator实现Minecraft服务器包自动化生成? 【免费下载链接】ServerPackCreator Create a server pack from a Minecraft Forge, NeoForge, Fabric, LegacyFabric or Quilt modpack! 项目地址: https://gitcode.com/gh_mirrors/se/ServerPackCreat…

2026/10/9 10:45:56 阅读更多 →

最新新闻

代码随想录67天刷题总结:算法模板、避坑与面试转化

代码随想录67天刷题总结:算法模板、避坑与面试转化

代码随想录刷到第67天,说实话,这一天比我想象中来得平静。没有“终于结束了”的解脱感,也没有“我全都学会了”的兴奋,更多的是一种踏实的收束感。从第一天的数组二分查找开始,到后来二叉树、回溯、动规、单调栈&#…

2026/10/11 13:10:49 阅读更多 →
探索地块建立全解析:Java+JS+Python三端协作实战

探索地块建立全解析:Java+JS+Python三端协作实战

从赛题公布到最终提交,我前后花了将近两周时间。“新卷200分”里的这道“探索地块建立”,要求用三种语言各完成一轮闭环,确实不是单纯考某个语法点能应付过去的。很多朋友一看到“探索地块建立(Java & JS & Python&#x…

2026/10/11 13:10:49 阅读更多 →
Cursor 智能提交实战:用 AI 生成规范 Git Commit Message 的完整工作流

Cursor 智能提交实战:用 AI 生成规范 Git Commit Message 的完整工作流

最近我的 git 提交流程发生了不小的变化。以前写完代码顺手敲一句“fix bug”“update code”“改了一堆东西”就推了,等过了两周回来看历史记录,完全想不起来当时改了啥。后来我开始试着让 Cursor 的 AI 帮我生成 commit message,再进一步让…

2026/10/11 13:10:49 阅读更多 →
微信小程序实时语音识别接入指南:从鉴权到帧流处理

微信小程序实时语音识别接入指南:从鉴权到帧流处理

简介:微信小程序语音识别项目是一套面向微信小程序开发者的完整工程示例,围绕科大讯飞语音识别接口展示语音转文字、实时语音输入与智能语音交互的实现思路,适合具备一定JavaScript基础、希望在小程序中快速接入AI语音能力的开发者学习。压缩…

2026/10/11 13:10:49 阅读更多 →
基于SSM的软件缺陷管理系统:从选题到答辩全流程详解

基于SSM的软件缺陷管理系统:从选题到答辩全流程详解

每到毕业季,群里最热闹的问题永远是“毕设做什么题目好”。作为一个经常带学生做项目的过来人,我的回答一般都很直接:软件缺陷管理系统,这个题目别嫌弃它老,放到2026年依然是性价比极高的选择。只要有SSM框架和Java基础…

2026/10/11 13:10:49 阅读更多 →
如何看懂 Portabase 安全机制:AES-256-GCM凭据加密、RBAC与Passkey登录完整指南

如何看懂 Portabase 安全机制:AES-256-GCM凭据加密、RBAC与Passkey登录完整指南

【免费下载链接】portabase Portabase - Database backup & restore tool for PostgreSQL, MySQL, MsSQL, MariaDB, Firebird SQL, SQLite, MongoDB, Redis and Docker Volume 项目地址: https://gitcode.com/gh_mirrors/por/portabase 点击查看 免费下载 Por…

2026/10/11 13:09:49 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →