Agent Cybernetic Philosophy Part 0 —— What and Why

我们为什么需要它,问题是什么?

距离openai发布 Harness engineering 那篇文章已经过去了将近半年,这半年里我看到了不断有关于harness/skill的讨论和文章,研究如何更好的指挥agent。我仍记得去年的这个时候我还在一行一行指导ai去编写代码,或是一个任务一个任务的监控agent完成。而更早之前呢,我一边用着cursor的tab补全,一边在网页上复制粘贴ai给出的代码。未来会有更新更前卫的使用方法吗?谁也预料不到,ai的发展是日新月异的,从这个角度来说,在harness这个词已经被大众普遍所熟知的时间,我再去写一篇教大家如何使用agent的文章似乎已经为时已晚。我自己也这么认为的,所以我没有使用harness这个词。我希望大家明白的是,在”怎么做”这个问题背后还有更深层次的东西,也许这个东西叫”道”,也许这个东西叫方法论,我觉得”道”这个词太故弄玄虚了,所以我更愿意称之为一种哲学。

Agent控制论哲学。

我们希望agent无休止的运行,直到达到我们想要的效果,在这个过程中我们不需要监督,不需要做任何事,只需要最后收获就行了。在我编写本文的今天,anthropic已经推出了fable模型,但是我们仍然不能期望告诉agent我要解决某个复杂问题后,这个问题就被agent解决了。通过一句话就解决复杂问题目前仍然是困难的,因为agent目前仍然不完全掌握解决复杂问题的方法,并且agent永远不会知道我们想要的具体是什么,我们也不可能列一张事无巨细的清单给agent去描述清楚,甚至有些时候我们也不清楚我们自己想要什么。这里面有两个问题,一个是解决问题复杂问题的方法,一个是如何搞清楚我们到底想要什么。表面上看,本文要讨论的是”如何指挥agent做事”,但实际上,本文要讨论的正是这两个问题。

为了指挥agent解决问题,我们开始编写prompt,为agent提供合适的context,为agent编写harness。我们要明确的是,harness工程要解决的问题本质上跟上下文工程要解决的问题没有任何区别,而上下文工程跟prompt工程也没有区别。如果agent具有足够解决目标问题的上下文,那么harness工程就不需要存在,当然上下文工程和prompt工程也是。就像我们问agent 1+1时,我们不需要考虑要喂给agent什么东西。

那么为什么他们有不同的名字?在于他们解决问题的方式实际上是不一样的。prompt工程在于你让模型从什么角度去切入这个问题,或者说怎么问。上下文工程在于让模型在思考这个问题时能暴露给模型哪些信息。而harness工程解决的是,当这个问题过于复杂,解决这个问题需要的信息太多而远远超过模型的上下文时,需要把问题分解成小问题,并且渐进式地暴露用于解决问题的信息给模型,让模型连续处理一个一个小问题,最终解决复杂问题。究其根源,在于agent的上下文是有限的,当然人也是。因此我们可以思考我们是怎么解决复杂问题,我们用了什么方法去解决复杂问题。

对于复杂问题,我们通常会说:可以把它拆解成一个个简单问题,再逐一解决。听起来这似乎只是一个”规划—执行”的过程:先制定计划,再按照计划完成任务。

但现实中的复杂问题往往不是这样。很多时候,我们并不知道问题的全貌,也无法一开始就定义清楚最终目标。我们只是隐约知道自己想要某种结果,却不知道它具体长什么样,也不知道通向它的路径在哪里。于是,解决问题的过程就不再是单纯的规划与执行,而变成了一种半探索、半解决的过程。

我们只能不断尝试:也许沿着这个方向能找到线索,也许做这件事能让目标更接近一点。每一次尝试都会产生新的结果,而这些结果又需要被观察、记录、分析和判断:它是否推进了目标?它暴露了什么新问题?它是否意味着我们需要调整方向?

于是,为了解决原本的问题,我们开始引入新的步骤:需要有人负责拆解问题,需要机制来收集反馈,需要标准来判断进展,需要流程来决定下一步,还需要工具来管理越来越多的信息和决策。最初,这些东西只是为了应对某个局部的不确定性而临时增加的;但随着探索继续,它们会不断累积、连接、相互依赖,最终形成一个新的复杂系统。

也就是说,复杂系统并不是凭空出现的。它是在我们试图解决一个不清晰、不稳定、不断变化的问题时,由一系列临时应对、反馈机制和协调结构逐渐堆叠出来的。结果是,复杂问题还没有被解决,解决复杂问题的系统本身却先变成了新的复杂问题。

那么,问题就发生了一次转移:我们不再只是问”如何解决最初那个复杂问题”,而是必须进一步追问——如何维持这个为了解决问题而生成的复杂系统,使它不至于失控,并且仍然能够指向最初的目标。

换句话说,我们已经不只是站在问题面前,而是走进了由问题催生出来的系统之中。我们来到了密林深处。几十年前,已经有人抵达过这里,并在这片密林中留下了一块路标——《控制论》。

到这里就结束了。诚然本文并没有给出一个”如何更好地使用agent”的确切答案,但是本文完成了一次问题视角的转换。我们不再把复杂问题仅仅理解为一组等待拆解和执行的任务,而是把它理解为一个会不断生成反馈、判断、协调与修正机制的过程。这个过程一旦持续下去,就会形成一个新的系统;而这个系统是否仍然服务于最初的目标,是否能够在不确定性中保持方向,是否会在自我维护中偏离问题本身,才是接下来真正需要讨论的东西。

也就是说,关于 agent 的问题,最终会变成关于控制系统的问题。接下来我们将从控制论开始,继续深入。