LangGraph实战:小白也能掌握的大模型智能体构建指南(收藏版)

LangGraph实战:小白也能掌握的大模型智能体构建指南(收藏版) 本文介绍了LangGraph库在构建AI智能体中的应用重点讲解了如何将工作流程映射为图结构包含节点、状态和边的概念。通过一个基于Strava的训练智能体实例详细阐述了从分解步骤到设计状态、构建节点及连接它们的完整过程。文章强调LangGraph通过显式控制流使得智能体行为可预测适合构建需要推理、行动和循环的复杂系统为初学者和程序员提供了实用的大模型学习路径。什么是 LangGraphLangGraph 是建立在 LangChain 之上的一个库专注于 LLM 应用程序的显式控制流。LangGraph 不是将应用程序构建为线性流水线而是将其建模为一个图执行可以在其中分支、循环和回溯到之前的步骤。传统的 LangChain 工作流通常是有向无环图DAG它们向前移动并终止。这对于许多用例已经足够但一旦你想要能够迭代、重新评估中间结果或动态决定下一步做什么的系统它就开始变得局限。许多真实的智能体需要循环、重试或根据结果调整行为而不是遵循固定的序列。LangGraph 通过允许图中的循环来解决这个问题。节点可以被重新访问决策可以被重复做出控制流被显式处理而不是嵌入在提示词中。这使得构建能够规划、行动、观察结果并持续运行直到满足停止条件的智能体成为可能。LangGraph节点、状态和边。从概念上讲LangGraph 围绕一小部分核心抽象构建。智能体被定义为一个图其中所有步骤共享和更新一个共同的状态。理解状态、节点和边就足以理解 LangGraph 的工作原理。状态 —— 智能体的记忆状态是流经图的数据结构。每个节点接收当前状态并可以返回对它的更新。你可以把状态想象成智能体的累积上下文消息、决策、工具输出、中间结果以及任何需要在步骤之间持久化的其他信息。因为状态是显式向前携带的每个节点都可以访问迄今为止发生的所有内容而不依赖于隐式的提示历史。节点 —— 专注的行为单元节点是图的可执行单元。每个节点代表一个单一的、定义良好的操作例如• 调用 LLM• 调用工具或 API• 转换或验证数据• 做出路由决策在实践中当节点保持小而专注时LangGraph 效果最好。只做一件事的节点更容易测试、推理和修改随着智能体的演进而独立变化。边 —— 控制流边定义执行如何从一个节点移动到下一个节点。它们编码了智能体的控制流可以是• 顺序的总是移动到下一个节点• 条件性的根据状态选择下一个节点• 循环的返回到前一个节点通过显式定义边LangGraph 使控制流在图本身中可见而不是将其隐藏在提示逻辑中。这使得更容易理解智能体何时循环、何时分叉以及何时终止。有了这些核心概念我们就可以从理论转向具体示例。在下一节中我们将逐步构建一个基于 Strava 的训练智能体使用状态、节点和边来建模一个能够根据实际训练数据自动适应的工作流程。分步指南从你想要自动化的流程开始想象一下你想要构建一个作为你的个人 Strava 驱动训练操作员的 AI 智能体。你有一个明确的目标例如即将到来的比赛一个训练约束例如每周 3 次训练并且你希望你的计划能够根据你实际所做的自动适应。该智能体应该•连接到你的 Strava 账户并读取你最近的活动跑步、越野跑……•理解你的目标比赛距离/日期目标配速/完赛目标海拔剖面•生成简洁的一周计划尊重进展上限和减量训练。•比较计划与完成的工作以发现错过/额外/高强度的训练和过载风险。•调整即将到来的一周当出现风险标志时解释什么发生了变化以及为什么。•通过电子邮件发送计划当 SMTP 设置时或在日志/终端中预览如果未设置。要在 LangGraph 中实现一个智能体你通常会遵循相同的五个步骤。第 1 步将你的工作流程映射为离散步骤我们首先将想要自动化的过程分解为清晰的、离散的步骤。每个步骤成为一个节点一个具有单一、定义良好职责的小函数。一旦确定了这些步骤我们就可以连接它们来描述智能体的整体流程。下图显示了这些节点如何适应 Strava 训练智能体工作流程。第 2 步确定每个步骤需要做什么现在我们有了工作流程让我们确定图中的每个节点负责什么以及它需要什么才能正确完成其工作。对于每个步骤我们将决定• 它是什么类型的操作• 它需要什么上下文静态 vs 动态• 它应该产生什么作为输出因为这个智能体完全自动运行并且只发送每周电子邮件我们不包含任何用户输入或人在回路中的步骤。节点类型LangGraph 教程数据步骤每当我们需要从外部系统检索信息时就会使用数据步骤。同步 Strava 活动让我们从引入原始训练数据开始。•此步骤做什么获取最近约 90 天的 Strava 活动。•它需要的上下文通过访问令牌的 Strava 身份验证以及客户端 ID/密钥。•期望的结果包含我们稍后将使用的指标日期、持续时间、距离、配速、海拔、活动类型的最近活动列表。LLM 步骤当智能体需要分析数据、权衡利弊或生成人类可读的输出时我们会使用 LLM 步骤。总结近期训练接下来让我们将原始活动日志转化为有意义的信号。•此步骤做什么将活动聚合为更高级别的训练指标例如每周训练量、强度训练次数、长时间跑持续时间和一致性。•它需要的上下文来自 Strava 的近期活动基本定义什么算作强度训练、长跑、每周窗口•期望的结果可用于推理和决策的近期训练的结构化摘要。评估进展与目标现在我们评估进展情况。•此步骤做什么将近期训练信号与用户的目标和约束进行比较以确定整体状态。•它需要的上下文训练摘要目标定义比赛日期、距离、海拔、目标努力程度约束例如每周 3 次训练风险启发式负荷峰值、强度累积。•期望的结果关于训练状态步入正轨/落后/过载的结构化评估、置信度分数、风险标志、推荐策略保持、调整、减量。生成下周计划现在我们生成实际计划。•此步骤做什么生成一周的训练安排以公里计尊重训练次数和进展上限基于你的目标和近期训练。•它需要的上下文目标比赛/日期/距离/海拔、每周训练次数以及近期训练摘要训练量、强度信号。•期望的结果即将到来一周的结构化计划包含日期、描述、持续时间、强度的训练以及捕获的原始生成计划用于下游比较/调整。调整计划并添加警告如果检测到风险我们需要清楚地显示它们并相应地调整训练方案。•此步骤做什么必要时修改计划并在检测到过载或不一致时生成简洁的警告或注意事项。•它需要的上下文风险标志、训练计划草稿。•期望的结果最终计划以及用户应该注意的简短警告列表。撰写每周电子邮件最后让我们把一切都变成可读的内容。•此步骤做什么生成清晰的每周电子邮件包括训练计划、简要理由以及任何警告或风险。•它需要的上下文最终训练计划、关键摘要信号、警告如果有•期望的结果准备发送的每周电子邮件主题 正文。操作步骤当智能体需要与外部世界交互时我们会使用操作步骤。发送电子邮件让我们通过交付结果来闭合循环。•此步骤做什么向用户发送每周训练电子邮件。•它需要的上下文收件人电子邮件地址、电子邮件主题和正文•期望的结果电子邮件成功发送并记录在案。现在我们已将步骤分类为LLM、数据和操作步骤我们知道了图中每个节点负责什么工作。下一个问题同样重要这些节点如何共享信息为了回答这个问题我们需要设计智能体的状态——允许每个步骤建立在先前工作基础上的共享内存。第 3 步设计你的状态既然我们知道了每个步骤做什么我们需要决定这些步骤如何共享信息。状态是智能体的共享内存它是节点存储它们检索、计算或决定的内容的地方以便下游步骤可以建立在它之上。在决定什么属于状态时我们遵循两个简单的规则。如果一条信息需要在多个步骤之间持久化它应该存储在状态中。如果相同的信息可以从现有数据中重新推导出来我们就避免存储它而是在需要时计算它。对于我们的 Strava 训练智能体我们需要跟踪•原始 Strava 活动这些无法在以后重建并且被多个步骤重复使用。•训练摘要聚合的信号如每周训练量、强度训练次数和长时间跑持续时间。•目标和约束静态输入如比赛日期、距离和每周训练次数。•评估结果智能体对进展、置信度和风险标志的评估这些会驱动下游决策。•生成的训练计划将发送给用户的下周计划。•执行元数据用于调试和恢复的时间戳和标识符。让我们定义我们的状态from typing import TypedDict, Literal, List, Dictclass TrainingEvaluation(TypedDict): status: Literal[on_track, behind, overloaded] confidence: float risk_flags: List[str] recommendation: Literal[keep, adjust, deload]class TrainingSession(TypedDict): day: str description: str duration_min: int intensity: Literal[easy, moderate, hard]class StravaTrainingAgentState(TypedDict): # Raw Strava data activities: List[Dict] | None # Aggregated training signals training_summary: Dict | None # Goal and constraints goal: Dict sessions_per_week: int # Evaluation output evaluation: TrainingEvaluation | None # Generated plan next_week_plan: List[TrainingSession] | None # Generated communication weekly_email: str | None # Execution metadata run_id: str last_sync_timestamp: str请注意状态只包含原始或结构化的数据。每个节点从这个共享状态读取做一个特定的工作并以结构化形式写回其结果。第 4 步构建你的节点有了工作流程和状态我们可以开始将每个步骤转化为代码。在 LangGraph 中一个节点只不过是一个 Python 函数它将当前状态作为输入并返回它想要更新的字段。这种简单性是刻意的——它让焦点保持在数据如何流经系统而不是框架特定的细节。所有节点的完整实现可在 GitHub 仓库中找到。在这篇文章中我们将重点放在最重要的一个生成下周计划。为了使示例易于理解我们在ChatOpenAI周围使用了一个最小的包装器。这个包装器只是集中了 LLM 调用使节点逻辑保持干净。from dataclasses import dataclassfrom langchain_openai import ChatOpenAIfrom langchain_core.messages import SystemMessage, HumanMessagedataclassclass LLMService: model: str gpt-4o-mini temperature: float 0.1 def __post_init__(self) - None: self.client ChatOpenAI(modelself.model, temperatureself.temperature) def structured_completion(self, system: str, user: str) - str: return self.client.invoke( [SystemMessage(contentsystem), HumanMessage(contentuser)] ).contentgenerate_next_week_plan节点是智能体实际智能所在的位置。图中的所有早期内容都准备输入——同步 Strava、总结训练、评估进展。所有后期内容都完善或传达结果。这个节点的责任很简单给定当前状态生成一个尊重所选策略和约束的一周训练计划。这个节点完全是状态驱动的。它读取运动员的目标、近期训练的简短摘要、当前建议keep、adjust或deload以及每周训练次数。不需要额外的上下文。系统提示将模型锚定为跑步教练并编码护栏只返回结构化的 JSON尊重请求的训练次数除非减量训练否则限制进展在 10%并保持描述简洁。用户提示从状态中注入实际上下文。def generate_next_week_plan(state: StravaTrainingAgentState) - dict: LangGraph node: generate next weeks training plan. llm: LLMService _get_service(llm) goal state.get(goal, {}) summary state.get(training_summary, {}) sessions state.get(sessions_per_week, 3) recommendation (state.get(evaluation) or {}).get(recommendation, adjust) system_prompt ( You are a running coach. Return ONLY valid JSON: a list of sessions with fields: day (Mon-Sun), description, duration_min, intensity (easy|moderate|hard). Respect sessions_per_week exactly. Cap progression at 10% unless deloading (20–30% down). ) user_prompt ( fGoal: {json.dumps(goal)}\n fRecent summary: {json.dumps(summary)}\n fRecommendation: {recommendation}\n fSessions per week: {sessions} ) plan llm.structured_completion(system_prompt, user_prompt) return {next_week_plan: plan}第 5 步将它们连接在一起实现了所有节点后最后一步是将它们连接成一个可工作的 LangGraph 工作流程。这是智能体的控制流变得显式的地方我们定义下一个运行哪个节点、图在哪里分支以及何时停止。我们首先用状态模式创建一个StateGraph并注册每个节点# Initiat graphgraph StateGraph(StravaTrainingAgentState)# Add nodesgraph.add_node(sync_strava_activities, sync_strava_activities)graph.add_node(summarize_recent_training, summarize_recent_training)graph.add_node(evaluate_progress_vs_goal, evaluate_progress_vs_goal)graph.add_node(generate_next_week_plan, generate_next_week_plan)graph.add_node(adjust_plan_add_warnings, adjust_plan_add_warnings)graph.add_node(compose_weekly_email, compose_weekly_email)graph.add_node(send_email, send_email)接下来我们添加定义执行如何流经图的边。大多数边是简单且顺序的一个节点总是跟随另一个。关键部分是generate_next_week_plan之后的条件边。此时智能体已经生成了一个计划但我们并不总是想以相同的方式对待它。如果评估说我们步入正轨keep我们可以立即发布。如果建议是adjust或deload我们通过一个可以软化计划并附加警告的额外节点进行路由。在 LangGraph 中add_conditional_edges接受我们分支自的节点返回一个键的路由函数从该键到下一个节点的映射。这里路由函数只是从状态中读取建议# Add edgesgraph.add_edge(START, sync_strava_activities)graph.add_edge(sync_strava_activities, summarize_recent_training)graph.add_edge(summarize_recent_training, evaluate_progress_vs_goal)graph.add_edge(evaluate_progress_vs_goal, generate_next_week_plan)graph.add_conditional_edges( generate_next_week_plan, lambda state: state.get(evaluation, {}).get(recommendation, adjust), { keep: compose_weekly_email, adjust: adjust_plan_add_warnings, deload: adjust_plan_add_warnings, },)graph.add_edge(adjust_plan_add_warnings, compose_weekly_email)graph.add_edge(compose_weekly_email, send_email)graph.add_edge(send_email, END)# Compile graphapp graph.compile()最后我们连接剩余的节点并编译图。第 6 步测试智能体要在本地测试完整的智能体首先克隆 GitHub 仓库并按照 README 中的设置说明进行操作。创建或激活虚拟环境安装依赖项并在.env文件中配置所需的 Strava 和 OpenAI 凭据后你可以用单个命令运行智能体python strava_training_agent.py每次运行时智能体都会获取你最近的 Strava 活动总结你的训练为下周生成计划并撰写每周电子邮件。配置 SMTP 是可选的。如果未设置与电子邮件相关的环境变量智能体将简单打印并记录电子邮件预览而不是发送它。这使得在不预先设置电子邮件基础设施的情况下轻松端到端测试整个工作流程变得容易。自动运行一旦智能体在本地工作下一个问题是如何自动运行它。因为这个工作流程只需要每周执行一次所以不需要始终在线的基础设施。对于个人项目和教程GitHub Actions通常是最简单的选项。这个仓库包含一个weekly-agent.yml工作流程它使用 cron 触发器调度智能体并运行你在本地使用的相同脚本。Strava 和 OpenAI 凭据以及可选的 SMTP 凭据存储为加密的 GitHub SecretsGitHub 负责执行和日志记录。设置工作量小、可靠其他人也很容易复制。最终想法本教程的目标不是构建尽可能复杂的训练系统而是展示 LangGraph 如何帮助构建显式、可测试且易于推理的智能体工作流程。通过将问题建模为图——具有共享状态、小而专注的节点和明确定义的控制流——你最终会得到一个行为可见且可预测的智能体即使它适应不断变化的输入。同样的模式很好地超越了这个 Strava 示例客户支持智能体、数据分析助手、内部工具或任何需要推理、行动和循环的系统。还有一些明显的方向可以改进智能体本身。在本教程中我们故意保持提示简单以专注于架构。在提示设计上投入更多时间——通过添加更丰富的教练背景、更清晰的进展规则、恢复启发式或运动特定知识——已经可以在不改变图的情况下显著带来更好的训练计划。一旦工作流程到位提示通常是杠杆最高的改进。从那里你可以用用户反馈循环扩展智能体跨训练模块的更长期记忆额外的数据来源如睡眠或心率变异性或更严格的安全检查当风险信号累积时停止进展。关键要点是这些改进是渐进的。如果你能够将问题分解为节点仔细定义状态并有意识地连接图你就已经有了一个坚实的基础可以使用 LangGraph 构建健壮、自适应的智能体。如何学习大模型 AI 由于新岗位的生产效率要优于被取代岗位的生产效率所以实际上整个社会的生产效率是提升的。但是具体到个人只能说是“最先掌握AI的人将会比较晚掌握AI的人有竞争优势”。这句话放在计算机、互联网、移动互联网的开局时期都是一样的道理。我在一线互联网企业工作十余年里指导过不少同行后辈。帮助很多人得到了学习和成长。我意识到有很多经验和知识值得分享给大家也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限很多互联网行业朋友无法获得正确的资料得到学习提升故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】为什么要学习大模型我国在A大模型领域面临人才短缺,数量与质量均落后于发达国家。2023年人才缺口已超百万凸显培养不足。随着AI技术飞速发展预计到2025年,这一缺口将急剧扩大至400万,严重制约我国AI产业的创新步伐。加强人才培养,优化教育体系,国际合作并进是破解困局、推动AI发展的关键。大模型入门到实战全套学习大礼包1、大模型系统化学习路线作为学习AI大模型技术的新手方向至关重要。 正确的学习路线可以为你节省时间少走弯路方向不对努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划带你从零基础入门到精通2、大模型学习书籍文档学习AI大模型离不开书籍文档我精选了一系列大模型技术的书籍和学习文档电子版它们由领域内的顶尖专家撰写内容全面、深入、详尽为你学习大模型提供坚实的理论基础。3、AI大模型最新行业报告2025最新行业报告针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估以了解哪些行业更适合引入大模型的技术和应用以及在哪些方面可以发挥大模型的优势。4、大模型项目实战配套源码学以致用在项目实战中检验和巩固你所学到的知识同时为你找工作就业和职业发展打下坚实的基础。5、大模型大厂面试真题面试不仅是技术的较量更需要充分的准备。在你已经掌握了大模型技术之后就需要开始准备面试我精心整理了一份大模型面试题库涵盖当前面试中可能遇到的各种技术问题让你在面试中游刃有余。适用人群第一阶段10天初阶应用该阶段让大家对大模型 AI有一个最前沿的认识对大模型 AI 的理解超过 95% 的人可以在相关讨论时发表高级、不跟风、又接地气的见解别人只会和 AI 聊天而你能调教 AI并能用代码将大模型和业务衔接。大模型 AI 能干什么大模型是怎样获得「智能」的用好 AI 的核心心法大模型应用业务架构大模型应用技术架构代码示例向 GPT-3.5 灌入新知识提示工程的意义和核心思想Prompt 典型构成指令调优方法论思维链和思维树Prompt 攻击和防范…第二阶段30天高阶应用该阶段我们正式进入大模型 AI 进阶实战学习学会构造私有知识库扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架抓住最新的技术进展适合 Python 和 JavaScript 程序员。为什么要做 RAG搭建一个简单的 ChatPDF检索的基础概念什么是向量表示Embeddings向量数据库与向量检索基于向量检索的 RAG搭建 RAG 系统的扩展知识混合检索与 RAG-Fusion 简介向量模型本地部署…第三阶段30天模型训练恭喜你如果学到这里你基本可以找到一份大模型 AI相关的工作自己也能训练 GPT 了通过微调训练自己的垂直大模型能独立训练开源多模态大模型掌握更多技术方案。到此为止大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗为什么要做 RAG什么是模型什么是模型训练求解器 损失函数简介小实验2手写一个简单的神经网络并训练它什么是训练/预训练/微调/轻量化微调Transformer结构简介轻量化微调实验数据集的构建…第四阶段20天商业闭环对全球大模型从性能、吞吐量、成本等方面有一定的认知可以在云端和本地等多种环境下部署大模型找到适合自己的项目/创业方向做一名被 AI 武装的产品经理。硬件选型带你了解全球大模型使用国产大模型服务搭建 OpenAI 代理热身基于阿里云 PAI 部署 Stable Diffusion在本地计算机运行大模型大模型的私有化部署基于 vLLM 部署大模型案例如何优雅地在阿里云私有部署开源大模型部署一套开源 LLM 项目内容安全互联网信息服务算法备案…学习是一个过程只要学习就会有挑战。天道酬勤你越努力就会成为越优秀的自己。如果你能在15天内完成所有的任务那你堪称天才。然而如果你能完成 60-70% 的内容你就已经开始具备成为一名大模型 AI 的正确特征了。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】