Tools、Workflow、Agent 三层架构详解:从最小能力单元到编排框架

1. 三者的核心误区

很多人把 Tools、Workflow、Agent 当成三个并列的竞争方案,认为做项目时需要在三者中选一个。这个理解是错的。

三者不是同一维度的东西,而是粒度不同、可以相互嵌套的三层结构。Tools 是最小的能力单元,Agent 是一个完整的决策系统,Workflow 是更上层的编排框架。在实际项目中,三者通常同时存在,扮演不同角色。

三者最核心的区别一句话:Tools 不做决策只执行,Agent 自己做决策,Workflow 是开发者替所有节点把决策提前写好。


2. 第一层:Tools——最小能力单元

2.1 核心定义

Tools 是整个体系里最底层的概念,就是一个封装好的函数,有明确的输入参数、明确的输出结果。

你给 LLM 配备的每一个能力,比如"查天气"“搜索网页”“执行 Python 代码”“往数据库写一条记录”,本质上都是一个函数。

Tools 和普通函数唯一的区别是:需要额外写一份"说明书"告诉 LLM 这个工具叫什么名字、能做什么事、需要传哪些参数,这样 LLM 才知道自己有哪些能力可以调用。

一个工具定义的结构示例:

{
  "name": "search_web",
  "description": "搜索互联网并返回结果",
  "parameters": {
    "type": "object",
    "properties": {
      "query": { "type": "string", "description": "搜索关键词" }
    },
    "required": ["query"]
  }
}

2.2 技术特征

  • 零决策能力:工具本身没有任何决策能力,它甚至不知道自己应该在什么时候被使用
  • 被动等待调用:由外部(Agent 或 Workflow)触发,不会主动执行
  • 高确定性:输入固定则输出固定,行为可预测

2.3 边界与局限

Tools 的使命就是把一个具体能力封装好、随时待命,至于什么时候该用它,那是别人的事。Tools 只负责执行,不负责判断"什么时候该用",需要组合才能完成复杂任务。


3. 第二层:Agent——拿着工具自己做决定

3.1 核心定义

Agent 是一个完整的决策系统,内部用 LLM 做大脑,自己判断什么时候调哪个工具、要不要继续、什么时候结束。

给 Agent 一个目标,比如"调研一下最近竞品的动态",它不会直接给一个答案,而是开始自己思考:第一步应该搜索什么关键词?搜索结果里有没有需要的信息?需不需要多搜几次?什么时候才算调研完了?

这一系列"要不要、用哪个、够不够、停不停"的判断,全部由 Agent 内部的 LLM 做决策。

3.2 运行机制:思考-行动-观察循环

Agent 的运行方式是一个反复循环的过程:

Thought(想清楚)→ Action(行动)→ Observation(看结果)→ 再 Thought → 再 Action → ...

直到 LLM 判断任务完成为止,这个循环才结束。

用 Go 代码表示这个循环:

func RunAgent(task string) string {
    for {
        thought := llm.Think(task, context)        // 思考下一步做什么
        if thought.IsDone {                         // 判断是否完成
            return thought.FinalAnswer
        }
        result := callTool(thought.ToolName, thought.Args) // 执行工具调用
        context.AddObservation(thought.ToolName, result)   // 记录观察结果
    }
}

关键点:这个 for 循环会跑几次,开发者完全不知道,也不需要知道。这正是 Agent 和普通代码最不一样的地方——普通代码的每一步都是开发者预先写好的,但 Agent 的执行路径是 LLM 实时决定的。

3.3 关键特征

  • 主动决策:Agent 自己决定执行路径
  • 灵活性高:能应对预料之外的复杂情况,完成事先无法预测路径的任务
  • 行为不确定:同样的任务,今天跑和明天跑可能调了不同的工具、走了不同的路径。这是因为 LLM 本质上是概率模型,每次生成都带有随机性

灵活性和不确定性是一对孪生兄弟。有 Agent 的灵活,就必然伴随着一定程度的不可预测。

3.4 边界与局限

  • 行为不可预测,线上排查困难
  • 成本不可控:LLM 调用轮次可能超出预期
  • 调试难度大:执行路径不确定,无法打断点逐步追踪

4. 第三层:Workflow——确定性编排框架

4.1 核心定义

Workflow 把整个执行流程的"骨架"写在代码里,LLM、Agent、Tools 都只是这个流程里的"节点",每个节点负责完成自己那一步。但整体走哪条路、下一步去哪里,全由开发者的代码决定,不是任何节点自己说了算。

4.2 技术特征

一个客服系统的 Workflow 示例:

def customer_service(user_input):
    # 第一步:意图分类
    intent = llm.classify(user_input)

    # 第二步:根据意图走不同分支
    if intent == "refund":
        order_info = search_order(user_input)
        result = generate_refund_response(order_info)
    elif intent == "complaint":
        complaint_info = analyze_complaint(user_input)
        result = transfer_human_service(complaint_info)
    else:
        knowledge = search_knowledge_base(user_input)
        result = llm.generate_answer(knowledge)

    return result

关键点:LLM 在这里出现了两次,一次是做意图分类,一次是生成回答,但它只是流程里的两个工位。"接下来去哪"这件事完全由 if/elif 这些普通代码控制。

  • 开发者预先写死执行路径:if/elif/else 控制流程
  • 高确定性:代码看到什么就做什么,不会有"惊喜"
  • 易调试:可以打断点逐步追踪,精确定位是哪个节点出了故障

4.3 与 Agent 的核心区别

谁在做"下一步去哪"的决策?

维度AgentWorkflow
决策者LLM 实时决定开发者代码写死
行为不确定,路径动态变化确定,完全可预测
调试难,执行路径不确定易,链路清晰可追踪

4.4 边界与局限

  • 流程提前写死,难以动态调整
  • 无法穷举所有情况,遇到预料之外输入容易失败或给出很差结果

5. 三者对比总结

维度ToolsAgentWorkflow
决策能力无(只执行,不决策)有(LLM 自主动态决策)无(开发者在代码里写死)
执行方式被动,等待被调用主动,自主循环直到完成按开发者定义的顺序执行
确定性高(输入固定则输出固定)低(同输入可能走不同路径)高(行为完全可预测)
灵活性只做一件事高(能应对预料之外的情况)低(流程提前写死)
调试难度容易(单一函数)难(执行路径不确定)容易(链路清晰,可逐步追踪)
适用场景封装单一具体能力路径未知的复杂任务流程相对固定的业务系统

6. Agentic Workflow:生产环境的主流组合模式

完全靠 Agent 自主决策的系统其实很少在生产环境出现,原因:行为太难控制,一旦出问题很难排查,成本也容易失控(LLM 调太多轮)。

完全靠 Workflow 写死的系统又太脆弱,没法把所有情况都穷举到代码里,遇到预料之外的输入就容易失败。

Agentic Workflow 的核心思想:用 Workflow 固定主流程的骨架,在需要灵活判断的节点嵌入 Agent,其余固定节点直接用 LLM 或 Tools。

Workflow 骨架(确定性)
  ├── 节点 1:固定逻辑(LLM 或 Tools)
  ├── 节点 2:Agent 子模块(自主决策,灵活应对)
  │     ├── 子工具 A
  │     ├── 子工具 B
  │     └── 子工具 C
  ├── 节点 3:固定逻辑(LLM 或 Tools)
  └── 节点 4:结果聚合

骨架是确定的,让你能控制整体行为、便于调试;关键节点是灵活的,让你能应对各种复杂情况。两个优点都有,两个缺点都被削弱了。


7. 总结

Tools、Workflow、Agent 不是三个并列的竞争方案,而是不同粒度的三层结构,在项目中通常同时存在、相互嵌套:

  • Tools 是手,负责执行具体操作,不做决策
  • Agent 是大脑,自主判断用哪个工具、什么时候结束
  • Workflow 是骨架,由开发者预先编排好整体流程

生产环境推荐采用 Agentic Workflow 组合模式:用 Workflow 固定主流程,在需要灵活性的节点嵌入 Agent,实现可控与灵活的平衡。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐