尧图精选

Agent与Workflow的区别:固定路径与固定目标,兼谈混合架构选型

🕒 发布时间:2026/9/1 12:41:19 📁 来源:尧图网络
1. 为什么这个问题的答案比你想的更值钱先随便打开一个技术社区搜“Agent 和 Workflow 的区别”你能看到大量文章但大概率是这两种画风第一种直接下定义“Workflow 是固定流程Agent 是智能决策”然后放一张对比表结束。第二种把两者上升到哲学高度一个说 Agent 是未来Workflow 是传统另一个说 Workflow 才是工程落地的唯一解Agent 是玩具。这两种答案看完你还是不知道自己下一个项目该用哪个更不知道面试官问这个问题时到底在考你什么。如果你正在做 AI 应用开发这个问题不是你理解错了会怎样的问题而是你用错了项目质量和维护成本会立刻失控。一个固定流程的业务你强行上 Agent结果就是模型每次执行结果都不一样测试没法写线上出问题没法复现反过来一个本质开放的任务你硬写成 Workflow结果就是条件分支写了几百个还是覆盖不了真实用户的各种奇怪输入。这篇文章不是给你念概念而是把两件事讲透Agent 和 Workflow 在技术选型上的本质区别是什么。真实项目里怎么判断该用哪个怎么搭一个两者结合的架构。这句话可以放在最前面Workflow 把路径固定下来Agent 把目标固定下来。你要做的不是二选一而是搞清楚你的业务到底需要固定路径还是固定目标。2. 先说清楚这俩到底指什么2.1 开始之前先放下“智能”这个词“Agent”这个词这些年被严重概念化了。很多刚接触 AI 开发的同学会把 Agent 理解成“一个很聪明、什么都能干的机器人”把 Workflow 理解成“一堆 if else 写出来的流水线”。这个理解方向不准确甚至有害会直接影响你怎么做技术选型。在工程语境里两个词的定义应该这样框定Workflow工作流是把完成一项任务所需的步骤、规则、分支条件、输入输出结构事先全部定义好的一套执行流程。Agent智能体是一个具备感知、决策、行动能力的系统它接收一个目标自己决定要调用哪几步、按什么顺序、使用什么工具并在执行过程中根据结果动态调整。注意 Workflow 的关键词是“事先定义”Agent 的关键词是“动态决策”。所以更准确的一句话是Workflow 的路径是预定义的。Agent 的路径是运行时生成的。2.2 Workflow 的典型形态Workflow 不是 AI 时代才有的东西。传统软件开发里的业务流程引擎、数据管道、持续集成流水线本质上都是 Workflow。一个用 Python 写的简单 Workflow 可能长这样# workflow_demo.py # 一个简单的 AI 内容生成工作流先定题再写初稿再审核 def step_1_generate_topic(): 第一步生成文章主题 # 通常这一步会调用大模型 API return Agent和Workflow到底有什么区别 def step_2_write_draft(topic: str): 第二步根据主题生成初稿 return f这是一篇关于{topic}的文章初稿... def step_3_review(draft: str): 第三步对初稿进行审核返回是否通过 if len(draft) 50: return True, draft return False, 内容太短需要重写 def main(): topic step_1_generate_topic() draft step_2_write_draft(topic) passed, result step_3_review(draft) if passed: print(审核通过输出文章) print(result) else: print(审核未通过需要人工介入) if __name__ __main__: main()这个流程是固定的定题 - 写稿 - 审核。如果你要调整逻辑你需要修改程序代码把顺序换掉或者加新的分支。这就是 Workflow 的本质逻辑在写代码的时候就已经定死了模型只负责在某个节点上做一次内容生成但“下一步该做什么”不由模型决定。2.3 Agent 的典型形态Agent 的结构通常包含几个组成部分大模型内核负责推理和决策。工具集Tools可以是代码函数、API 调用、数据库操作、搜索引擎等。记忆Memory记录前面的对话和操作结果。循环机制Agent Loop反复执行“思考 - 行动 - 观察结果 - 再思考”的过程直到任务完成。一个简化版的 Agent 循环可以这样理解用户目标写一篇关于“Agent和Workflow区别”的文章 Agent 思考用户要一篇文章我需要先查资料再写大纲再写正文 Agent 调用工具搜索相关技术资料 Agent 观察结果搜到了 5 篇相关文章 Agent 再思考资料够了开始写正文 Agent 调用工具调用写作模型生成内容 Agent 观察结果生成了 3000 字初稿 Agent 判断任务未完成缺少示例继续补充 ...关键点在于先搜索还是先写大纲搜索三次还是搜索五次初稿生成后是继续补充还是直接结束这些动作都不是预写的而是模型在运行时根据当前上下文决定的。2.4 一张表看明白区别对比维度WorkflowAgent执行路径预定义、固定运行时动态生成决策主体开发者在代码中决定模型根据上下文决定可预测性高同输入基本同输出低同目标可能不同路径可调试性强问题定位明确弱行为不稳定开发成本较低逻辑直白较高需要设计提示词、工具、记忆容错能力差步骤失败则流程失败好可以换路径重试适用场景流程明确、规则稳定任务开放、路径不确定这张表的每一个维度都值得记下来因为后面所有业务判断最终都可以归到这张表上。3. 真正的区别不在“智能化程度”而在“决策时空位置”很多文章会把 Workflow 说成“传统”把 Agent 说成“先进”这其实是误导。Agent 并不比 Workflow 更“高级”两者只是把“决策”放在不同的时空位置。Workflow 的决策发生在开发阶段。你今天写代码时就已经决定了用户输入什么就走哪条路。用户真正使用系统时系统只是在执行你写好的逻辑。所以 Workflow 的能力上限取决于你写代码时对业务的理解程度。Agent 的决策发生在运行阶段。用户提出一个目标系统需要现场判断做什么、怎么做。模型的推理能力决定了系统的能力上限而不是代码里的分支数。这就是两者最本质的分野。判断一个系统是 Agent 还是 Workflow不需要看它有没有用大模型只需要问一个问题如果同一个目标用户用不同的方式提出来系统的执行路径还是完全一样吗如果一样是 Workflow如果不一样是 Agent。举个例子容易理解。假设你要做一个“美食推荐机器人”如果用 Workflow用户的每一次请求都会走“收集偏好 - 匹配分类 - 返回推荐”这条固定链路用户说“我想吃辣的”和“我想吃火锅”会走一个流程模板的不同分支但分支数量是上限。如果用 Agent机器人接到“今天吃什么”这个问题后可以根据用户平时的饮食记录、当前时间、天气情况决定是先查天气还是先看用户历史记录甚至可能会主动追问用户“今天想吃重口味还是清淡的”。这里有个很深的问题很多时候 Agent 做的工作Workflow 也可以做只是如果 Workflow 要达到和 Agent 一样的效果分支数会指数增长。当然如果你的业务流程固定到只有 3 个分支那 Workflow 就是最合适的选择。4. 用代码对比同一个任务两种实现用一个更贴近开发者的场景来对比。假设你要开发一个“自动生成技术博客初稿”的功能输入一个主题输出一篇结构完整的技术文章。4.1 用 Workflow 实现# workflow_blog_generator.py # Workflow 方式步骤固定每一步的输出作为下一步的输入 from langchain_openai import ChatOpenAI llm ChatOpenAI(modelgpt-4o-mini, temperature0.2) def generate_outline(topic: str) - str: 根据主题生成文章大纲 prompt f请为主题「{topic}」生成一个技术博客大纲要求包含 5 个小节。 return llm.invoke(prompt).content def generate_section_outline(outline: str, section_num: int) - str: 根据大纲生成第 section_num 小节的具体内容 prompt f根据以下大纲写出第 {section_num} 小节的具体内容\n{outline} return llm.invoke(prompt).content def polish_section(content: str) - str: 对生成内容做润色 prompt f请对以下文章片段做润色使其更通顺\n{content} return llm.invoke(prompt).content def generate_blog(topic: str) - str: # 固定流程大纲 - 写每一节 - 润色 - 拼接 outline generate_outline(topic) sections [] for i in range(1, 6): section generate_section_outline(outline, i) polished polish_section(section) sections.append(polished) return \n\n.join(sections) if __name__ __main__: result generate_blog(Agent和Workflow的区别) print(result)这个流程的问题很明显每一步都是固定死的。我们必须先写大纲然后按顺序生成 1 到 5 小节每一节都必须先生成再润色。如果有一天要求“第 3 节需要搜索最新资料再写”你就要改代码加步骤。整个流程的“弹性”是零。4.2 用 Agent 实现# agent_blog_generator.py # Agent 方式只声明目标和工具由模型自己规划执行路径 from langchain_openai import ChatOpenAI from langchain.agents import create_tool_calling_agent, AgentExecutor from langchain.tools import tool from langchain_core.prompts import ChatPromptTemplate llm ChatOpenAI(modelgpt-4o, temperature0.2) tool def search_web(query: str) - str: 搜索互联网获取与 query 相关的最新资料 # 实际项目中这里会调用搜索 API return f关于「{query}」的搜索结果... tool def generate_section(topic: str) - str: 基于主题生成一个完整的文章小节 prompt f请围绕主题「{topic}」生成一个文章小节要求有代码示例。 return llm.invoke(prompt).content tool def polish_text(text: str) - str: 对文本进行润色 prompt f请润色以下内容\n{text} return llm.invoke(prompt).content tools [search_web, generate_section, polish_text] prompt ChatPromptTemplate.from_messages([ (system, 你是一个技术博客写作助手。你的任务是根据用户给出的主题生成一篇高质量的技术博客初稿。你可以先搜索资料再写大纲然后逐节生成内容最后润色。), (human, {input}), (placeholder, {agent_scratchpad}), ]) agent create_tool_calling_agent(llm, tools, prompt) agent_executor AgentExecutor(agentagent, toolstools, verboseTrue) if __name__ __main__: result agent_executor.invoke({input: 写一篇关于 Agent 和 Workflow 区别的技术博客}) print(result[output])区别在哪代码里没有写“先搜索再写大纲”的逻辑。Agent 拿到“写一篇关于 Agent 和 Workflow 区别的技术博客”这个目标后会自己决定要不要先搜索、搜索几次、写大纲还是直接生成小节、哪些章节需要润色。这就是 Node 和 Agent 的核心差异Workflow 是开发者把路线画好模型只是个执行者Agent 是开发者把终点和工具给模型路线模型自己画。5. 那为什么不是所有项目都用 Agent到这里很多读者会问Agent 这么灵活为什么还要用 Workflow直接用 Agent 不就行了吗这个问题的答案是理解这两个概念的关键。5.1 Agent 的成本问题Agent 每一次决策都要调用大模型。Agent 执行一个任务内部往往要跑很多轮“思考 - 行动 - 观察”的循环每一轮都是一次模型调用。而模型调用是要花钱、要花时间的。同样的任务用 Workflow 做可能只需要 3 次模型调用用 Agent 做可能需要 10 到 20 次。成本差 5 倍以上是很正常的。5.2 Agent 的稳定性问题Workflow 最大的优势是可预测。同一个输入几乎总会得到同一个结果。这对测试工程师、对线上问题排查、对客户交付都是非常重要的。Agent 则不同。它每次执行都可能选择不同的路径第 1 次是先搜索再写第 2 次可能直接开写。结果相似但过程不同有时候过程不同结果也不同。场景对稳定性有硬性要求时Agent 是灾难。比如银行交易流程你不能让模型“自由发挥”决定先校验还是先转账。交易就是必须固定顺序先扣款、再发货先校验、再执行。5.3 Agent 的安全边界是更大问题Agent 有工具调用能力就意味着它能执行操作。一个能自由决定调用哪些工具、以什么顺序调用的系统出错的概率比固定流程大得多。最典型的就是 Agent 安全问题。如果 Agent 有数据库访问工具又有代码执行工具而你的权限控制没做好Agent 可能在一个意外分支里执行了不该执行的操作。这是实际生产环境中非常严肃的风险。简单说Agent 是用“更高的成本和更低的可控性”换“更大的灵活性和更强的任务适应能力”。你的业务值不值得付这个代价是技术选型的核心问题。6. 现实世界的答案混合架构如果你仔细观察现在真正跑在生产环境的 AI 应用会发现它们往往不是纯 Agent也不是纯 Workflow而是两者的混合外套是 Workflow内层是 Agent。也就是业界常说的“Workflow 编排 Agent”。整个业务大流程是固定的先理解用户意图再分发给对应模块最后汇总结果。但每个模块内部可以根据需要做成 Agent 形式具备动态决策能力。这也解释了为什么搜索引擎热词里有“一条是多智能体系统(MAS)用 prompt 和 workflow 把多个角色、多种工具的 agent”这样的说法。真正复杂、灵活的系统恰恰是多种模式的组合。6.1 混合架构示例一个客服系统的简化伪代码# hybrid_customer_service.py # 混合架构外层 Workflow 控制主流程内层 Agent 处理复杂任务 from langchain.agents import create_tool_calling_agent, AgentExecutor from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate llm ChatOpenAI(modelgpt-4o, temperature0) def intent_classify(user_input: str) - str: 固定流程识别意图 prompt f请判断以下用户意图是「退款」「查订单」「技术咨询」还是「其他」{user_input} return llm.invoke(prompt).content.strip() def handle_refund(user_input: str) - str: 退款流程完全固定的 Workflow # 步骤固定验证身份 - 校验订单 - 发起退款 return 退款受理成功1-3 个工作日到账。 def handle_order_query(user_input: str) - str: 查订单流程固定 Workflow return 您的订单号为 #20240801当前状态为运输中。 def handle_tech_consult(user_input: str) - str: 技术咨询使用 Agent 动态处理 tool def search_docs(query: str) - str: 搜索产品技术文档 return f文档搜索: {query} tool def run_sql_query(sql: str) - str: 查询业务数据库注意生产环境必须有严格权限控制 return 查询结果: 0 rows tools [search_docs, run_sql_query] prompt ChatPromptTemplate.from_messages([ (system, 你是技术支持助手可以搜索文档、查询数据来回答用户问题。), (human, {input}), (placeholder, {agent_scratchpad}), ]) agent create_tool_calling_agent(llm, tools, prompt) executor AgentExecutor(agentagent, toolstools, verboseTrue) return executor.invoke({input: user_input})[output] def main(): user_input input(请输入用户问题: ) intent intent_classify(user_input) # 固定的分发流程 if intent 退款: result handle_refund(user_input) elif intent 查订单: result handle_order_query(user_input) elif intent 技术咨询: result handle_tech_consult(user_input) else: result 抱歉请转人工客服。 print(result) if __name__ __main__: main()这个例子中退款、查订单走的是固定 Workflow因为这种操作不能出一点偏差技术咨询走的是 Agent因为用户问的问题千奇百怪需要模型自己决定查什么文档。外部主流程固定确保系统边界可控内部子任务灵活保证能应对复杂问题。这才是生产级别 AI 应用的常态。7. 面试官到底在考什么搜索引擎热词里能看到“agent八股文”“agent面试题”这类词说明这个问题已经成为 AI 应用开发岗位的高频面试题。那面试官问“Agent 和 Workflow 的区别”时他到底想听什么低质量的答案是这样的“Workflow 是预先定义的流程Agent 是智能体。”“Workflow 是死的Agent 是活的。”这些答案没错但都是概念复述听不出面试者的真实工程经验。更好的回答结构是先给定义用“路径预定义”和“路径运行时生成”来区分而不是用“智能程度”。用自己经历过的场景举一个具体例子说明为什么这个项目用 Workflow另一个项目用 Agent。说出两者的代价对比Agent 带来灵活性的同时也带来成本上升、稳定性下降、安全风险增加。给出结论实际的工程方案通常是混合架构Workflow 负责骨架Agent 负责需要灵活性的局部。提一下 Agent 的技术难点工具调用可靠性、记忆管理、上下文窗口限制等。当你能把回答从“概念解释”提升到“选型思路”面试官对你的评估会立刻不一样因为这些才是真实的 agent 开发需要面对的问题。8. 遇到这些情况别犹豫用 Workflow下面给出一个选型速查清单帮助你根据自己项目的实际情况做判断。8.1 应该用 Workflow 的信号业务流程是固定的比如“提交订单 - 支付 - 发货”这个顺序永远不会变。业务逻辑对准确性和稳定性有强要求比如金额计算、身份验证不能被模型“灵活处理”。对成本和延迟敏感需要控制大模型的调用次数。流程便于测试希望同一个输入得到相同输出。需要向客户或审计方解释系统运行路径证明每一步都按规范执行。团队缺少 AI 专项经验维护一个“每次行为都可能不同”的系统会很吃力。8.2 应该用 Agent 的信号任务本身没有一个固定的最优解路径不同的输入可能需要不同的处理方式。场景需要临时决定用什么工具比如“查一下今天的天气再决定是否需要提醒用户带伞”。用户输入是多变的自然语言难以用有限分支穷举。你有多轮交互需求需要根据之前的对话内容动态调整后续策略。你可以接受较高的模型调用成本并且团队有能力处理不稳定行为。有清晰的权限和工具边界控制方案能够约束 Agent 使用工具的范围。8.3 应该用混合架构的信号大多数真实项目都在这个区间整体流程可以定义但其中某一步或某几步需要灵活应对。你只需要在核心节点上引入 Agent 能力其他节点保持固定流程。9. 用 Agent 最容易被忽视的坑如果你决定在某些模块用 Agent下面的问题值得提前关注都是实际项目里高频踩坑的点。9.1 Agent 也会“迷路”Agent 在执行多步操作时可能进入一种循环状态比如反复搜索同一个关键词或者不停地修改同一段内容。很多 Agent 框架有默认的 max_iterations 参数但默认值不一定适合你的业务。建议在启动 Agent 前设置一个执行上限并设计超时后的兜底逻辑不能让它无限循环。9.2 工具调用的可靠性比模型聪明程度更重要Agent 的能力上限很大程度上取决于工具定义的质量。工具描述写得模糊模型就不知道什么时候该用这个工具工具参数设计得复杂模型就容易传错参数。在 LangChain 等框架里写工具时要多花时间润色工具的名称、描述和参数说明。这部分投入比反复调整主提示词带来的收益更大。9.3 记忆管理决定 Agent 的体验Agent 的上下文窗口是有限的。任务太长中间结果太多前面的关键信息可能被截断。这是 agent 开发里非常核心的问题也是热词里出现“agent记忆”“tencentdb agent memory”这类关键词的原因。小型 Agent 可以把对话记录直接塞进上下文大型 Agent 需要引入外部存储把中间结果、重要事实持久化在需要时再检索回来。这是从 Demo 走向生产环境的关键一步。9.4 安全边界必须前置任何工具化 Agent 都要想清楚一个问题如果模型在某个意外分支里调用了这个工具会造成什么后果如果你没办法接受最坏情况就应该给工具加上更严格的入参校验、权限校验或者干脆不用 Agent换回 Workflow。涉及删除、更新、转账、发送消息这类操作时最稳妥的做法是流程固定人工审批Agent 只负责生成操作建议不直接执行操作。10. 给开发者的务实建议最后结合前面所有分析给出几条实际项目的落地建议。不要从“哪个技术更先进”出发做选择从“业务需要什么”出发做选择。你的代码里用不用 Agent用户完全不关心用户关心的只是结果是否稳定、准确、快速。Agent 不是某一个具体框架或某一种代码写法而是一种系统能力模式。LangChain 的 AgentExecutor、OpenAI 的 Function Calling、各种 agent 框架都是这种模式的具体实现它们会变模式不会变。理解了模式换框架只是看文档的事。学习顺序建议先 Workflow 后 Agent。先把固定流程做扎实再学习在局部引入动态决策。很多“Agent 控不住”的问题根源并不是 Agent 不好而是开发者对基础流程的掌控力不够。生产环境优先选择“Workflow 编排 局部 Agent”的架构。外层用确定性流程控制风险边界内层用 Agent 处理真正需要灵活的任务是目前工程落地最稳妥的方案。在 Agent 开发里投入更多时间在“工具定义、记忆管理、安全边界、失败兜底”这四件事上而不是一味追求更聪明的模型。这四件事决定了一个 Agent 系统能不能从 Demo 活到生产环境。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →