尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Workflow,Agent,Tools 这三个的概念和区别

Workflow,Agent,Tools 这三个的概念和区别 摘要在大模型应用从简单的“单次问答Prompt Engineering”迈向“复杂企业级落地”的过程中Workflow工作流、Agent智能体与Tools工具构成了现代 AI 应用架构的三大核心支柱。许多开发者在技术选型时常产生混淆究竟什么时候该用 LangGraph/Dify 搭建确定性的 Workflow什么时候该引入具备自决策能力的 ReAct AgentTools 在两者之间又扮演怎样的角色本文将从底层控制论与系统架构出发深度解构 Workflow、Agent、Tools 的核心定义与运行机理提供十维横向对比矩阵剖析三者的复合协同模式如 Workflow-as-a-Tool、Agent-in-Workflow并给出生产级 Python 代码实战与选型决策树帮助开发者在业务可靠性、延迟成本与自主灵活性之间取得架构平衡。前言从“单点推理”到“复合 AI 系统Compound AI Systems”2023 年以来大语言模型LLM的单点能力呈指数级提升。然而伯克利大学等机构在《The Shift from Models to Compound AI Systems》中明确指出AI 系统的上限不再仅仅取决于底层 Base Model 的参数规模而取决于围绕大模型构建的复合系统架构。在真实业务场景中我们面临着现实约束业务逻辑的严谨性财务报销、合规审查、订单流转不允许出现随机幻觉。环境交互的复杂性需要查询 SQL 数据库、调用内部 ERP 接口、抓取网页实时信息。问题求解的不确定性跨代码库 Debug、开放式行业深度研报撰写需要多轮试错与动态规划。为了解决上述问题技术界演进出了三种核心抽象Tools手脚、Workflow轨道与Agent大脑。理解三者的边界与协作是构建高可用 AI 应用的前提。┌─────────────────────────────────────────────────────────────────────────┐ │ 复合 AI 系统 (Compound AI System) │ ├─────────────────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────────────────────────────────────────────────────────┐ │ │ │ Workflow (确定性编排与轨道) │ │ │ │ │ │ │ │ [Node 1: 数据清洗] ──► [Node 2: 规则校验] ──► [Node 3: 汇总结算]│ │ │ │ ▲ │ │ │ │ │ 嵌套委派 / 节点调度 │ │ │ │ ▼ │ │ │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ │ │ Agent (自主规划与决策大脑) │ │ │ │ │ │ │ │ │ │ │ │ Perception (感知) ➔ Planning (规划) ➔ Action (行动) │ │ │ │ │ │ │ │ │ │ │ │ └──────────────────────────┼──────────────────────────────┘ │ │ │ │ │ 调度调用 │ │ │ │ ▼ │ │ │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ │ │ Tools (原子能力与手脚) │ │ │ │ │ │ │ │ │ │ │ │ - SearchAPI - SQL Executor - Calculator - Bash │ │ │ │ │ └─────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────────┘一、 核心概念深度剖析1.1 Tools工具智能体的“数字手脚与感知器官”核心定义Tools工具是大模型与外部数字世界交互的标准化原子接口Atomic Interface。大模型本身被禁锢在自身的参数空间内只具备文本概率预测能力既无法感知当前现实世界无实时网络连接也无法对物理/数字环境产生副作用Side Effects如写入数据库、发送邮件。Tools 就是为 LLM 接入外部世界的 API、函数、SDK 或检索系统。运行机制Function Calling现代大模型与 Tools 的交互完全基于Function Calling函数调用规范1. 开发者在请求中提交【工具描述协议】(JSON Schema) │ ▼ 2. LLM 理解用户意图生成结构化调用参数tool_calls: { name: get_weather, args: { city: Beijing } } │ ▼ 3. 宿主程序执行真实代码获取结果result {temp: 24°C, condition: Sunny} │ ▼ 4. 宿主将执行结果包装为 role: tool 重新投递给 LLM │ ▼ 5. LLM 基于真实数据生成最终自然语言答案Tools 的四大核心特征原子性Atomicity一个工具通常只专注于解决一个单一明确的任务如execute_sql、send_email、calculate_tax保持低耦合。确定性Determinism给定相同的输入参数工具应给出确定的执行结果或明确的状态码成功/失败。无状态性Statelessness工具本身一般不维护多轮交互的会话状态状态由外部环境或调度器维护。自描述性Self-Describing工具必须附带高质量的 Docstring 和 JSON Schema 参数说明大模型依赖这些描述来决定“何时调用”以及“如何传参”。1.2 Workflow工作流硬编码的“确定性流水线与铁轨”核心定义Workflow工作流是由人类开发者预先设计、固化好的确定性执行图Graph / DAG。在 Workflow 中任务被拆解为一系列离散的步骤Nodes节点之间的流转关系Edges、分支条件Conditionals、循环与汇聚逻辑在代码编写或可视化拖拽时就已经完全确定。[用户输入] ──► [节点 A: LLM 提取实体] ──► [分支判断: 类型是否合法?] ├─ 是 ──► [节点 B: 写入 MySQL] ──► [结束] └─ 否 ──► [节点 C: 发送报警邮件] ──► [结束]运行机制状态机驱动State Machine / DAGWorkflow 的调度器本质上是一个状态机State Machine。大模型在 Workflow 中通常仅作为“节点内部的执行计算单元”例如充当信息抽取器、文本翻译器或分类打标器大模型不能改变整个工作流的走向与拓扑结构。Workflow 的四大核心特征控制权在系统System-Driven执行流的主导权在代码逻辑和预设规则中而非由大模型动态决定。高确定性与可复现性High Determinism相同的输入路径必定触发相同的执行链路结果高度可控几乎没有死循环风险。低延迟与低成本Optimized Latency Cost省去了大模型反复思考“下一步该干什么”的开销可以并行执行独立分支。易调试与可观测性Debuggability每个节点的输入输出、耗时均可被完美追踪如 LangSmith、OpenTelemetry 链路追踪。1.3 Agent智能体具备自主反思与动态规划的“决策大脑”核心定义Agent智能体是一种以大语言模型为核心决策引擎具备自主感知Perception、长期与短期记忆Memory、动态规划Planning与工具调用Action能力的自主闭环系统。与 Workflow 的“铁轨式前进”不同Agent 的执行路径在运行前是未知的。面对一个复杂目标Agent 会像人类一样边做、边看、边调整策略。┌──────────────────────────┐ │ Goal: 修复 PR #402 │ └────────────┬─────────────┘ │ ▼ ┌──────────────────────────────────────────────┐ │ Agent 内部认知循环 │ │ │ │ 1. Thought: 我需要先搜索报错日志文件 │ │ 2. Action : grep_logs(keywordNullPtr) │ │ 3. Observe: 发现 NPE 发生在 UserService │ │ 4. Thought: 原因是未做非空检查需看源码 │ │ 5. Action : read_file(UserService.java) │ │ 6. Observe: 查看源码第 45 行... │ │ 7. Thought: 已定位 Bug执行修改并跑测试 │ │ 8. Action : run_pytest() │ │ 9. Observe: Tests Passed: 100% │ │ 10. Final : Bug 已修复提交 Commit │ └──────────────────────────────────────────────┘运行机制ReAct 循环Reasoning ActingAgent 最经典的认知模式是ReAct 范式。在每一轮循环中模型都会依次执行Think思考分析当前状态反思上一步的结果评估距离目标还有多远。Act行动从可用工具箱Tools Pool中挑选一个最合适的工具并生成调用参数。Observe观察接收工具的执行结果将其追加到上下文历史中进入下一轮迭代。Agent 的四大核心特征控制权在模型Model-Driven大模型主导执行流自主决定何时调用工具、调用几次、何时终止任务。动态规划与自适应Adaptive Planning当遇到未预料到的错误如工具报错 404时Agent 能够自主反思并尝试替代方案。探索性与开放性Exploratory擅长处理解空间巨大、难以穷举规则的开放式任务如自主数据分析、软件工程、深网调研。非确定性与概率风险Probabilistic Risky每次运行轨迹可能不同存在陷入死循环、产生逻辑幻觉或过度消耗 Token 的风险。二、 核心维度全景对比Workflow vs Agent vs Tools为了让三者的边界与差异一目了然下表从十个核心工程维度进行了深度对比评估维度Tools工具Workflow工作流Agent智能体核心隐喻数字手脚 / 螺丝刀生产流水线 / 预设铁轨自主决策者 / 工程师控制流主导权无被动调用硬编码系统System-Driven大模型Model-Driven执行路径确定性极高输入确定则输出确定极高拓扑图预先锁定低动态涌现与概率分支大模型扮演角色无纯代码或独立系统节点级执行单元算子全局指挥官与中枢大脑规划能力无静态人工预设动态多步推演与自反思错误自愈与恢复抛出异常由调用方处理依赖预设的 Fallback 分支规则自主阅读报错并动态调整策略单次任务延迟极低毫秒级低至中等路径最短化高多轮推理与工具往返秒级至分钟级Token 消耗成本0工具本身无消耗较低且相对固定高且动态不确定长上下文累加可测试性与可调试性极易单元测试覆盖极易全链路追踪与回放较难非确定性重现困难最擅长业务场景数据库读写、数学运算、API 请求流程审批、文档标准化清洗、固定业务报表复杂 Bug 修复、开放式市场调研、多轮交互探索2.1 自主性光谱The Autonomy Spectrum在实际工程世界中软件并不是非此即彼的“纯 Workflow”或“纯 Agent”。吴恩达Andrew Ng曾提出软件系统处于一个自主性连续谱系Autonomy Spectrum上【纯确定性代码】 ➔ 【带 LLM 节点的 Workflow】 ➔ 【路由式工作流】 ➔ 【受限 Agent】 ➔ 【全自主 Agent】 (传统 Java/Go) (固定的 ETL / 抽取) (LLM 做条件分支) (ReAct 限制步数) (AutoGPT / OpenDevin) ◄── 确定性高 / 成本可控 / 适合严谨业务 自主性高 / 适应力强 / 适合探索任务 ──►Level 1: 纯规则工作流传统微服务编排如 Temporal、Camunda完全无 AI 参与。Level 2: LLM 增强型工作流固定 DAG 图部分节点使用 LLM 进行润色、抽取、翻译如大多数 Dify 应用。Level 3: 路由型工作流Router Pattern由 LLM 充当分流路由器判断用户意图后走入分支 A 或分支 B。Level 4: 受控动态智能体Constrained AgentLLM 可以在预设工具箱内循环调用但设置了最大步数Max Iterations、预算硬顶Token Budget以及人工介入确认Human-in-the-loop。Level 5: 完全自主多智能体Fully Autonomous Multi-Agent多角色自主分工、自我迭代、自我生成代码并运行如 MetaGPT、ChatDev。三、 三者的协同与复合架构设计Architecture Patterns在生产环境中最强大的架构往往不是纯粹的 Agent也不是单一的 Workflow而是三者的有机融合。3.1 模式一Workflow-as-a-Tool工作流作为复合工具当 Agent 需要执行一项包含严谨业务规则的操作时例如“为客户办理退款并修改账单”直接让 Agent 一步步调底层原子 API 极其危险可能漏掉退款审批或扣税规则。解法将包含复杂业务约束的流程封装为一个确定性的 Workflow然后将这个 Workflow 作为整体打包成一个 Tool暴露给 Agent。[Agent 大脑] ──判断满足退款条件──► 调用 Tool: execute_refund_workflow │ ▼ ┌───────────────────────────────────────┐ │ Refund Workflow (确定性严格执行) │ │ │ │ 1. 验证风控 ➔ 2. 扣除余额 ➔ 3. 记账 │ └───────────────────────────────────────┘优点Agent 负责模糊的自然语言理解与意图识别Workflow 负责严格的事务一致性与业务逻辑合规。3.2 模式二Agent-in-Workflow工作流中的智能体算子在庞大的企业级业务流程如“年度行业研究报告生成流”中大部分环节是固定的数据拉取 ➔ 格式排版 ➔ 导出 PDF但中间某个环节具有高度不确定性如“深入互联网寻找某未上市公司核心竞品”。解法在 Workflow 的特定节点中嵌入一个局部的 Agent为其设定独立的上下文与工具集。该 Agent 跑完后将结构化结果吐回主 Workflow。[Node 1: 收集用户需求] ──► [Node 2: 数据预处理] │ ▼ ┌──────────────────────────────────────────────────┐ │ Node 3: Deep Research Agent (子智能体自主探索) │ │ │ │ 自主搜索网页 ➔ 抓取内容 ➔ 交叉验证 ➔ 提炼报告 │ └─────────────────────────┬────────────────────────┘ │ ▼ [Node 4: 审核合规性] ◄── [Node 5: 渲染导出 PDF 报表]优点既保持了全局主干业务流程的高可控性又在局部释放了 AI 的创造性与探索能力。3.3 模式三Supervisor Multi-Agent Workflow监督者多智能体架构在复杂软件开发任务中单一 Agent 的上下文容易膨胀失控。我们可以采用监督者工作流模式Supervisor Pattern┌────────────────────────┐ │ Supervisor (总指挥) │ └───────────┬────────────┘ │ ┌───────────────────────┼───────────────────────┐ │ 派发任务 │ 派发任务 │ 派发任务 ▼ ▼ ▼ ┌────────────────────┐ ┌────────────────────┐ ┌────────────────────┐ │ Coder Agent │ │ Tester Agent │ │ Reviewer Agent │ │ (专属代码编写工具)│ │ (专属沙箱运行工具)│ │ (专属静态代码扫描)│ └────────────────────┘ └────────────────────┘ └────────────────────┘架构特点Supervisor 负责维护全局状态机依据预设的协作流向各个专精领域的子 Agent 分发任务并汇总状态每个子 Agent 仅持有解决特定问题所需的最小 Tools 集合。四、 生产级 Python 代码实战为了让三者的概念具象化本节通过纯 Python 代码从零实现Tools 封装➔确定性 Workflow➔自主 ReAct Agent➔Agent-in-Workflow 复合应用。4.1 Tools工具实现与 Schema 描述import json from typing import Dict, Any, Callable # 1. 定义原子工具的具体执行逻辑 def calculate_salary(base_salary: float, tax_rate: float, bonus: float) - str: 计算员工税后净收入 tax base_salary * tax_rate net_income base_salary - tax bonus result { base_salary: base_salary, tax_deducted: round(tax, 2), bonus: bonus, net_income: round(net_income, 2) } return json.dumps(result, ensure_asciiFalse) def query_user_db(user_name: str) - str: 模拟根据姓名查询员工基本信息的数据库工具 mock_db { 张三: {base_salary: 20000.0, tax_rate: 0.15, bonus: 5000.0, department: 研发部}, 李四: {base_salary: 15000.0, tax_rate: 0.10, bonus: 3000.0, department: 市场部} } info mock_db.get(user_name, None) if info: return json.dumps({status: success, data: info}, ensure_asciiFalse) return json.dumps({status: error, message: f未找到员工: {user_name}}, ensure_asciiFalse) # 2. 为大模型构建标准化 JSON Schema 工具元数据 TOOLS_SCHEMA [ { type: function, function: { name: query_user_db, description: 根据员工姓名查询其薪资基数、税率及绩效奖金信息, parameters: { type: object, properties: { user_name: {type: string, description: 员工姓名如张三} }, required: [user_name] } } }, { type: function, function: { name: calculate_salary, description: 根据基本薪资、税率和奖金精确计算员工税后收入, parameters: { type: object, properties: { base_salary: {type: number, description: 基本工资}, tax_rate: {type: number, description: 税率如 0.15}, bonus: {type: number, description: 奖金金额} }, required: [base_salary, tax_rate, bonus] } } } ] # 工具执行映射路由表 TOOL_ROUTER: Dict[str, Callable] { query_user_db: query_user_db, calculate_salary: calculate_salary }4.2 Workflow确定性工作流实现下面的代码展示了一个完全由代码逻辑控制状态流转的“员工薪资结算工作流”from typing import Dict, Any class SalarySettlementWorkflow: 确定性的薪资结算工作流 (DAG 结构) def __init__(self, tool_router: Dict[str, Callable]): self.tools tool_router def run(self, user_name: str) - Dict[str, Any]: print(f\n[Workflow 启动] 开始执行员工【{user_name}】的标准化薪资结算流程...) # 步骤 1: 确定性调用数据查询工具 (Node 1) print( ▶ 节点 1: 正在从数据库拉取员工基础档案...) raw_user_data self.tools[query_user_db](user_nameuser_name) user_info json.loads(raw_user_data) # 步骤 2: 严格分支校验逻辑 (Node 2) if user_info.get(status) ! success: print(f ❌ 流程中断: {user_info.get(message)}) return {status: FAILED, reason: user_info.get(message)} data user_info[data] print(f ✔ 节点 1 完成: 获取到员工基本数据: {data}) # 步骤 3: 确定性结算计算 (Node 3) print( ▶ 节点 2: 执行财务税金与实发工资精确核算...) calc_res self.tools[calculate_salary]( base_salarydata[base_salary], tax_ratedata[tax_rate], bonusdata[bonus] ) final_finance json.loads(calc_res) print(f ✔ 节点 2 完成: 财务结算结果: {final_finance}) # 步骤 4: 结果输出组装 (Node 4) return { status: SUCCESS, employee: user_name, department: data[department], payroll_details: final_finance }4.3 Agent自主 ReAct 智能体实现接下来实现一个由大模型驱动的 ReAct Agent。面对开放式用户提问Agent 自主规划要调用哪些工具、何时结束任务import os from openai import OpenAI class ReActAgent: 由 LLM 驱动的自主决策 Agent def __init__(self, tool_router: Dict[str, Callable], tools_schema: list, model_name: str gpt-4o-mini): self.client OpenAI( api_keyos.getenv(OPENAI_API_KEY, your-key-here), base_urlos.getenv(OPENAI_BASE_URL, https://api.openai.com/v1) ) self.tools tool_router self.tools_schema tools_schema self.model_name model_name def execute(self, user_goal: str, max_iterations: int 5) - str: print(f\n[Agent 启动] 收到探索任务: {user_goal}) messages [ {role: system, content: 你是一个严谨且具备自主推理能力的财务与人事助手。你可以按需调用工具获取数据并解决问题。}, {role: user, content: user_goal} ] for step in range(1, max_iterations 1): print(f\n--- [Agent 思考迭代 Cycle {step}] ---) # LLM 感知环境并决策是直接回答还是调用工具 response self.client.chat.completions.create( modelself.model_name, messagesmessages, toolsself.tools_schema, tool_choiceauto ) response_msg response.choices[0].message messages.append(response_msg) # 判断是否有工具调用动作 (Action) if response_msg.tool_calls: for tool_call in response_msg.tool_calls: func_name tool_call.function.name func_args json.loads(tool_call.function.arguments) print(f Agent 决定采取行动 (Action): 调用工具【{func_name}】) print(f 参数: {func_args}) # 执行真实工具调用 if func_name in self.tools: tool_result self.tools[func_name](**func_args) else: tool_result fError: 未知工具 {func_name} print(f 观察环境反馈 (Observation): {tool_result}) # 将观察结果喂回模型上下文 messages.append({ tool_call_id: tool_call.id, role: tool, name: func_name, content: tool_result }) else: # 模型判定无需调用工具已得出最终答案 print( Agent 判定已达成目标输出最终解答。) return response_msg.content return Agent 达到最大迭代步数限制未能完全完成任务。4.4 复合架构实战Agent-in-Workflow 协同运行def main(): # 1. 运行纯 Workflow 演示 workflow SalarySettlementWorkflow(TOOL_ROUTER) wf_result workflow.run(user_name张三) print(f\n[Workflow 最终结果]\n{json.dumps(wf_result, indent2, ensure_asciiFalse)}) # 2. 运行自主 Agent 演示处理模糊开放式任务 # 说明Agent 会自主决定【先查张三再算张三】-【再查李四再算李四】-【最后计算对比差异】 agent ReActAgent(TOOL_ROUTER, TOOLS_SCHEMA) complex_query 请帮我查一下张三和李四谁的税后实发工资更高高出多少元 # 注意需要配置好真实的 OPENAI_API_KEY if os.getenv(OPENAI_API_KEY): final_answer agent.execute(complex_query) print(f\n[Agent 最终回答]\n{final_answer}) else: print(\n[提示] 未检测到环境变量 OPENAI_API_KEY跳过 Agent 实际调用演练。) if __name__ __main__: main()五、 生产落地选型指南与工程避坑在真实的企业架构设计中许多团队容易犯两个极端的错误“过度 Agent 狂热症”与“固守硬编码保守症”。【业务需求评估】 │ ┌─────────────────────┴─────────────────────┐ ▼ ▼ 【路径固定 / 强合规约束】 【开放探索 / 路径不确定】 (如财务结算、标准审计、工单流转) (如开放调研、代码排障、智能客服) │ │ ▼ ▼ 选用 【Workflow】 选用 【Agent】 │ │ └─────────────────────┬─────────────────────┘ │ ▼ 【是否需要与外部系统交互】 │ ▼ 是 配置标准 【Tools】5.1 生产选型决策法则原则一能用 Workflow 搞定的坚决不用纯 Agent如果业务场景的步骤清晰可枚举如“上传简历 ➔ 提取字段 ➔ 匹配岗位 ➔ 发通知”应该无脑选择 Workflow。引入 Agent 只会增加随机失败率、拉长响应时间并耗费数倍的 Token 成本。原则二把严密的领域业务逻辑沉淀在 Tools / Workflow 中不要让 Agent 去计算复利或生成复杂的 SQL 事务脚本。应该由后端工程师写好确定性的 Python/Java 工具或子工作流由 Agent 负责根据自然语言意图调用该工具。原则三为所有自主 Agent 设立“护栏Guardrails”最大步数限制Max Steps防止因死循环或网络错误消耗巨量 Token。危险动作确认Human-in-the-Loop当 Agent 打算执行DROP TABLE、send_money或对外发送邮件时强制中断并等待人工在 Web 界面点选“批准”。六、 总结与未来演进Tools工具是能力的载体为大模型扩展了与外部世界交互的物理能力是构建一切高阶应用不可或缺的原子基石。Workflow工作流是确定性的轨道由人类主导控制流以 DAG 和状态机为核心保障了企业级业务的严谨性、低延迟与高可控性。Agent智能体是自适应的大脑由大模型主导控制流以感知-规划-行动为闭环释放了复杂开放场景下的动态探索与自愈能力。在通往更高阶的 AI 系统演化道路上“确定性工作流负责兜底与业务边界自主智能体负责局部探索与复杂破局原子工具负责执行落地”将是长期存在且最具工程性价比的标准技术范式。
返回列表