Agent 和 Workflow的区别Workflow 强调开发者编排流程Agent 强调模型自主决策。在实际开发中这两个概念经常被搞混。一个系统里调了几次大模型用了几个工具很多人就以为它是 Agent。一个简单的判断方法是如果去掉 LLM 后系统主体流程依然存在只是少了一个智能节点那么它更接近 Workflow如果去掉 LLM 后系统失去了自主规划和决策能力那么它更接近 Agent。目录Workflow 是什么Agent 是什么核心区别代码对比怎么选生产级系统怎么用它们小结Workflow 是什么Workflow 是一条开发者预先设计好的执行路径。每个节点做什么、节点之间怎么串联、什么条件走哪条分支这些都像我们平时写后端逻辑一样固定在代码里。模型在这个流程里只是其中一个环节负责处理需要理解的部分但它不决定流程走向。需要强调一点Workflow 并不意味着不用大模型。一个 Workflow 可以包含多个 LLM 节点只不过这些节点仍然按照开发者预先设计好的流程执行。一个典型的 Workflow 长这样用户输入 │ ▼ [意图识别] ← LLM 在这里做分类 │ ├── 查询类 → [构造 SQL] → [执行查询] → [格式化输出] │ ├── 闲聊类 → [调用聊天模型] → [返回回复] │ └── 任务类 → [参数提取] → [调用 API] → [返回结果]具体每一个分支的每一步都是确定的。虽然模型可以知道整个流程但流程本身并不是由它决定的而是由代码决定的。走哪条分支是代码根据模型输出来判断不是模型自己选择。用代码表示defworkflow(user_input:str)-str:# 第一步LLM 做意图识别模型只是分类器intentllm.classify(user_input,categories[query,chat,task])# 第二步根据意图走不同分支代码写死的逻辑ifintentquery:sqlllm.generate_sql(user_input)resultdb.execute(sql)returnformat_output(result)elifintentchat:returnllm.chat(user_input)elifintenttask:paramsllm.extract_params(user_input)returnapi.call(params)模型在这个流程里是被调用的角色。代码问它一个问题它回答然后代码根据回答决定下一步。模型本身没有决策权。Agent 是什么Agent 的核心区别在于模型自己决定下一步做什么。给 Agent 一组可用工具和一个目标它自己规划执行路径。是都需要调工具下一步需要做什么这些决策全部由模型在运行时做出。开发者不预设流程只提供能力和约束。这种自主决策并不是无限制的。模型仍然只能在开发者提供的工具、提示词和约束范围内进行规划。Agent 的自由是在开发者给他的制度下的自由也不是完全的想做什么就做什么。一个最小的 Agent 循环defagent(query:str)-str:messages[{role:user,content:query}]tools[bash_tool,read_file_tool,write_file_tool]whileTrue:# 模型决定下一步调工具还是直接回复responsecall_llm(messages,tools)messages.append(response)# 模型觉得任务完成了退出循环ifresponse.stop_reason!tool_use:break# 模型想调工具执行并把结果喂回去fortool_callinresponse.tool_calls:resultexecute(tool_call)messages.append(result)returnextract_text(messages[-1])和 Workflow 对比就很容易看出区别。Workflow 里模型是被调用的节点Agent 里模型是做决策的核心。Workflow 的流程是开发者编排的Agent 的流程是模型运行时生成的。Workflow 开发者写流程 → 模型在某个节点执行 Agent 开发者给工具 → 模型自己决定怎么用核心区别维度WorkflowAgent流程控制开发者预设模型运行时决策模型角色流程中的一个节点整个流程的决策中心执行路径通常确定可预测通常由模型动态规划可控性高每步都可审查低模型可能走意想不到的路灵活性低改流程要改代码高换工具就能做新任务调试难度低沿着固定路径排查高每次执行路径可能不同出错模式某个节点失败流程中断模型决策错误可能越走越偏适用场景流程明确、可重复的任务开放性、需要探索的任务Workflow 的执行路径通常是确定的模型在里面当打工仔Agent 的执行路径由模型动态规划模型在里面做主。代码对比用一个实际场景来对比用户说帮我在项目里找到所有 TODO 注释生成一份报告。Workflow 的做法开发者预先设计好步骤每一步都是写死的deftodo_report_workflow(project_path:str)-str:# 第一步用 find 命令搜索 TODOfilessubprocess.run([grep,-r,TODO,project_path],capture_outputTrue,textTrue).stdout# 第二步LLM 分类每个 TODO 的优先级prioritiesllm.classify_todos(files)# 第三步按优先级排序sorted_todossorted(priorities,keylambdax:x[priority])# 第四步LLM 生成报告reportllm.generate_report(sorted_todos)returnreport流程是搜索 → 分类 → 排序 → 生成报告。每一步做什么、用什么工具全在代码里。模型只负责分类和生成报告两个节点的工作。Agent 的做法开发者只提供工具让模型自己决定怎么完成任务deftodo_report_agent(project_path:str)-str:messages[{role:user,content:f在{project_path}里找到所有 TODO生成报告}]tools[bash_tool,read_file_tool,write_file_tool]whileTrue:responsecall_llm(messages,tools)messages.append(response)ifresponse.stop_reason!tool_use:breakfortool_callinresponse.tool_calls:resultexecute(tool_call)messages.append(result)returnextract_text(messages[-1])Agent 拿到任务后可能先用bash跑grep发现结果太多决定换一种方式先用find找到所有.py文件再逐个read_file检查。也可能它觉得报告应该分类展示于是自己决定按文件分组。整个过程没有预设路径模型根据中间结果实时调整策略。两种方式都能完成任务但背后的思路是不同的。怎么选Anthropic 在《Building Effective Agents》中提出了一个非常务实的建议When possible, prefer workflows over agents.中文可以理解为能用 Workflow就尽量不要使用 Agent。这不是说 Agent 不好而是说 Agent 的灵活性是有代价的。代价包括不确定性。每次执行路径可能不同同样的输入不一定得到同样的输出测试覆盖率很难保证。成本更高。Agent 的循环意味着多次 LLM 调用Token 消耗比 Workflow 的固定几次调用要多。调试困难。出了问题你很难复现因为模型下次可能走另一条路。什么时候该用 Workflow流程是固定的步骤不会变需要高可靠性和可预测性对延迟和成本敏感需要通过合规审计什么时候该用 Agent任务是开放性的无法预先规划所有路径需要根据中间结果动态调整策略任务复杂度高硬编码流程会非常臃肿用户需求多样无法穷举所有分支一个判断标准如果你能够在开发前就把主要执行路径画出来那么 Workflow 往往更合适如果执行路径需要根据运行时信息不断调整那么 Agent 更适合。生产级系统怎么用它们说了这么多区别实际上两者的边界没那么清晰。很多生产级系统是混合架构外层用 Workflow 做编排保证主流程可控内层用 Agent 处理复杂子任务保证灵活性。Workflow外层编排 │ ├── Step 1意图识别确定性 │ ├── Step 2调用 Agent 处理复杂子任务 │ │ │ └── Agent Loop动态决策 │ ├── 工具调用 A │ ├── 工具调用 B │ └── 返回结论 │ ├── Step 3格式化输出确定性 │ └── 返回结果Claude Code 就是一个典型的例子。它可以看作一种 Workflow Agent 的混合架构外层负责权限校验、上下文管理等确定性流程真正完成编码任务时则由 Agent 自主规划工具调用和执行策略。Workflow 保证了入口和出口的可控性Agent 保证了中间执行的灵活性。所以与其纠结这到底算 Agent 还是 Workflow不如想清楚一个问题你系统里的不确定性应该放在哪一层。流程层面的不确定性交给 Agent节点层面的确定性留给 Workflow。小结Workflow 决定流程怎么走Agent 决定任务怎么完成。生产环境里两者通常不是互相替代而是互相配合。Workflow 保证系统可控Agent 提供系统的智能性。回到开头的判断方法如果你的Agent去掉 LLM 之后主体流程依然能跑只是少了一个智能节点那它更接近 Workflow。如果去掉 LLM 之后系统失去了自主规划和决策的能力那它更接近 Agent。