Workflow、Agent、Tools 这三个的概念和区别介绍一下?

#RAG#Agent#面试八股

Workflow、Agent、Tools 这三个的概念和区别介绍一下?

三个词经常被混着用,其实分属不同层次:Tools 是能力,Workflow 是编排方式,Agent 是另一种编排方式。 Tools 回答"能做什么",Workflow 和 Agent 回答"谁来决定下一步做什么"。把这条线捋清,选型问题就自然有答案了。

1. 结论:Tools 是零件,Workflow 和 Agent 是两种装配方式

  • 工具(Tool):一个带明确输入输出的函数,可能是查库、发 HTTP、跑 SQL,本身没有智能;
  • 工作流(Workflow):由代码预先定义好的执行路径(顺序、分支、并行、循环),每一步走哪条路由开发者决定;
  • 智能体(Agent):由模型在运行时决定下一步调用哪个工具、传什么参数、何时停止,路由由模型决定。

所以 Tools 与另外两者不是并列关系,而是被它们调用的底座。真正的对比只有一句:控制流写在代码里,还是交给模型。

2. 机制:控制权是一条连续光谱

代码控制 ◀──────────────────────────────────────────▶ 模型控制

 固定链      路由/分支      Workflow 内嵌 Agent      ReAct Agent     多 Agent
 (prompt    (规则或分类     (节点内自主,节点间      (循环内全程          (互相委派
  串联)      模型选分支)      固定)                  自主决策)           与协商)

 可预测性高、成本低                                    灵活、成本高、调试难

现实项目几乎都落在这条光谱中间,而不是两端。常见的"混合"形态是:外层用 Workflow 保证主干流程可控,把需要探索的节点换成 Agent。

3. 对比表

维度ToolsWorkflowAgent
本质能力接口编排(静态控制流)编排(动态控制流)
谁决定下一步不涉及开发者写死的代码模型在运行时决定
可预测性高高,路径可枚举低,路径随输入变化
调试难度低,单函数中,按节点看日志高,要看整条轨迹
成本/延迟单次调用开销步骤数固定,可估算与步数成正比,波动大
适合任务任何原子能力流程稳定、要求可审计路径说不清、需临场判断
典型失败参数校验缺失分支覆盖不全死循环、选错工具、跑偏

4. 同一个任务,两种写法

需求:查订单状态,异常时查物流,最后生成回复。

Workflow 写法——路径确定,出错可回放:

def handle(order_id: str, user: str) -> str:
    order = query_order(order_id)              # 步骤 1,固定
    if order is None:
        return "订单不存在,请核对单号"
    if order["status"] in ("SHIPPED", "DELAYED"):
        logistics = query_logistics(order["tracking_no"])   # 步骤 2,条件触发
    else:
        logistics = None
    return compose_reply(user, order, logistics)            # 步骤 3,固定

Agent 写法——把三个工具暴露给模型,路由交给它:

TOOLS = {
    "query_order": query_order,
    "query_logistics": query_logistics,
    "compose_reply": compose_reply,
}

def handle(order_id: str, user: str) -> str:
    messages = [{"role": "user", "content": f"用户 {user} 询问订单 {order_id},请查清后回复"}]
    for _ in range(6):                                    # 步数上限仍然是代码写的
        resp = llm(messages, tools=TOOLS)
        if not resp.tool_calls:
            return resp.content
        for call in resp.tool_calls:                       # 可能一次想调多个
            result = TOOLS[call.name](**call.args)
            messages.append(tool_result(call.id, result))
    return "查询超时,请稍后再试"

两段代码干的活一样,但成本和风险差一个量级:左边每次 3 次调用、路径可枚举;右边步数不定,且可能连续三次查同一个订单。流程能写死的时候,写死就是最优解。

5. 常见追问

问:是不是 Workflow 就低端、Agent 就先进? 不是。生产系统里 Workflow 占比远高于 Agent,因为可审计、可回滚、成本可预估。Agent 适合"长尾输入、路径多变"的场景,比如开放式排障、非结构化资料处理。

问:怎么从 Workflow 渐进迁到 Agent? 三步:先把节点函数抽成标准工具(统一 schema、统一错误格式);再把其中一个"最难写分支"的节点替换成子 Agent;最后观察 trace,确认稳定性后再扩大自主范围。不要一次全换。

问:Workflow 里能放 Agent 吗?反之呢? 都能。前者是主流做法(固定主干 + 自主节点);后者叫"Agent 调用工作流",把一段稳定流程包装成一个工具给模型用,能显著降低 Agent 的决策负担。

问:Tools 设计得好不好,怎么判断? 看模型能不能只读描述就知道什么时候用、参数填什么。指标上可以直接测工具选择准确率和参数正确率,两个都低于 95% 就别急着扩工具集。

小结

Tools 提供能力,Workflow 用代码编排,Agent 用模型编排。选型的分界线是"下一步是否可预知":可预知就用 Workflow,不可预知才让模型接管,并且一定要在模型之外补上步数上限、工具契约和 trace。实际系统往往是两者的混合体,讲清这条光谱比背定义更能体现工程判断。

笔记加载中…