📱

Get Our Mobile App

Take your business learning on the go!

Download on the App StoreGet it on Google Play

How to Manage Multiple Agents Like a Top 1% Engineer | Stanford University, Mihail Eric

EO14:20

Transcription

出现了一种新的工程师,我称之为“AI 原生工程师”,而 AI 就是那种语言。AI 就是那种新语言。这一代初级开发人员、初级工程师、刚刚进入职场的人,我认为将是这种新转变的第一代。

一个开发者可以成为代理的管理者。增加更多的代理并不总是能创造出更好的系统。事实上,如果只是放任它们自生自灭,它们会让系统变得更糟。所以,真正知道如何妥善处理多个代理,就像游戏中的最终 Boss。如果你能做得非常好,那么你就像是用户中的顶尖 1%。

我是 Mihel。我在旧金山一家早期创业公司领导 AI 部门。我还在斯坦福大学教授一门课程。这门课程的名称是“现代软件开发者”。这绝对是第一门将重点放在整个 SDLC(软件开发生命周期)中的 AI 的课程。课程宣布并开放报名后,在几个小时内就吸引了超过 100 名学生试图报名。

初级软件工程师怎么了?

围绕着一些令人难以置信的事情正在发生的软件开发,存在着巨大的动力,而 AI 正在真正地渗透到软件开发方式的每一个角落。显然有些东西正在改变。我听到了一些相当令人担忧的轶事,我曾与一位刚从伯克利毕业的人交谈,他说他申请了大约一千个职位,却只收到了两个职位的回复。甚至没有得到面试机会,也没有通过招聘流程,只是收到了回复。所以,对于许多初级工程师来说,获得这些职位非常困难。

这确实是生态系统,尤其是软件生态系统中的一个有趣时期,基本上有三件事汇聚在一起,形成了一种“完美风暴”。

第一件事发生在 2021 年左右,在疫情之后,出现了招聘热潮。许多公司觉得需要增加员工数量,然后我认为很多公司意识到他们过度招聘了。所以出现了大规模的裁员,所有这些公司都雇佣了大量人员,但后来意识到他们可以将员工数量减少 20%、30%,而且仍然可以接受。

这与 CS(计算机科学)课程的增长相结合,在过去 10 到 15 年里,全国和国际上的 CS 专业人数都得到了极大的增长。当我毕业时,毕业生数量是某个数字,而我认为从那时起,每年毕业的 CS 学生人数翻了一番,甚至可能翻了三倍。因此,你拥有大量被裁员的人。

你拥有这批新的、压倒性的新一代工程师。他们想要工作。

第三件事我认为促成了这一切的是 AI 的流行,对吧?人们开始真正关注 AI。因此,对于许多雇主来说,他们开始考虑:我是否需要雇佣更多人来填补我的空缺,还是可以只雇佣更少的人,他们可能是 AI 原生的,这样就可以满足我可能有的就业配额。

因此,这一代初级开发者、初级工程师,现在进入职场的人,我认为将是这种新转变的第一代,对吧?他们既要有扎实的基础知识,又要懂得如何完全成为 AI 原生。

顶尖 1% 的 AI 原生工程师如何编排代理?

其核心在于,我认为 AI 原生工程师既拥有扎实的传统编程、系统设计和算法思维基础,又非常擅长使用生成式工作流程。我总是教他们“分步构建”。你知道,Claude 的 Boris 说他一次处理 10 个代理,所以我也应该一次处理 10 个代理。这是一种错误的观念,你不应该强调。

再次,我会一步一步地构建。我会说,“我非常擅长一次处理一个代理的工作流程,并且可以用一个代理构建一个复杂的软件,但然后我知道我必须做另一件事,这可能是一个小的改动。”

将你的任务视为孤立的,并且可以由第二个或第三个代理自信地完成。因此,你添加了一个第二个代理来修复 Logo,然后你会想,“这个代理正在修复 Logo。另一个代理也许也可以更新网站标题上的文案。”同样,这是一个孤立的改动,与第二个代理所做的事情无关。

因此,我会这样考虑:迭代地为代理添加更多工作。确保你首先理解需要做什么,然后知道这些工作项之间的界限在哪里。然后,当你对一个代理如何做事感到满意时,再添加第二个。然后,如果第二个代理做得很好,你感到自信,就添加第三个,你知道吗?所以,我会一步一步地构建,而不是一次处理 10 个代理。

我认为第二件非常非常重要的事情是知道如何“上下文切换”。

实际上,你所做的是你启动了这些“实习生”。基本上,它们是非常渴望、精明的实习生,这些代理,它们在做事情,然后你只是在终端或 IDE 中观察它们,你只是看到它们在工作,它们在贡献代码,代码被写在某个地方,但有时它们会卡住,对吧?你如何从一个代理切换到另一个代理,并理解,“这个代理正在处理这个特定的任务,代理二正在处理另一个任务,代理三正在处理另一个任务”,然后你不断地来回切换。即使是人类,这也很难做到,对吧?要记住最后一件事情在做什么,但仍然有足够的上下文来有意义地推进该任务。因此,我认为这种切换是实现多代理工作流程真正有效的核心技能之一。

我所描述的基本上就是什么是一个好的管理者,一个好的人类管理者。这与代理无关。如果你能很好地完成这项任务,那么你也会成为一个非常好的、你将成为一个优秀的人类管理者。我见过最擅长做这件事的人,也是那些曾经管理过人类或人类开发者,并学会了如何进行上下文切换,然后将类似原则应用于代理的人。

存在一个我称之为“代理友好代码库”或“代理友好开发生态系统”的概念。我的意思是,如果一个代理被释放到你的代码库中,它会知道代码库中发生了什么吗?当你释放一个代理去在你的代码库的上下文中进行构建时,你如何确保它们不会破坏东西,并且它们所贡献的内容会起作用,就是它们针对你的测试进行测试,而测试基本上是定义软件正确性的契约。你需要定义这些契约。如果你没有足够的测试覆盖率,那么你的软件就没有契约。代理只能在明确定义的软件契约上运行。

任何在行业中工作过的开发者都知道,README 文件几乎会立即过时,无法反映代码中的实际情况。因此,你会有这两种对同一事物的描述。代码说一件事,但 README 说的是完全不同的事。如果你的代码存在这种情况,那么代理会阅读 README,也许还会阅读代码,然后它们会问,“哪种解释是正确的?我应该遵循 README 的说法,还是代码库的说法?”所以,确保它们是一致的,对吧?这是一件简单的事情。

当你遇到意大利面条代码时,通常是因为一个代理可能已经进行了多次迭代,也许是多个功能,然后它开始有点失控了。它们非常擅长的一件事是,代理可以非常迅速地累积错误。如果一个代理在代码中有一个误解,然后它看到了在第一步中产生的误解,它可以加倍努力,在第二步中产生另一个错误,它会放大它。

最重要的事情是确保代理看到的第一件事是完全健壮的,并且在设计、测试、构建方面都是完全天衣无缝的,就像代码库本身的许多核心部分一样,在你甚至考虑代理之前。所以,再次强调,确保代理看到的第一个版本的代码是自我一致的,确保它经过充分测试,确保你有 linting 和风格检查,这样你就知道你的代码库格式是一致的。所有这些事情都将确保你的代理始终遵守你已经定义好的代码库规则。

最后一点,我只是想举另一个代理友好、代理优先代码库的例子,你是否在代码中坚持设计模式?我的意思是,如果你的代码库的一部分在创建某种类型的对象时,你使用了一个 API,而代码库的另一部分,你也创建了相同的对象,但你使用了不同的 API。当代理现在需要在你的代码库中开发时,它应该使用哪一个?你应该使用 API 1 还是 API 2?如果人们有一个代理选择了错误的 API,嗯,人类也会感到困惑。如果我走进你的代码库,看到两种不同的做法,我也会问自己,“我应该做一种还是两种?我不知道。我看到了两种。我可能会问队友,“嘿,我们实际上应该使用哪一个?”我认为一致的设计模式和编程模式也是我见过的最好的代理友好代码库所使用的东西。

功能性软件与卓越软件

定义功能性软件与卓越软件的几个方面。一种答案就是品味,什么是好的软件品味?真的有些人有品味,有些人没有品味,或者只是有些人花更多时间来培养品味。

当我看着我的班级里的学生时,我们有一些要求,比如你必须构建五个不同的流程。你可以创建这些流程,但如果你想挑战自己,就去做奖励任务,你知道,奖励和额外的学分。我认为区别就在于当有人说,“我知道我已经在这个任务上达到了 100%”,或者“获得了大部分作业或项目的学分”,但我真的想,我投资于构建最复杂的东西,因为我想解决问题,而不仅仅是为了分数,对吧?但是品味的培养发生在“最后一英里”,你花费额外的精力去扩展功能,使其更健壮,使应用程序能够实现更多功能。你知道,我认为做得最好的学生,就是那些现在围绕他们的项目建立初创公司的人,因为他们看到了其中的价值,并且他们正在继续前进。你知道,课程结束了,但他们还在继续做同样的事情,因为他们认为还有更多可以构建的东西。我认为这就是顶尖工程师的思维方式。

实验是成为 AI 原生软件开发者的游戏规则。一个想到的例子是 Boris 来自 Cloud Code 来演讲的时候。像 Boris 这样的人,即使是像 Anthropic 的 Claude 这样构建如此惊人软件的团队,他们基本上每周或每两周就用 Claude 重写 Claude,对吧?所以他们一直在用他们构建的软件重写自己的软件。因此,他们自己也在不断摸索,他们正在构建他们的系统,但他们正在进行实验,并根据用户的反馈不断迭代,即使他们似乎掌握了所有答案,他们也没有,你知道,他们自己也在发现什么有效,什么无效。因此,更重要的事情是将实验融入你自己的工作流程。我试图向学生们强调的是,“看,我可以来这里,我可以给你建议,我可以告诉你应该尝试这个工具,这是我认为这个工具好的地方,但归根结底,你必须自己去摸索一下。你必须能够进行实验。你必须能够看到什么对你有效,什么对你无效,并真正将其融入到新的软件开发方式中,实验、黑客攻击,并将其作为你工作流程的一部分。”

为什么世界仍然需要初级软件工程师?

高级开发人员历史上往往对 AI 工具有些抵触,因为他们已经习惯了自己的做事方式,他们已经开发了 20 年,他们会想,“哦,做这件事的唯一方法就是我做的那样。我使用它们。”

高级开发人员有时会是最固执的,但对于第一次进入这个行业的人来说,他们就像海绵一样。对他们来说,一切皆有可能。他们第一次学习东西。因此,世界上、社会、行业和垂直领域的所有困难,他们还没有。他们还没有内化这一点。他们还没有被医疗保健的难度所“伤害”。他们只是看到,“哦,我看到了一个问题。我不知道。为什么我不去尝试解决它呢?”所以,年轻人有一种很好的天真,这对于创业公司创始人来说是完美的。他们将足够勇敢地去解决问题。在这些情况下,他们最终成为了采用每个人都在要求的技能集的人。

即使人们担心就业变得越来越困难,我认为第一次学习这些技能的人最终会变得最灵活,并且在使用这些技能方面会变得最快。所以,我实际上认为他们仍然可以在高级开发人员无法做到的方面取得成功。

从根本上说,你用软件教授的是如何通过数字手段来构建一个复杂系统,以及如何使用算法来解决这个系统。这几乎更像是数学而不是 CS,对吧?这就像你在学习数学技能。我认为这就像教一个人如何思考,因为 CS 职业的很大一部分是分解事物,了解事物如何运作,然后修复它们,然后扩展它们,并不断迭代。因此,我认为那些以开发为职业的人,他们更愿意定制事物。当事物不起作用时,他们更愿意修复它们。他们更愿意说,“嘿,为什么会发生这种情况?让我看看我是否能深入了解一下,你知道,深入了解内部。”而其他人则更像是“系统不起作用。好吧,我猜我需要离开它。”这几乎是一种傲慢。开发者的傲慢看到任何问题,都认为软件是解决方案。这就像一种自信地说,“嘿,我将尝试以我知道如何使用的方式来解决这个问题,我将使用我所知道的工具,让我们看看是否能让它奏效。”我认为这就是 CS 开发人员最强大的属性。

所以,你就说,“Claude,给我做点什么。”“Codeex,给我做点什么。”然后你说,“让我们添加这个其他功能。”然后,“让我们再做一个。”一个月过去了,你已经构建了最漂亮的软件。它被过度设计了,然后你发布了,但没有人想要它。

我叫 Rem Coning。我是哈佛商学院的教授,我研究创业和 AI。我认为我们正处在一个越来越重视你分配智能的能力的世界。AI 原生的关键在于,你不仅仅是使用它来完成工作,你将其嵌入到产品中,这样 AI 就可以直接与客户一起完成工作。你想让你——人类——脱离循环。这是构建 AI 原生组织的秘诀。

当 AI 开始相互交流时会发生什么?当 AI 开始协作时会发生什么?它们需要彼此什么?我认为这是一个非常有趣且开放的问题。这样想有点挑衅。但我想,可能会有一些万亿美元的公司从中诞生。