中文资讯 掘金 AI Wed, 22 Jul 2026 正文 ok 579 words

Workflow 还是 Agent?帮你一次性搞清楚这俩到底有啥不一样

英文标题:Workflow 还是 Agent?帮你一次性搞清楚这俩到底有啥不一样

引子:一个让人头大的问题 前两天有个读者问我:"我用 LangChain 写了个链式调用,这算是 Workflow 还是 Agent?" 这个问题问得特别好,因为很多人嘴上说着 Workflow 和
打开原文相关 5 · 机会 2
media3.2 KB media589 B media31.0 KB media36.8 KB media7.2 KB

中文

别再说"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";


const creativeChain = storyPrompt
  .pipe(creativeModel)
  .pipe(outputParser);

const result = await creativeChain.invoke("恭喜拿下offer");

这段代码确实像一条流水线:输入进去,经过一系列处理,输出结果。但这是 Agent 吗?显然不是。

那 Workflow 和 Agent 到底有什么区别?今天我们就来彻底讲清楚这件事。

第一部分:Workflow,AI世界的"流水线工人"

什么是 Workflow?

Workflow 本质上是一套预定义的流程,可以把它想象成一条标准化的流水线。

每一步做什么、输入输出是什么、走到哪一步该干什么,都是提前画好的。当条件满足,就自动进入下一环节。

在技术层面,它通常是一个编排好的 AI 工作流引擎——由 AI 调用、条件判断、循环逻辑组成的一个有向图。

Workflow 的执行流程可以用下图表示:

deepseek_mermaid_20260722_263627.png

我用 Coze 构建过一个"AI 照相馆"工作流,流程大概是这样的:

用户上传照片 → 人脸检测 → 风格选择 → AI 生成 → 输出结果

每个节点都是固定的:输入是照片,输出是处理后的图片。中间没有任何"自由发挥"的空间——这就叫确定性执行。

LangChain 如何构建 Workflow?

LangChain 的 LCEL(LangChain 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(),
});


const model = new ChatOpenAI({ model: "gpt-4" });

const prompt = ChatPromptTemplate.fromTemplate(`
提取以下简历中的关键信息:
{resume_text}

输出格式:姓名、技能列表、工作经历年限、教育背景
`);

const parser = StructuredOutputParser.fromZodSchema(resumeSchema);


const resumeWorkflow = prompt.pipe(model).pipe(parser);


const result = await resumeWorkflow.invoke({ resume_text: resumeContent });

看到没? .pipe() 就像工厂里的传送带,把数据从一个节点传到下一个节点,直到产出最终结果。

什么时候该用 Workflow?

举一个真实的招聘场景。假设你要用 AI 处理 1000 份简历,流程固定:

  1. 解析 PDF 文档
  2. 提取技能、工作经历、教育背景
  3. 匹配岗位需求(RAG 检索)
  4. 综合打分排序
  5. 输出 Top 10 候选名单

这个场景里,每一步都是明确的、可预期的、不需要临时决策的 。用 Workflow 再合适不过。

Workflow 的核心价值:稳定、可控、高效。 就像一个熟练的流水线工人,每天重复做同样的事,但永远不会出错。

第二部分:Agent,AI世界的"自由探索者"

Agent 的逻辑完全不同

如果说 Workflow 是走在既定轨道上的列车,那 Agent 就是一个站在开放空间里的探险家——它自己去琢磨该怎么完成任务。

一个完整的 Agent 通常具备三个核心能力:

1. 感知环境

通过输入文本、图像、数据来理解任务是什么,以及当前有哪些工具可以调用。

2. 规划路径

不是预先定义好的路线,而是动态生成任务链。它会思考:"要做这件事,我第一步该干什么?如果失败了怎么办?"

3. 执行与调整

调用工具完成子任务,然后根据执行结果不断调整策略。

Agent 的决策循环可以用下图表示:

deepseek_mermaid_20260722_52be7d.png

这个循环会持续进行,直到 Agent 认为任务完成。每一步都是动态决策的,没有预设路径

写一个真正的 Agent

用 LangGraph 的 createReactAgent 实现一个最简单的 ReAct Agent:

import { 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" });


const agent = createReactAgent({ llm: model, tools });


const result = await agent.invoke({
  messages: [{ role: "user", content: "我想下周去三亚玩,帮我规划一下" }],
});

你看,我没有告诉 Agent "先查天气再查航班",它自己会判断该怎么做。

Agent 的典型场景

让 Agent 去规划一次旅行:

  1. 它可能先去查目的地天气
  2. 发现是雨季,于是调整方案推荐室内景点
  3. 同时搜索机票和酒店价格
  4. 结合你的预算动态权衡方案
  5. 最终给出一个完全出乎你意料但很合理的行程

这个过程中,Agent 走的每一步都是动态决策的,而不是提前写死的。

第三部分:本质区别(一张表讲清楚)

维度 Workflow Agent
路径 预定义,固定 动态生成,不确定
决策方式 规则驱动 大模型推理驱动
工具调用 按预设顺序 自主决定调什么、何时调
适应性 不会变通 根据环境反馈调整
可预测性 高 低
适用场景 重复性、流程化任务 复杂、动态、探索性任务

用一句大白话总结:

Workflow 像高速公路,路线清晰固定,效率极高,但只能到达预设的终点。Agent 像老司机,知道目的地但可以随时改道、绕路、甚至换终点——因为它能感知实时路况。

或者用更形象的比喻:

Workflow 是骨架,Agent 是大脑。骨架提供稳定性,大脑提供灵活性。一个只会执行,一个会思考。

第四部分:实战——怎么选?

场景一:客服问答机器人

如果用户问的都是"怎么退款""物流到哪了"这类固定问题:

如果用户问的是"我该怎么处理这个复杂纠纷":

场景二:代码审查

决策三要素

我在实际项目中总结了一个决策框架:

  1. 确定性 vs 开放性 :结果是固定的用 Workflow,结果开放的用 Agent
  2. 成本与合规 :Workflow 成本可控、行为可审计;Agent 可能"脑洞大开"
  3. 职责范围 :单一职责用 Workflow,跨领域协作用 Agent

细化选择标准

我总结了一个 "四问决策法" ,帮你快速判断:

  1. 任务路径是固定的还是开放的?

  2. 错误成本高不高?

    • 高(如财务、医疗)→ Workflow(可控)
    • 低(如创意生成)→ Agent
  3. 需要多步工具协作吗?

    • 工具调用顺序固定 → Workflow
    • 需要动态选择工具 → Agent
  4. 结果需要可解释和可审计吗?

    • 需要 → Workflow
    • 不需要 → Agent

一个反直觉的结论:能用 Workflow 解决的,优先用 Workflow。Agent 虽强,但贵且不可控。

第五部分:未来趋势——两者融合

我们现在做的 AI 工程,早就不是"二选一"了,而是融合 。

一个成熟的 AI 应用通常长这样:

底层 Workflow:提供稳定性和可控性
    ↓
中间层:路由和编排
    ↓
上层 Agent:提供灵活性和智能性

就像我最近在做的项目:

const mainAgent = createPlannerAgent();  


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 是不确定性探索"圈了出来。这句话值得你背下来。

最后送你三句话:

  1. Workflow 是罐头,Agent 是私厨 ——前者稳定可预期,后者充满惊喜但也需要更精心的设计
  2. 不要为了用 Agent 而用 Agent ——能用 Workflow 解决的,绝不上 Agent
  3. 真正的 AI 工程,是让骨架和大脑各司其职

希望这篇文章能帮你彻底分清 Workflow 和 Agent。下次面试或者写方案的时候,别再傻傻分不清楚了

English / 原文

别再说"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";


const creativeChain = storyPrompt
  .pipe(creativeModel)
  .pipe(outputParser);

const result = await creativeChain.invoke("恭喜拿下offer");

这段代码确实像一条流水线:输入进去,经过一系列处理,输出结果。但这是 Agent 吗?显然不是。

那 Workflow 和 Agent 到底有什么区别?今天我们就来彻底讲清楚这件事。

第一部分:Workflow,AI世界的"流水线工人"

什么是 Workflow?

Workflow 本质上是一套预定义的流程,可以把它想象成一条标准化的流水线。

每一步做什么、输入输出是什么、走到哪一步该干什么,都是提前画好的。当条件满足,就自动进入下一环节。

在技术层面,它通常是一个编排好的 AI 工作流引擎——由 AI 调用、条件判断、循环逻辑组成的一个有向图。

Workflow 的执行流程可以用下图表示:

deepseek_mermaid_20260722_263627.png

我用 Coze 构建过一个"AI 照相馆"工作流,流程大概是这样的:

用户上传照片 → 人脸检测 → 风格选择 → AI 生成 → 输出结果

每个节点都是固定的:输入是照片,输出是处理后的图片。中间没有任何"自由发挥"的空间——这就叫确定性执行。

LangChain 如何构建 Workflow?

LangChain 的 LCEL(LangChain 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(),
});


const model = new ChatOpenAI({ model: "gpt-4" });

const prompt = ChatPromptTemplate.fromTemplate(`
提取以下简历中的关键信息:
{resume_text}

输出格式:姓名、技能列表、工作经历年限、教育背景
`);

const parser = StructuredOutputParser.fromZodSchema(resumeSchema);


const resumeWorkflow = prompt.pipe(model).pipe(parser);


const result = await resumeWorkflow.invoke({ resume_text: resumeContent });

看到没? .pipe() 就像工厂里的传送带,把数据从一个节点传到下一个节点,直到产出最终结果。

什么时候该用 Workflow?

举一个真实的招聘场景。假设你要用 AI 处理 1000 份简历,流程固定:

  1. 解析 PDF 文档
  2. 提取技能、工作经历、教育背景
  3. 匹配岗位需求(RAG 检索)
  4. 综合打分排序
  5. 输出 Top 10 候选名单

这个场景里,每一步都是明确的、可预期的、不需要临时决策的 。用 Workflow 再合适不过。

Workflow 的核心价值:稳定、可控、高效。 就像一个熟练的流水线工人,每天重复做同样的事,但永远不会出错。

第二部分:Agent,AI世界的"自由探索者"

Agent 的逻辑完全不同

如果说 Workflow 是走在既定轨道上的列车,那 Agent 就是一个站在开放空间里的探险家——它自己去琢磨该怎么完成任务。

一个完整的 Agent 通常具备三个核心能力:

1. 感知环境

通过输入文本、图像、数据来理解任务是什么,以及当前有哪些工具可以调用。

2. 规划路径

不是预先定义好的路线,而是动态生成任务链。它会思考:"要做这件事,我第一步该干什么?如果失败了怎么办?"

3. 执行与调整

调用工具完成子任务,然后根据执行结果不断调整策略。

Agent 的决策循环可以用下图表示:

deepseek_mermaid_20260722_52be7d.png

这个循环会持续进行,直到 Agent 认为任务完成。每一步都是动态决策的,没有预设路径

写一个真正的 Agent

用 LangGraph 的 createReactAgent 实现一个最简单的 ReAct Agent:

import { 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" });


const agent = createReactAgent({ llm: model, tools });


const result = await agent.invoke({
  messages: [{ role: "user", content: "我想下周去三亚玩,帮我规划一下" }],
});

你看,我没有告诉 Agent "先查天气再查航班",它自己会判断该怎么做。

Agent 的典型场景

让 Agent 去规划一次旅行:

  1. 它可能先去查目的地天气
  2. 发现是雨季,于是调整方案推荐室内景点
  3. 同时搜索机票和酒店价格
  4. 结合你的预算动态权衡方案
  5. 最终给出一个完全出乎你意料但很合理的行程

这个过程中,Agent 走的每一步都是动态决策的,而不是提前写死的。

第三部分:本质区别(一张表讲清楚)

维度 Workflow Agent
路径 预定义,固定 动态生成,不确定
决策方式 规则驱动 大模型推理驱动
工具调用 按预设顺序 自主决定调什么、何时调
适应性 不会变通 根据环境反馈调整
可预测性 高 低
适用场景 重复性、流程化任务 复杂、动态、探索性任务

用一句大白话总结:

Workflow 像高速公路,路线清晰固定,效率极高,但只能到达预设的终点。Agent 像老司机,知道目的地但可以随时改道、绕路、甚至换终点——因为它能感知实时路况。

或者用更形象的比喻:

Workflow 是骨架,Agent 是大脑。骨架提供稳定性,大脑提供灵活性。一个只会执行,一个会思考。

第四部分:实战——怎么选?

场景一:客服问答机器人

如果用户问的都是"怎么退款""物流到哪了"这类固定问题:

如果用户问的是"我该怎么处理这个复杂纠纷":

场景二:代码审查

决策三要素

我在实际项目中总结了一个决策框架:

  1. 确定性 vs 开放性 :结果是固定的用 Workflow,结果开放的用 Agent
  2. 成本与合规 :Workflow 成本可控、行为可审计;Agent 可能"脑洞大开"
  3. 职责范围 :单一职责用 Workflow,跨领域协作用 Agent

细化选择标准

我总结了一个 "四问决策法" ,帮你快速判断:

  1. 任务路径是固定的还是开放的?

  2. 错误成本高不高?

    • 高(如财务、医疗)→ Workflow(可控)
    • 低(如创意生成)→ Agent
  3. 需要多步工具协作吗?

    • 工具调用顺序固定 → Workflow
    • 需要动态选择工具 → Agent
  4. 结果需要可解释和可审计吗?

    • 需要 → Workflow
    • 不需要 → Agent

一个反直觉的结论:能用 Workflow 解决的,优先用 Workflow。Agent 虽强,但贵且不可控。

第五部分:未来趋势——两者融合

我们现在做的 AI 工程,早就不是"二选一"了,而是融合 。

一个成熟的 AI 应用通常长这样:

底层 Workflow:提供稳定性和可控性
    ↓
中间层:路由和编排
    ↓
上层 Agent:提供灵活性和智能性

就像我最近在做的项目:

const mainAgent = createPlannerAgent();  


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 是不确定性探索"圈了出来。这句话值得你背下来。

最后送你三句话:

  1. Workflow 是罐头,Agent 是私厨 ——前者稳定可预期,后者充满惊喜但也需要更精心的设计
  2. 不要为了用 Agent 而用 Agent ——能用 Workflow 解决的,绝不上 Agent
  3. 真正的 AI 工程,是让骨架和大脑各司其职

希望这篇文章能帮你彻底分清 Workflow 和 Agent。下次面试或者写方案的时候,别再傻傻分不清楚了