前言

最近在关注Agent相关的技术。今天学习了Anthropic的一篇关于构建高效能agent的文章,里面提到了几种不同的agentworkflow的设计模式,感觉很有启发。特此记录一下,方便日后参考。

核心理念:Workflow vs. Agent

在开始构建之前,首先要分清两个核心概念:WorkflowAgent

我们很多人一上来就想构建一个全自动的agent,但Anthropic建议,应该从更简单的workflow开始。

  • Workflow:指的是一系列预定义好的、由代码控制的步骤。它的路径是固定的,擅长处理目标明确、流程固定的任务。你可以把它想象成一条固定的流水线,非常稳定可靠。

  • Agent:则是由大模型(LLM)自己动态决定下一步该做什么,调用什么tool。它更加灵活,适合处理那些无法预知具体步骤的开放式问题。

文章的核心观点是:能用简单的Workflow解决的,就不要轻易上复杂的Agent。因为agent会带来更高的成本和延迟。

常见的Agent Workflow模式

文章总结了几种非常实用的模式,从简单到复杂,可以组合使用。

1. Prompt Chaining (提示链)

这是最基础的模式。把一个任务拆分成几个固定的子任务,然后像链条一样把几个LLM调用串联起来,上一步的输出是下一步的输入。非常适合有固定流程的任务。

2. Routing (路由)

Routing模式是指用一个LLM作为分类器。当用户的请求进来后,这个router agent会先判断这个请求属于哪一类,然后把它分发给下游最适合处理该任务的agenttool或者模型。这就像一个智能客服,能根据你的问题把你转接到正确的部门。

3. Parallelization (并行化)

这个模式有两种常见的玩法:

  • Sectioning (分块):把一个大任务拆分成多个可以独立并行处理的小块,然后交给不同的worker agent同时处理,最后再把结果汇总。人多力量大,可以大大提高效率。
  • Voting (投票):让多个agent用不同的方法去执行同一个任务,然后让一个evaluator agent对这些结果进行评估和投票,选出最好的一个。有点像“三个臭皮匠,顶个诸葛亮”。

4. Orchestrator-Workers (调度者-工作者)

这是一个非常经典的模式。有一个中心agent作为Orchestrator(调度者),它负责理解和拆解一个复杂的任务,然后把子任务动态地分配给多个Worker(工作者)agent去执行。等worker们完成后,orchestrator再负责把结果整合起来。这种模式非常灵活,也是目前很多复杂agent的核心架构。

5. Evaluator-Optimizer (评估者-优化者)

这个模式引入了反馈循环。一个agent先生成一个初步的方案或结果,然后另一个evaluator agent会对这个结果进行评估、打分,并提出改进意见。生成agent再根据这些反馈进行优化,如此循环,直到结果满足要求。这非常适合代码生成、写作等需要反复迭代的任务。

6. Autonomous Agents (自主代理)

这是最复杂,也是最接近我们想象中agent的模式。它在一个循环中自主运行,自己思考、规划、使用tool,然后根据环境反馈调整自己的行为。这种agent适合处理非常开放、没有固定解决方案的问题。但文章也强调,构建这种agent需要极大的信任和充分的测试。

总结

总的来说,Anthropic给我们的建议非常务实:从简单开始,逐步迭代。不要为了agentagent。大多数时候,通过巧妙地组合Prompt ChainingRoutingOrchestrator-Workersworkflow模式,就已经能构建出非常强大的系统了。只有在真正需要处理高度不确定的开放式问题时,才去考虑构建完全的Autonomous Agents


参考文章:https://www.anthropic.com/engineering/building-effective-agents