LangGraph 从入门到精通:Functional API 完全指南

OpenViking上下文数据库Golang集成实践 技术创新文件系统范式:将AI Agent的上下文管理从扁平向量存储提升为结构化文件系统分层检索策略:L0/L1/L2三层加载机制,减少62.1%的Token消耗记忆自迭代:会话提交触发Agent经验沉淀,实现越用越智能工程实践完整Golang实现:提供生产级可用的OpenViking客户端库企业级集成方案:涵盖文档摄入、检索、会话管理等全流程性能优化成果:检索准确率提升24.1%,响应时间减少53.3%可观测性提升可视化检索轨迹:实现检索过程的白盒化,调试效率提升77.1%全面监控指标。 阅读详情

前言:为什么你需要这本教程

在 AI 大模型时代,调用一个 LLM(大语言模型,Large Language Model)已经非常容易。但真正的挑战在于:如何构建一个能自主决策、多步推理、调用外部工具、与人类协作的智能 Agent?

LangGraph 就是为这个问题而生的。它由 LangChain 团队开发,是一个专门用于构建有状态、多角色 AI Agent 应用的框架。本教程将带你从零开始,通过构建一个完整的「智能旅行规划助手」项目,全面掌握 LangGraph Functional API 的每一个知识点。

本教程特色:

  • 项目驱动

    :以一个「智能旅行规划助手」为主线,从 v0.1 迭代到 v0.9,每章加入新能力

  • API 速查

    :每章末尾提供该章涉及的 API 速查表,方便随时查阅

  • 避坑指南

    :每章总结新手最常见的错误和解决方案

  • 生动类比

    :每个核心概念都有通俗易懂的类比,帮助你建立直觉理解

  • Mermaid 图表

    :关键流程配有 Mermaid 图,直观展示架构和数据流

学完本教程你将能够:

  • 独立使用 LangGraph Functional API 构建生产级 Agent 应用
  • 理解 State、Task、Entrypoint、Checkpointing 等核心概念
  • 实现工具调用、人在环(Human-in-the-loop)、多 Agent 协作等高级功能
  • 将 Agent 部署到生产环境并做好监控和优化

第 1 章:概念与架构 — 理解 LangGraph 是什么

1.1 本章目标

学完本章后,你将能够:

  • 清楚地解释 LangGraph 是什么,它解决了什么问题
  • 理解 Graph(图)、Node(节点)、Edge(边)、State(状态)、Entrypoint(入口)、Task(任务)六大核心概念
  • 区分 LangGraph、LangChain 和直接调用 LLM 三者的定位和关系
  • 理解 Functional API 和 Graph API 两种编程范式的区别,知道何时选用哪种
  • 画出 LangGraph 的工作原理图

1.2 核心概念

1.2.1 一个生动的类比:智能工厂流水线

想象你经营一家智能工厂。客户下单后,订单会经过一系列加工步骤:接单 → 配料 → 加工 → 质检 → 打包 → 发货。每个步骤都是一个工位,由一个工人负责。工位之间通过传送带连接。订单信息(客户地址、产品规格、数量等)贯穿整个流程,每个工位都可以查看和修改它。

LangGraph 做的事情,本质上就是帮你搭建这样的「智能工厂流水线」:

工厂概念LangGraph 概念说明
工位Node(节点) / Task(任务)执行具体工作的单元,比如调用 LLM、查询数据库、调用 API
传送带Edge(边)定义工作流的方向,决定下一步做什么
订单信息State(状态)在整个流程中传递和累积的数据
流水线入口Entrypoint(入口)用户请求进入流水线的起点
整个工厂流水线Graph(图)由节点、边、状态组成的完整工作流

1.2.2 LangGraph 到底是什么

LangGraph 是一个用于构建有状态、多步骤 AI Agent 应用的 Python 框架。它的核心价值在于:

  1. 有状态(Stateful)

    :与简单的「请求-响应」模式不同,LangGraph 的 Agent 可以记住之前的对话上下文、中间推理步骤、工具调用结果

  2. 多步骤(Multi-step)

    :Agent 不是一次性输出答案,而是像人类一样,经过多步推理、调用工具、验证结果,最终得出结论

  3. 可控流程(Controllable Flow)

    :你可以精确控制 Agent 的执行路径——什么时候调用 LLM、什么时候调用工具、什么时候暂停等待人类输入

一个直观的例子:用户问「我下周去东京,帮我规划一下行程」。一个 LangGraph Agent 的处理流程是:

用户输入 → 分析需求(提取目的地、时间、预算)→ 查询天气 → 查询机票 → 查询酒店 → 综合生成行程 → 展示给用户确认 → 根据反馈修改 → 最终输出

每一步都是一个独立的 Task(任务),数据在它们之间流转,LangGraph 负责协调整个过程。

1.2.3 LangGraph vs LangChain vs 直接调用 LLM

很多初学者会混淆这三者的关系。下面用一个表格清晰地说明:

维度直接调用 LLMLangChainLangGraph
本质单次请求-响应工具链和抽象层有状态工作流编排引擎
能做什么一问一答链式调用、工具调用、RAG多步推理、条件分支、并行、人在环、多 Agent 协作
状态管理无状态(每次独立)有限的链式状态完整的状态持久化(Checkpointing)
控制流无线性链图结构(条件分支、循环、并行)
典型场景简单问答文档问答、数据提取自主 Agent、客服系统、工作流自动化
复杂度低中高

关键理解:LangGraph 并不是 LangChain 的替代品,两者是合作关系:

  • LangChain

    提供了与 LLM 交互的便捷工具(模型调用、提示模板、工具定义等)

  • LangGraph

    提供了编排这些工具的「指挥系统」,让 Agent 能自主决策和行动

你可以把 LangChain 理解为一个工具箱(扳手、螺丝刀、电钻),把 LangGraph 理解为一条自动化流水线——流水线用工具箱里的工具来完成复杂任务。

1.2.4 Functional API vs Graph API:两种编程范式

LangGraph v1.0 引入了 Functional API(函数式 API),与传统的 Graph API(图 API) 形成两种编程范式:

Graph API(传统方式):显式定义节点和边

from langgraph.graph import StateGraph, START, END
# 需要显式定义 State、节点、边
builder = StateGraph(MyState)
builder.add_node("step1", step1_fn)
builder.add_node("step2", step2_fn)
builder.add_edge(START, "step1")
builder.add_conditional_edges("step1", router_fn, {"a": "step2", "b": END})
graph = builder.compile()

Functional API(新方式·本教程主力):使用标准 Python 控制流

from langgraph.func import entrypoint, task
@task
def step1(data): ...
@task
def step2(data): ...
@entrypoint()
def workflow(input_data):
result1 = step1(input_data).result()
if result1 == "a":
result2 = step2(result1).result()
return result2
return result1

对比总结:

维度Functional APIGraph API
控制流写法标准 Python(if/for/while)显式定义节点和边
学习曲线低(Python 程序员零门槛)中(需要理解图的概念)
可见性运行时可观测编译时可视化图结构
检查点粒度每个 entrypoint 执行后每个超步(superstep)后
适合场景快速原型、简单到中等复杂度需要精确控制、可视化、时间旅行
状态声明无需显式声明必须声明 State 和 Reducer

本教程选择 Functional API 的原因:

  1. 使用标准 Python 语法,学习成本最低
  2. 代码更简洁,可读性更好
  3. 适合大多数实际场景
  4. 是 LangGraph 团队主推的发展方向

当需要更细粒度的检查点或时间旅行等高级功能时,可以轻松切换到 Graph API,两者共享同一运行时,可以混合使用。

1.2.5 LangGraph 工作原理(Mermaid 图)

下面这张图展示了 LangGraph 的核心工作原理:

图中每个元素的含义:

  • Entrypoint(入口)

    :用户请求的入口,类似工厂的「接单台」。它负责接收输入、启动工作流、返回最终结果

  • Task(任务)

    :工作流中的独立执行单元,每个 Task 完成一个具体的工作(如调用 LLM、查询数据库、调用 API)

  • 条件判断

    :使用 Python 原生的 if/else 控制流程走向,决定下一步执行哪个 Task

  • Checkpoint(检查点)

    :自动保存工作流执行状态,就像游戏存档。如果流程中断或需要多轮对话,可以从检查点恢复

  • 工具调用循环

    :Task 调用 LLM → LLM 决定需要工具 → Task 执行工具 → 结果返回给 LLM → LLM 决定是否需要更多工具,如此循环直到 LLM 认为任务完成

1.2.6 关键术语速查表

术语英文含义类比
图Graph描述工作流整体结构的「蓝图」工厂流水线设计图
节点Node执行具体工作的单元(Graph API 概念)流水线上的一个工位
任务Task执行具体工作的单元(Functional API 概念,@task 装饰)流水线上的一个工位
边Edge定义节点之间的连接关系工位之间的传送带
状态State在工作流中传递和累积的数据订单信息表
入口Entrypoint工作流的起始点(@entrypoint 装饰)流水线的接单台
检查点Checkpoint工作流执行状态的快照游戏存档
工具ToolLLM 可以调用的外部函数工人手中的工具
人在环Human-in-the-loop在关键节点暂停等待人类决策质检员签字确认
子图Subgraph嵌套在父图中的独立子工作流工厂中的独立生产线
流式Streaming实时返回执行过程中的中间结果实时监控大屏

1.3 实战:旅行规划助手 v0.0 — 环境准备

在本章我们不会写代码,而是先把「旅行规划助手」这个项目想清楚,并准备好开发环境。

1.3.1 项目全景图

我们的「旅行规划助手」将从一个极简的「问答机器人」开始,逐步迭代为一个功能完整的多 Agent 系统:

v0.1: 简单问答 —— 用户问「我想去东京玩3天」,LLM 回复一个行程建议
v0.2: 结构化输入 —— 增加目的地、天数、预算等结构化字段
v0.3: 多步骤推理 —— 分析需求 → 生成行程 → 格式化输出
v0.4: 工具调用 —— 接入模拟的机票、酒店、天气 API
v0.5: 对话记忆 —— 支持多轮对话和上下文记忆
v0.6: 用户确认 —— 生成行程后暂停让用户审阅和修改
v0.7: 并行查询 —— 同时查询机票、酒店、天气,提升响应速度
v0.8: 多 Agent 协作 —— 规划师、预订员、客服三个 Agent 协同工作
v0.9: 生产部署 —— 添加错误处理、监控、流式响应

1.3.2 安装环境

在开始之前,请确保你的 Python 版本 >= 3.10:

# 检查 Python 版本
python --version  # 应该显示 Python 3.10 或更高
# 安装核心依赖
pip install langgraph langchain langchain-openai --break-system-packages
# 可选:安装其他模型提供商(根据你使用的模型选择)
# pip install langchain-anthropic  # Claude
# pip install langchain-google-genai  # Gemini

1.3.3 配置 API Key

在终端中设置环境变量(以 OpenAI 为例):

# macOS / Linux
export OPENAI_API_KEY="your-api-key-here"
# Windows (CMD)
set OPENAI_API_KEY=your-api-key-here
# Windows (PowerShell)
$env:OPENAI_API_KEY="your-api-key-here"

建议将 API Key 写入 ~/.bashrc 或 ~/.zshrc 文件中,避免每次都要重新设置:

echo 'export OPENAI_API_KEY="your-api-key-here"' >> ~/.bashrc
source ~/.bashrc

如果你使用的是其他模型提供商(如 DeepSeek、Claude、Gemini),本教程中所有代码都可以轻松替换,只需修改模型初始化部分。我们将在第 2 章详细说明。

1.4 API 速查

API类型说明导入路径
@entrypoint()装饰器将函数标记为工作流的入口点from langgraph.func import entrypoint
@task装饰器将函数标记为工作流中的独立任务单元from langgraph.func import task
.invoke(input)方法同步执行工作流,传入输入,返回结果调用 entrypoint 编译后的实例
.ainvoke(input)方法异步执行工作流调用 entrypoint 编译后的实例
.stream(input)方法同步流式执行,逐步返回中间结果调用 entrypoint 编译后的实例
.astream(input)方法异步流式执行调用 entrypoint 编译后的实例

1.5 常见错误与避坑指南

错误 1:混淆 LangGraph 和 LangChain

症状:新手经常问「LangGraph 是 LangChain 的升级版吗?」「我学了 LangGraph 还需要学 LangChain 吗?」

原因:两者名字相似,且 LangGraph 由 LangChain 团队开发,容易被混淆。

解决方案:记住这个关系——LangChain 提供「零件」(模型调用、工具、提示模板),LangGraph 提供「组装方案」(工作流编排、状态管理、持久化)。在实际项目中,两者通常一起使用:用 LangChain 定义模型和工具,用 LangGraph 编排工作流。

错误 2:以为 Functional API 功能不如 Graph API

症状:认为 Functional API 只是「简化版」,复杂场景必须用 Graph API。

原因:Functional API 写法更简洁,给人「功能简单」的错觉。

解决方案:Functional API 和 Graph API 共享同一运行时(Pregel —— Google 论文中提出的图计算框架,LangGraph 用它作为底层调度引擎),功能上完全等价。Functional API 只是用 Python 原生控制流代替了显式的图定义。你可以在 Functional API 中实现任何 Graph API 能做的事情——条件分支、循环、并行、子图、人在环等。唯一的区别是检查点粒度:Functional API 按 entrypoint 执行生成检查点,Graph API 按每个超步(superstep,即图中每个节点的单次执行)生成。

错误 3:忽视 Python 版本要求

症状:在 Python 3.9 环境下安装 LangGraph 失败或出现奇怪的错误。

原因:LangGraph v1.0+ 要求 Python 3.10+(3.9 已于 2025 年 10 月 EOL)。

解决方案:升级到 Python 3.10 或更高版本。可以使用 pyenv 管理多个 Python 版本:

# 安装 pyenv
curl https://pyenv.run | bash
# 安装 Python 3.11
pyenv install 3.11
# 在项目目录中设置
pyenv local 3.11

1.6 最佳实践总结

  1. 先理解概念,再写代码:在动手之前,花时间理解 Graph、State、Task、Entrypoint 这些核心概念。它们是你后续学习的基础,就像学数学前先理解「加减乘除」一样。
  2. Functional API 优先:对于大多数场景,Functional API 是更好的选择——代码更简洁、学习曲线更低、调试更方便。只有在需要时间旅行(Time Travel)或更细粒度的检查点控制时,才考虑 Graph API。
  3. LangGraph + LangChain 配合使用:不要试图用纯 LangGraph 替代 LangChain。LangChain 提供的模型抽象、工具定义、提示模板等基础设施,与 LangGraph 的工作流编排能力是互补的。
  4. 保持 Python 环境干净:使用 venv 或 conda 创建独立的虚拟环境,避免依赖冲突。LangGraph 的依赖链较长,隔离环境可以省去很多麻烦。
  5. 从简单开始,逐步迭代:不要试图一次性构建复杂的 Agent。从最简单的「Hello World」开始(第 2 章),每章加入一个新能力,逐步构建。这正是我们本教程的设计思路。

学AI大模型的正确顺序,千万不要搞错了

🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!

有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!

就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋

在这里插入图片描述

📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇

学习路线:

✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经

以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!

我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】

在这里插入图片描述

langGraph中StateGraph API与functional API的区别 特性核心思想状态驱动,通过一个显式的全局状态对象管理信息流。函数驱动,通过函数链式调用或直接连接传递输入输出。状态管理显式且集中,所有节点共享和更新一个状态。隐式且分散,每个节点的输入是前一个节点的输出。适用场景复杂的、多轮次的、需要维护上下文的代理(如:对话机器人、多步骤任务执行)。简单、线性的、或节点间输入输出关系清晰的工作流。代码复杂性初始设置需要定义状态类,但后续节点逻辑清晰。无需额外设置,但如果工作流复杂,逻辑可能分散在多个函数间。可调试性优秀。可以随时检查和修改全局状态。良好。 阅读详情

相关推荐

用AI学习graphify

Graphify是一个AI驱动的知识图谱构建工具,能够将代码、文档、论文、图像和视频等多模态数据转换为结构化知识图谱。其核心技术特点包括: 多模态处理能力: 支持25+编程语言的AST解析 处理PDF、Markdown等文档 集成Whisper进行音视频转录 高效知识提取: 采用确定性AST解析与LLM语义提取结合 相比直接读取源文件,查询token消耗最多减少71.5倍 增量更新机制仅处理变更文件 智能分析功能: 自动识别高中心性的"上帝节点" 发现跨领域的"意外连接&quo

我的专栏 752

基于RAG的企业智能客服项目,已拿70万offer!

基于 RAG 构建一套企业智能客服系统📖。

m0_59164520的博客 1449

到底什么是Harness工程?一篇文章从入门到企业落地全解析

随着OpenClaw爆火,Harness Engineering(驾驭工程)成为AI编程时代的热门概念,很多小白对其感到陌生。本文用通俗类比和真实案例,避开复杂术语,从基础定义入手,讲清Harness Engineering的核心逻辑——人类工程师设计“约束系统”(马具),让AI模型(烈马)安全高效地完成代码工作,同时拆解其核心组件、企业落地场景和实战成果,帮小白快速入门,读懂这项能解放人力、提升效率的新技术,轻松掌握它的核心价值和落地思路。

program哲学 3289

从Vibe Coding到可控生产力:Harness Engineering的实践启示

摘要:OpenAI提出的Harness Engineering(工程化治理)理念为AI Agent时代的软件工程提供了关键方法论,旨在解决代码高产出下的质量闭环、上下文管理等核心矛盾。其三大目标包括重构工程师角色、将AI纳入可控体系、实现低成本纠错,通过六大举措(如角色重构、机械化约束、反熵机制等)重构工程流程。该理念与vibe coding高度互补,既保留灵感驱动的敏捷性,又通过工程化体系保障稳定性,最终推动工程师从"代码生产者"升级为"工程体系设计者"。

小程故事多的博客 4401

数值天气预报期末复习

数值天气预报期末复习

m0_60394632的博客 7682

熵编码(五)-CABAC(一) 基础篇

前两篇算术编码文章介绍了算术编码原理和步骤。本篇文章介绍CABAC,基于上下文自适应的二进制算术编码。本文对CABAC的基本原理进行了详细的介绍和分析,下篇文章将会对H264编码中的CABAC熵编码的实际应用进行介绍。

尹佑壮的博客 3888

LangGraph Functional API:Python工作流构建新范式

工作流引擎是现代软件开发的核心组件,用于协调复杂任务的执行顺序。传统DAG框架需要开发者重构代码为显式图形结构,而LangGraph的Functional API通过装饰器模式实现了革命性突破。该技术采用Python原生语法,只需用@entrypoint和@task两个装饰器即可将现有函数转换为可管理的工作流单元,支持自动状态管理、检查点持久化和人工干预等高级特性。在工程实践中,这种设计特别适合已有代码库的渐进式改造,能减少约40%的样板代码。典型应用场景包括NLP数据处理、内容审核系统和AI写作助手等需要

weixin_30682415的博客 389

【QGIS、OSM】利用python开源工具实现指定区域的交通分配

如果从osmgnms和grid2demand得到的node.csv,我们要修改path4gnms代码中的utils.py的四处设置。利用QGIS实现可视化,得到的link_performance.csv,参数有volume和VOC。改完这四处代码,就可以运行path4gnms中的tutorial.ipynb了。

weixin_40594084的博客 1279

LangGraph Functional API:轻量级AI工作流开发指南

工作流引擎是现代AI应用开发的核心组件,其设计理念直接影响开发效率和系统可维护性。传统工作流引擎通常需要开发者显式定义DAG结构,导致代码侵入性强、调试困难等问题。LangGraph的Functional API采用函数式编程范式,通过装饰器实现轻量级工作流构建,支持自然控制流语法和自动持久化特性。该技术特别适合快速原型开发和已有代码改造,能显著降低AI应用开发门槛。在实际工程实践中,Functional API的人机交互设计和分层状态管理机制,为构建复杂审批流程和长期运行任务提供了优雅解决方案。通过合理使

weixin_33726318的博客 324

ROS2理论与实践_宇树机器人Go2开发指南(文字)

本文介绍了Unitree Go2机器人ROS2开发环境的安装与配置流程。主要内容包括:1)从GitHub克隆unitree_ros2仓库;2)安装ROS2 Foxy版本依赖项;3)编译特定版本的CycloneDDS(0.10.2);4)编译unitree_go和unitree_api功能包;5)网络配置,包括设置静态IP和修改环境变量脚本setup.sh以指定网络接口。文章还提供了本地回环测试的替代方案,并建议配置完成后重启电脑。整个流程涉及ROS2环境切换、网络适配和编译安装等多个技术环节。

Li_Dongyi的博客 4209

LinuxCNC开发实战:从安装到EtherCAT配置全解析

本文详细解析LinuxCNC开发实战,从系统安装到EtherCAT总线配置全流程。涵盖实时内核优化、伺服驱动器PDO映射、HAL配置及自定义运动学开发,帮助开发者快速搭建工业级数控系统,提升运动控制精度与稳定性。

rgv234567的博客 355

018-LangGraph Functional API 完整案例

本案例介绍 LangGraph 的 Functional API,重点讲解如何使用 @entrypoint 和 @task 装饰器实现工作流自动化,包括状态管理、并行处理和人机交互等功能。

rengang66的博客 802

手把手教你学Simulink——基于新型电力电子拓扑与宽禁带器件的电网系统场景实例:GaN HEMT器件在高频逆变器中的开关特性建模

本文介绍了基于Simulink和Simscape Electrical的GaN HEMT高频逆变器建模方法。通过构建半桥拓扑电路,详细说明了GaN器件参数设置(以EPC2045为例)、专用驱动电路设计(含负压关断和米勒钳位)以及开关瞬态过程仿真(配置1ns步长捕捉MHz级特性)。重点分析了开关损耗计算和寄生导通风险,并对比了GaN与Si MOSFET的性能差异。案例展示了如何优化驱动参数和PCB布局,验证了GaN器件在1MHz高频应用中的优势(开关损耗仅5μJ)。最后总结了GaN在数据中心电源、无线充电等领

MHD0815的博客 405

langgraph 函数式API(Functional API)

函数式API是一种无需重构代码即可构建工作流的方法,通过@entrypoint和@task注解实现。它支持并行操作、错误重试、检查点恢复、人机交互等功能。主要特点包括:1)使用@entrypoint标记主函数,@task标记异步任务;2)支持并行处理类似Map-Reduce任务;3)可与Graph API整合;4)提供流式调用接口;5)内置失败重试机制;6)通过检查点实现错误恢复;7)支持人机交互流程,包括工具调用参数审查。该API简化了工作流构建,同时保留了Python原生语法特性。

zhangbaolin的专栏 914

软件设计师高频考点—套路题

学习交流的总结

秩沅 2541

刷爆 Java 基础!1000 道经典面试题精解第一篇【序列化】

自定义序列化 / 反序列化的实现方式在实现接口的类中,手动重写和方法在方法内优先调用执行默认序列化逻辑;追加自定义逻辑(如敏感数据加密、临时字段赋值、兼容旧版本数据等)。// 序列化ID,保证兼容性// 敏感字段,默认不序列化,自定义处理// 自定义序列化// 执行默认序列化:写入username// 自定义逻辑:密码加密后写入// 自定义反序列化// 执行默认反序列化:读取username// 自定义逻辑:读取加密密码并解密// 模拟加密/解密工具方法。

七叔的博客 193

LangGraph Functional API:Python工作流编排新范式

工作流编排是现代分布式系统开发中的关键技术,它通过将复杂业务逻辑分解为可管理的任务单元,实现流程自动化和错误恢复。LangGraph Functional API采用Python原生控制流语法,通过@entrypoint和@task装饰器实现隐式编排,支持断点续执行、人工干预等高级特性。这种编排方式特别适合NLP处理、医疗报告生成等需要灵活控制流的场景,相比传统DAG式编排更符合开发者直觉。在生产环境中,配合Redis等存储后端可实现长达30天的中断恢复,日均支持20万+工作流实例。开发时需注意任务幂等性、

weixin_30644369的博客 390

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

LangGraph--API介绍

维度Graph API编程范式声明式(What)命令式(How)状态管理全局共享、强类型 State函数局部、动态字典分支逻辑多条件、可视化路由简单 if/else、循环并行支持✅ 原生支持,自动调度❌ 需手动用 asyncio/threading学习曲线中高(需理解图结构)极低(就是普通函数)调试体验可视化流程 + 状态快照传统 print/debugger团队协作✅ 图可导出、可评审✅ 代码即文档,适合单人适用场景多智能体、复杂决策、长期运行快速原型、脚本封装、数据清洗持久化。

zkw54334的博客 1668

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

【LangGraph实战】《LangGraph实战》_111.[第6章 核心API] Functional API入门:用函数式编程构建智能体

摘要: LangGraph Functional API通过@task和@entrypoint装饰器,将智能体开发简化为纯Python函数式编程。相比Graph API的繁琐节点配置,Functional API允许开发者用原生代码直接定义工作流,支持条件判断、循环等控制流,同时通过类型注解确保数据流透明。核心优势包括: 低心智负担:用函数组合替代流程图设计,减少模板代码; 高可维护性:强制纯函数与明确类型,提升调试效率; 灵活编排:支持动态逻辑,无需修改底层图结构。 适用于需快速迭代的智能体场景,尤其适合

311

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【LangGraph实战】《LangGraph实战》_120.[第6章 核心API] Functional API vs Graph API:两种范式的深度对比

聊到这里,相信你对Functional API和Graph API已经心里有数了。它们不是谁取代谁的关系,而是LangGraph给你提供的两把兵器:一把是匕首,轻便锋利,适合近战快攻;一把是长枪,沉稳有力,适合阵列作战。编程之路,最怕的不是不会用某个API,而是拿着锤子看什么都是钉子。Graph API的模板代码不是累赘,而是团队沟通的桥梁;Functional API的简洁也不是偷懒,而是快速验证的利器。真正的高手,会根据战场的形势,自如地切换兵器,甚至把两把兵器合起来用。所以,别焦虑,别纠结。

455

【LangGraph实战】《LangGraph实战》_123.[第6章 核心API] 混合使用Graph API和Functional API的最佳实践

文章摘要: 本文探讨了LangGraph中Graph API与Functional API的混合使用策略,提出两者并非对立关系,而是互补工具。Graph API擅长复杂流程编排(如循环、并行、人工干预),提供状态管理和持久化支持;Functional API则适合轻量级线性任务,代码更直观。通过典型错误案例对比,揭示了硬用Functional处理复杂流程的弊端(如状态丢失、调试困难),并给出混合方案:用Graph处理核心状态流转,Functional包装入口逻辑。最后提供6个实战要点,包括状态隔离、任务拆分

414

【LangGraph实战】《LangGraph实战》_124.[第6章 核心API] 从Graph API迁移到Functional API的实操指南

摘要: 本文是LangGraph从Graph API迁移到Functional API的实战指南,重点解决开发者切换时的思维转换和常见问题。Functional API以Python函数为核心,用@task装饰器替代节点声明,通过函数调用自然表达流程控制,比Graph API更简洁直观。文章通过代码对比和流程图,详细讲解如何将节点改造成纯函数、用显式传参替代全局State、用原生条件语句替换复杂边逻辑,并提醒避免异步调用和副作用陷阱。迁移后代码量减少50%以上,调试效率显著提升,适合复杂业务逻辑的场景。

281

LangGraph Functional API 实战:用最小改动为应用注入持久化与交互能力

的定义非常简洁,只需装饰一个函数并指定 checkpointer(用于持久化):python"""累加器工作流,演示短期记忆功能"""这个工作流接收一个数字,与之前的结果累加。当我们多次调用时:python# 第一次调用print(result1) # 输出: 1# 第二次调用,previous会记住上次的结果print(result2) # 输出: 3@task异步执行:不阻塞主线程,可并发处理多个任务检查点保存:任务结果会保存到检查点,支持工作流恢复python@task。

佑瞻的博客 894

【LangGraph实战】《LangGraph实战》_118.[第6章 核心API] Functional API实现人机环路:interrupt在函数式中的用法

摘要: LangGraph的Functional API通过interrupt机制重新定义了AI Agent的人机交互边界,实现了从“黑盒运行”到“人机共舞”的转变。文章深入剖析了函数式编程范式下的中断原理(状态冻结与恢复),并分层次解析了核心要点:1)人机环路的本质是状态机的持久化问题;2)Functional API以函数式思维替代传统图节点设计;3)interrupt通过序列化状态实现执行流的精准暂停与恢复。通过基础示例和进阶场景(条件中断、动态路由)的代码演示,结合避坑指南,帮助开发者在生产环境中构

354
上一篇: 大白话简单聊一聊:什么是 Graph-Engineering ?
下一篇: 解析Agent Loop(智能体循环)的三层分级体系
Python_金钱豹
博客等级 码龄5年 1万+粉丝 2841原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值