对于复杂的工作流程而言,agent系统往往需要一些设计模式,Planning 是其中很重要的一种。Planning 由规划agent高度自主的决定执行复杂任务所需的各种工具调用、任务执行,无需提前进行硬编码。这个点比较典型的例子是Claude Code 的plan模式,在具体任务执行前会先进行计划,当同意该计划后才开始执行,对于该计划可以进行必要的调整。
对于Planning模式下,各个agent之间的交互,需要进行规范化的输出,一般来说,有3种格式比较常用到:Json、xml 和代码。结构化输出的重要性在近期有所凸显,各个LLM纷纷将结构化输出作为api调用输出的默认支持选项。以Json格式约定LLM的规划输出时,通常来说,LLM 会返回一个 JSON 列表,列表中的每个对象代表一个步骤,包含清晰的键值:description (步骤描述)、tool (要调用的工具名称)、arguments (传递给工具的参数)。
xml 与json所起到的作用类似。但就LLM来说,code 是其更能发挥潜力的地方。Planning with code execution 往往效果更好。有多篇论文的研究结果表明:让LLM直接编写代码的任务评估分数通常明显大于编写JSON而后解析。
但是需要注意,在处理这种CodeAgent时,提示词需要进行明确的要求:以python代码返回结果,以<code>标签进行分隔,考虑沙箱执行环境等安全因素。
单个agent属于单兵作战,多个agent 数据集团作战,能更大程度的发挥LLM的能力。将复杂任务分解成多个独立的角色或进程是一种更有效的开发方法,这是多agent充分发挥的战场。在这里,任务拆分的颗粒度和耦合度是考验功力的地方,高水平的拆分能更好的发挥LLM的能力,避免其短板。在拆分时需要充分考虑单个agent的专注度、各个节点间的复用和模块化。
多个agent之间的处理模式,有线性、双层、多层和去中心 4种。基本的工作流,线性就能够满足需要。对于涉及到Planning的地方,双层、去中心 往往会涉及到。多层因为其较高的复杂度,效果不一定好,目前在实践中用到的并不到。

不同的agent框架,主要使用的模式也不尽相同。longchain 主要使用线性,smolagents更青睐于双层/多层结构,而metagpt、camelai则致力于做去中心结构。