别再说Workflow 和 Agent 差不多了今天我们用代码和场景把它们掰开揉碎讲清楚。引子一个让人头大的问题前两天有个读者问我我用 LangChain 写了个链式调用这算是 Workflow 还是 Agent这个问题问得特别好因为很多人嘴上说着 Workflow 和 Agent心里想的却是 反正都是 AI 在干活。看完他的代码我发现他写的是这样的东西import { PromptTemplate } from langchain/core/prompts; import { ChatOpenAI } from langchain/openai; import { StringOutputParser } from langchain/core/output_parsers; // 这其实就是一个典型的 Workflow const creativeChain storyPrompt .pipe(creativeModel) .pipe(outputParser); const result await creativeChain.invoke(恭喜拿下offer);这段代码确实像一条流水线输入进去经过一系列处理输出结果。但这是 Agent 吗显然不是。那 Workflow 和 Agent 到底有什么区别今天我们就来彻底讲清楚这件事。第一部分WorkflowAI世界的流水线工人什么是 WorkflowWorkflow 本质上是一套预定义的流程可以把它想象成一条标准化的流水线。每一步做什么、输入输出是什么、走到哪一步该干什么都是提前画好的。当条件满足就自动进入下一环节。在技术层面它通常是一个编排好的 AI 工作流引擎——由 AI 调用、条件判断、循环逻辑组成的一个有向图。我用 Coze 构建过一个AI 照相馆工作流流程大概是这样的用户上传照片 → 人脸检测 → 风格选择 → AI 生成 → 输出结果每个节点都是固定的输入是照片输出是处理后的图片。中间没有任何自由发挥的空间——这就叫确定性执行。LangChain 如何构建 WorkflowLangChain 的LCELLangChain Expression Language是构建 Workflow 的利器在 JavaScript 中通过.pipe()方法串联各个组件import { ChatOpenAI } from langchain/openai; import { ChatPromptTemplate } from langchain/core/prompts; import { StructuredOutputParser } from langchain/core/output_parsers; import { z } from zod; // 定义输出结构 const resumeSchema z.object({ name: z.string(), skills: z.array(z.string()), yearsOfExperience: z.number(), education: z.string(), }); // 定义一个简历解析的 Workflow const model new ChatOpenAI({ model: gpt-4 }); const prompt ChatPromptTemplate.fromTemplate( 提取以下简历中的关键信息 {resume_text} 输出格式姓名、技能列表、工作经历年限、教育背景 ); const parser StructuredOutputParser.fromZodSchema(resumeSchema); // 这条链就是一条标准的 Workflow 流水线 const resumeWorkflow prompt.pipe(model).pipe(parser); // 执行 const result await resumeWorkflow.invoke({ resume_text: resumeContent });看到没.pipe()就像工厂里的传送带把数据从一个节点传到下一个节点直到产出最终结果。什么时候该用 Workflow举一个真实的招聘场景。假设你要用 AI 处理 1000 份简历流程固定解析 PDF 文档提取技能、工作经历、教育背景匹配岗位需求RAG 检索综合打分排序输出 Top 10 候选名单这个场景里每一步都是明确的、可预期的、不需要临时决策的。用 Workflow 再合适不过。Workflow 的核心价值稳定、可控、高效。就像一个熟练的流水线工人每天重复做同样的事但永远不会出错。第二部分AgentAI世界的自由探索者Agent 的逻辑完全不同如果说 Workflow 是走在既定轨道上的列车那Agent 就是一个站在开放空间里的探险家——它自己去琢磨该怎么完成任务。一个完整的 Agent 通常具备三个核心能力1. 感知环境通过输入文本、图像、数据来理解任务是什么以及当前有哪些工具可以调用。2. 规划路径不是预先定义好的路线而是动态生成任务链。它会思考要做这件事我第一步该干什么如果失败了怎么办3. 执行与调整调用工具完成子任务然后根据执行结果不断调整策略。写一个真正的 Agent用 LangGraph 的createReactAgent实现一个最简单的 ReAct Agentimport { createReactAgent } from langchain/langgraph/prebuilt; import { DynamicTool } from langchain/core/tools; import { ChatOpenAI } from langchain/openai; // 定义工具 const searchWeather new DynamicTool({ name: search_weather, description: 查询城市天气, func: async (city) ${city}今天晴天温度25°C, }); const searchFlight new DynamicTool({ name: search_flight, description: 查询航班信息, func: async ({ departure, destination }) 从${departure}到${destination}的航班最低票价800元, }); const tools [searchWeather, searchFlight]; const model new ChatOpenAI({ model: gpt-4 }); // 创建 Agent const agent createReactAgent({ llm: model, tools }); // Agent 会自动决定调用哪个工具、什么顺序调用 const result await agent.invoke({ messages: [{ role: user, content: 我想下周去三亚玩帮我规划一下 }], }); // Agent 可能先查天气再查航班甚至可能去查酒店 // 具体路径完全由它自己决定你看我没有告诉 Agent 先查天气再查航班它自己会判断该怎么做。Agent 的典型场景让 Agent 去规划一次旅行它可能先去查目的地天气发现是雨季于是调整方案推荐室内景点同时搜索机票和酒店价格结合你的预算动态权衡方案最终给出一个完全出乎你意料但很合理的行程这个过程中Agent 走的每一步都是动态决策的而不是提前写死的。第三部分本质区别一张表讲清楚维度WorkflowAgent路径预定义固定动态生成不确定决策方式规则驱动大模型推理驱动工具调用按预设顺序自主决定调什么、何时调适应性不会变通根据环境反馈调整可预测性高低适用场景重复性、流程化任务复杂、动态、探索性任务用一句大白话总结Workflow 像高速公路路线清晰固定效率极高但只能到达预设的终点。Agent 像老司机知道目的地但可以随时改道、绕路、甚至换终点——因为它能感知实时路况。或者用更形象的比喻Workflow 是骨架Agent 是大脑。骨架提供稳定性大脑提供灵活性。一个只会执行一个会思考。第四部分实战——怎么选场景一客服问答机器人如果用户问的都是怎么退款物流到哪了这类固定问题javascript// ✅ 用 Workflow // 意图识别 → FAQ 检索 → 模板回复 // 简单、快速、成本低如果用户问的是我该怎么处理这个复杂纠纷// ✅ 用 Agent // 查询订单 → 查看聊天记录 → 调取物流信息 → 综合判断 // 需要多步推理和工具调用场景二代码审查// 团队规范检查、格式化 → Workflow // 发现潜在的逻辑漏洞、提出重构建议 → Agent决策三要素我在实际项目中总结了一个决策框架确定性 vs 开放性结果是固定的用 Workflow结果开放的用 Agent成本与合规Workflow 成本可控、行为可审计Agent 可能脑洞大开职责范围单一职责用 Workflow跨领域协作用 Agent一个反直觉的结论能用 Workflow 解决的优先用 Workflow。Agent 虽强但贵且不可控。第五部分未来趋势——两者融合我们现在做的 AI 工程早就不是二选一了而是融合。一个成熟的 AI 应用通常长这样底层 Workflow提供稳定性和可控性 ↓ 中间层路由和编排 ↓ 上层 Agent提供灵活性和智能性就像我最近在做的项目// 伪代码示意 const mainAgent createPlannerAgent(); // 总控 Agent // Agent 决策后调用各个 Workflow 执行具体任务 if (task.type resume_screening) { await resumeWorkflow.invoke(task.data); // 稳定的简历筛选流程 } else if (task.type interview_scheduling) { await scheduleWorkflow.invoke(task.data); // 稳定的排期流程 } else if (task.type complex_negotiation) { await negotiationAgent.invoke(task.data); // 需要智能决策的部分 }底层 Workflow 做确定性的事骨架上层 Agent 做探索性的事大脑。两者结合既高效又有智慧。另外提一句MCP模型上下文协议的出现正在进一步模糊两者的边界——工具即节点模型即路由未来的 AI 工程形态会更加灵活。这个话题我们下次专门聊。总结写这篇文章的时候我特意把笔记里那句Workflow 是确定性执行Agent 是不确定性探索圈了出来。这句话值得你背下来。最后送你三句话Workflow 是罐头Agent 是私厨——前者稳定可预期后者充满惊喜但也需要更精心的设计不要为了用 Agent 而用 Agent——能用 Workflow 解决的绝不上 Agent真正的 AI 工程是让骨架和大脑各司其职希望这篇文章能帮你彻底分清 Workflow 和 Agent。下次面试或者写方案的时候别再傻傻分不清楚了