问题与目标
模型能够调用工具,并不意味着所有应用都应该做成 Agent。固定摘要链、确定性的审批流程和开放式任务执行需要不同控制方式。如果把本来可以写成 if/else 的规则交给模型,系统只会更贵、更慢、更难复现。
本篇区分 Chain、Workflow 和 Agent,建立 Agent 的目标、状态、工具、观察、决策与执行循环。完成标准是能够根据需求选择最简单的实现,并明确程序必须掌握的停止与安全边界。
核心概念

三种组织方式
- Chain:步骤和顺序固定,例如 Prompt → 模型 → 解析器。
- Workflow:存在分支、并行、重试或审批,但路由规则主要由代码决定。
- Agent:模型根据目标、当前状态和观察结果动态决定下一步工具或结束回答。
Agent 的基本循环可以写成:
目标 → 读取状态 → 决策 → 调用工具 → 获得观察 → 更新状态
↑ ↓
└──── 未完成则继续 ──────┘
模型负责语义决策,程序仍负责工具白名单、权限、参数校验、执行、步骤上限和副作用确认。Agent 不是拥有无限权限的自动化脚本。
什么时候不需要 Agent
满足以下任一条件时优先使用 Chain 或 Workflow:
- 步骤固定且业务规则可以明确表达;
- 操作涉及高风险副作用,且无需模型动态选择;
- 对结果、延迟和成本要求严格可预测;
- 输入类型少,普通分类器或规则已经足够;
- 没有能够验证任务完成与否的方法。
可运行实现
下面用同一个“检查设备并给出动作”需求对比 Workflow 与 Agent。示例完全离线:
DEVICES = {
"AX-3": {"online": False, "temperature": 38.2},
"AX-8": {"online": True, "temperature": 76.5},
}
def fixed_workflow(device_id: str) -> str:
device = DEVICES[device_id]
if not device["online"]:
return "通知值班人员检查网络"
if device["temperature"] >= 70:
return "创建温度复核任务"
return "无需处理"
def agent_loop(goal: str, decide, max_steps: int = 3) -> dict:
state = {"goal": goal, "observations": [], "steps": []}
for _ in range(max_steps):
action = decide(state)
state["steps"].append(action)
if action["name"] == "finish":
return {**state, "status": "completed", "answer": action["answer"]}
if action["name"] == "get_device":
result = DEVICES.get(action["device_id"], {"error": "not_found"})
else:
result = {"error": "tool_not_allowed"}
state["observations"].append(result)
return {**state, "status": "step_limit", "answer": None}
def demo_decide(state: dict) -> dict:
if not state["observations"]:
return {"name": "get_device", "device_id": "AX-8"}
device = state["observations"][-1]
return {"name": "finish", "answer": f"当前温度 {device['temperature']}℃,需要复核。"}
print(fixed_workflow("AX-8"))
print(agent_loop("检查 AX-8 是否需要处理", demo_decide))
固定 Workflow 更适合这条简单规则;Agent 示例的意义是展示“决策—观察—再决策”的接口,而不是证明它优于业务规则。
常见问题与排查
只要有工具就叫 Agent
单次 Function Calling 仍可能是固定链路。检查模型是否会根据观察动态决定下一步,以及是否存在循环和状态更新。
把业务状态等同于聊天记录
消息只是状态的一部分。任务 ID、已执行工具、审批结果、重试次数和资源版本应使用结构化字段保存。
Agent 输出“完成”就结束
程序应验证实际完成条件,例如工单是否存在、查询是否成功、引用是否有效。模型的自我声明不能替代验收。
为开放任务提供全部工具
根据用户权限与任务阶段动态暴露最小工具集。工具越多,选择难度、误调用和上下文成本越高。
小结
Agent 的必要条件不是“模型很聪明”,而是任务下一步确实需要动态决策。能用确定性 Chain 或 Workflow 解决时应保持简单;需要 Agent 时,也要由程序控制权限、状态、停止和验收。
许可协议:CC BY-NC 4.0
更新于 1 小时前
觉得文章有帮助?点个赞吧!
0 条评论


