下面我把 LangGraph 的 Graph API(用“图”来编排 agent/工作流)和 Function API(模型的函数/工具调用能力)当成两种不同层级的能力来对比:前者是“系统编排框架”,后者是“模型调用工具的接口”。它们不是互斥关系,实际项目里经常是 Graph API 负责流程与状态,而 Function API 负责在某个节点里调用外部工具。
核心定位差异
Function API(函数/工具调用)
- 解决的问题:让 LLM 可靠地输出结构化参数,并触发某个工具/函数(查库、下单、调用内部服务等)。
- 你得到的是:一次或多次的 tool call(带参数),以及把工具结果回填给模型继续推理。
LangGraph Graph API(图式编排)
- 解决的问题:把一个复杂 agent 拆成多节点、多分支、可循环、可中断的“状态机/工作流” ,并支持持久化、恢复、并发、长流程治理。
- 你得到的是:可控的执行图(nodes/edges/conditions),每一步都能观察、回放、插人、重试、暂停继续。
各自优劣势
1) Function API:优劣势与适用度
优势
- 轻量、上手快:适合直接在现有服务里加一个“LLM + 工具调用”的能力。
- 对接业务工具方便:把内部 API/DB/搜索/工单系统封成工具即可。
- 结构化更稳:比纯提示词 JSON 输出更可靠(参数校验、必填字段、枚举等更好做)。
- 延迟与成本更可控:通常一两轮对话就能完成任务。
劣势
- 缺少流程治理:复杂多步任务容易变成“提示词里写工作流”,可维护性差。
- 状态管理麻烦:需要你自己做 session/state、重试、回滚、幂等、断点恢复。
- 复杂分支/循环难写:例如“计划-执行-反思-再执行”的迭代,会越来越难维护。
典型应用场景
-
单步或少量步骤的工具驱动型任务:
- FAQ + 查库补充
- CRM/ERP 内部查询(客户信息、订单状态)
- 简单表单填写/工单创建
- “把自然语言转 SQL / 转搜索参数 / 转过滤条件”
-
对话式 UI 的“动作按钮” :用户说一句 -> 模型填好参数 -> 调用后端执行。
2) LangGraph Graph API:优劣势与适用度
优势
-
可控性强:把复杂 agent 明确拆成节点(检索、规划、执行、验证、总结…),条件分支清晰。
-
状态与长流程友好:天然适合多轮、多阶段任务;支持把状态保留下来后续恢复。
-
更好做可靠性工程:
- 每个节点可独立重试、限流、超时
- 可以插入“校验/审计/安全检查”节点
- 支持 Human-in-the-loop(中断让人确认再继续)
-
更适合多 agent 协作:例如 planner/worker/reviewer 或多个专职 agent 并行。
-
可观察性更好:能追踪每步输入输出,利于调试与回放。
劣势
- 工程复杂度更高:要设计图、状态结构、节点职责;小需求可能“杀鸡用牛刀”。
- 学习与维护成本:团队需要统一图的规范(state schema、命名、错误策略)。
- 调用链更长:如果图设计得过重,延迟和成本可能上升。
典型应用场景
-
复杂、多阶段、可中断的任务型 agent:
- 研究型/报告型:检索→归纳→生成→自检→引用校验
- 客服流程:识别意图→查单→判断是否要升级→生成回复→合规审查→发出
- 数据分析/运营:取数→清洗→分析→生成图表→解释→复核
-
需要“可靠性与审计”的企业场景:
- 金融合规、医疗流程、法务草拟(必须有检查点/审批点)
-
多工具、多分支、多轮循环:例如“先规划,再逐项执行,每项失败则走补救分支”。
怎么选:一个简单决策框架
你大概率只用 Function API 就够的情况
- 任务 ≤ 3 步、分支少
- 不需要断点恢复/长期状态
- 主要价值是“把自然语言变成结构化调用 + 执行一次工具”
你应该考虑 LangGraph 的情况
- 有明显的 多阶段流程(计划/执行/验证/总结)
- 需要 重试策略、幂等、断点续跑、人工确认
- 需要 多 agent 协作 或复杂分支/循环
- 你开始在 prompt 里写“如果…就…否则…再…”并且越来越难维护
最常见的“组合用法”
- LangGraph 负责: 流程编排、状态、分支、循环、检查点、人审节点
- Function API 负责: 在某个节点里具体调用工具(DB/检索/内部服务/计算)
这样做通常能同时得到:可维护的复杂工作流 + 稳定的工具调用参数。