我们是如何解决智能体构建难题的 — Andrew Qu,Vercel
AAI Engineer
Computing/SoftwareSmall Business/StartupsInternet Technology
Transcript
00:00:00大家好,谢谢大家来参加。我是 Andrew,我是 Vercel 的软件主管,今天来这里
00:00:20和大家聊聊我们在 Vercel 是如何解决智能体构建问题的。我是软件主管,所以我负责
00:00:26负责内部工程、外部实验的结合,以及大致处于
00:00:30技术前沿,构建新的库、框架和技术。对于那些不
00:00:36Vercel 的朋友来说,Vercel 构建的是智能体基础设施,好让大家能够构建未来的应用。我们起步于
00:00:42网络世界,帮助人们发布网站和网络应用,而不必担心那些
00:00:47对应用本身没有提升的基础设施。它可以轻松扩展到数百万,也可以缩减到
00:00:50零。但我们发现人们想要构建的东西正在发生变化。人们一开始
00:00:56构建网页,但现在我们看到他们想要构建智能体,我们也踏上了类似的
00:01:01旅程,让人们能够更轻松地构建智能体和智能体应用。我们构建了
00:01:08一个叫做 AISCK 的东西,所以你不需要替换 300、400 行特定于提供商的代码,
00:01:13只需替换一行代码即可,并且我们为所有这些不同的提供商提供了相同的底层模型接口。
00:01:19我们还构建了许多其他工具,以便更轻松地实现模型回退、安全的
00:01:25代码执行、在不活动和等待响应时获得更好的定价,以及确保持久性和
00:01:30可恢复性。我今天要和大家分享的是,大约一年前我如何进行了一场疯狂的实验,这引领了
00:01:38Vercel 的智能体大爆发,并促成了我们最近构建的一个非常酷的东西。
00:01:46大约在 1980 年,比尔·盖茨——在我出生之前——曾说过这样一句话:他设想会有这样一台计算机,
00:01:53放在每个桌面上和每个家庭中。你知道,当时这可能非常逆势,而今天看起来
00:01:59实现这一点是再正常不过了。我和 CTO 当时有过这样一个想法,你知道,与其在每个桌面上放一台计算机,我们
00:02:07是否有可能在每个桌面上放置一个智能体呢?你知道,今天我们实际上只将智能体用于编程和技术
00:02:15工作负载,但我们开始看到它们扩展到了设计、产品管理和其他
00:02:20垂直领域。这大概是一年前的事了,所以我可以说我涉足得相当早。但那是当时的情况,
00:02:27比如当时是 Sonnet 4,事情不像今天这么成熟。我尝试实际探索一下,看看我们能
00:02:33做些什么。我走访了 Vercel 的各个职能部门。市场、销售、财务、法务。我问他们,你们最讨厌你们工作的什么地方?
00:02:42我听到的最引人注目的用例来自数据团队。他们正在成长,是一个非常精简的团队,但 Vercel 的发展速度更快。
00:02:50你知道,他们有来自客户、分析、指标、销售的更多数据。他们不得不不断汇总并持续为自己提供可用数据。
00:03:02而在这个时候,如果你想想数据科学人员必须做的事情,每当市场或销售部门的人对
00:03:11客户或产品有疑问时,数据科学团队就必须放下手头的一切工作,编写查询、处理它、做分析,并带着一些
00:03:19关于该怎么做的建议回来。这真的非常扼杀生产力。你知道,数据团队并不想放下一切整天只写查询。所以我与我们的数据副总裁合作,试图建立一种更好的方式来做...
00:03:31试图为他们以这种方式运作建立一种更好的方式。因此,如果你考虑一下如果你想尝试使用人工智能来解决问题时,你所做的第一件事,
00:03:40你可能只会构建一个巨大的超级提示词。你知道,你只有一个问题,你把它传给大语言模型,让它回应,仅此而已。说实话,第一版看起来确实是这样的。
00:03:52我向他们要了一份 Snowflake 模式的转储。我把它粘贴到一个包含问题的系统提示词中。然后当它生成 SQL 时,我实际上
00:04:01将其复制并粘贴,然后自己运行它。你知道,我只是想看看现在的模型是否足够好,能够在给定一些像样的
00:04:09结构的情况下编写有效的 SQL。我想说这给我们带来了一点信心,你知道,今天的模型虽然没那么好,但也许我们可以进行工程调优,或者让它周围的上下文更好一点,并给它更多的护栏以便更好地运作。
00:04:21所以,如果你真正思考数据科学家在接到问题时实际上需要做什么,你知道,他们必须处理问题。
00:04:28他们可能必须探索语义层,并实际弄清楚连接模式是什么。他们会亲自去执行 SQL。
00:04:35如果 SQL 没有执行或者成本太高,他们可能会回去再次这样做。他们最终会对此进行报告,包括可视化
00:04:42数据,写一些段落,也许做个复盘,也许做点别的事情。所以,如果你考虑这些不同的阶段,我和数据副总裁
00:04:50坐在一起,试图将这些映射到特定的智能体工作负载中。因此,这个数据科学智能体
00:04:57的第二版被称为 D0,我从现在开始将引用 D0,就是当你问一个问题时,我们有一个查询智能体,它将查询传递给
00:05:05规划智能体,规划智能体随后会有一个执行智能体,等等。如果你把所有这些串联在一起,你实际上会得到
00:05:11这样一个东西:每个智能体都有一个非常专用的系统提示词,专注于它的功能,并配有专门针对该功能的工具。
00:05:20所以这里有个例子,你可以看到对于第一个,规划智能体拥有读取实体 YAML 和搜索模式的工具。因此它只会使用这些
00:05:31功能,直到得出答案传递给规划智能体,然后传给 SQL 智能体,再传给报告。这正在变得更好。
00:05:38你知道,我们摆脱了复制和粘贴 SQL 并且不得不回来报告的困境。
00:05:44它现在实际上在做从问题到答案的端到端循环。但我们开始遇到这种架构的一些墙壁。
00:05:54大约在这个时候,我们得出了这样的结论:你知道,你真正需要的是
00:06:01一个包含所有超级上下文的智能体,并让它自己管理自己的记忆。你知道,这大约是在
00:06:07我们意识到你实际上希望智能体能够回顾它所做的事情,进行反思,并
00:06:13弄清楚到达这里的步骤。使用之前的模型,你可能已经注意到,下一个智能体得到的唯一东西
00:06:19是前一个完成的事项的摘要和小代码片段。现在,通过这种方式,你可以
00:06:25想象你有一个超级智能体,它在内部管理自己的状态。在某些时候它在规划,
00:06:30在某些时候它在构建,在某些时候它在执行,在某些时候它在报告。这差不多就是它
00:06:36看起来的样子。你知道,你有一个大的 AI 调用,最大步骤可能是 100,你赋予它根据其执行历程中的位置来管理自己状态的能力。
00:06:43所以你可以看到它类似于工具有哪些,你可以看到类似的形状。但其中最好的部分是,如果它在执行或
00:06:48连接时遇到错误,它可以返回并探索更多,或者它可以去阅读更多并找出它做错了什么。
00:06:54此时它非常出色。我们对手头的实际系统相当有信心,并且我们实际上
00:07:00把它传播给了我们自己的一些受信任成员。你知道,这是一个非常强大的工具,我们真的不想把它交到
00:07:06错误的人手中,或者交给处理非常关键工作负载的人。所以我们把它交到了一些人的手里,而直接的
00:07:11反应是它太糟糕了。你知道,我们以为我们在搞懂了。我们以为这,你知道,达到了我们评估标准的 30%。
00:07:17但我们无法预料到会被问到的一些问题。对于我们来说,花更多时间
00:07:23手动映射其中一些场景,这似乎不是一个非常可扩展的方法。
00:07:28然后 Claude Code 和 Opus 4.5 出来了,或者更准确地说是 Opus 4.5 出来了,它与 Claude Code 结合是如此强大。
00:07:33你知道,它们有点解锁了文件系统智能体的概念。我们私下里觉得,哇,相比我们以前拥有的,Claude Code 和 Opus 4.5 简直就是 AGI。
00:07:44你知道,与我们手工种植的智能体相比,它甚至不需要费力就能回答我们的大部分问题。
00:07:56当我们退一步想知道我们哪里做错了以及为什么这个好得多时,我们意识到最大的解锁是它只是一个文件系统。
00:08:04你知道,我们——它有一组极少量的工具,列出文件、读取文件、运行 bash,为了我们自己的数据智能体用例,我们在里边多加了一些。
00:08:13但最重要的事情是,它能够使用智能体受过良好训练的工具,并能够在需要的地方进行探索和编写工作。
00:08:24你知道,我们没有给它——Claude Code 没有给它一套非常规范的工具。
00:08:32它有点像只是放任它狂野地探索涌现行为。
00:08:37因此,从中我们了解到,你实际上可以只使用文件系统。
00:08:41你知道,我们看到了来自 Claude Code 的经验教训,以及鉴于它只是在本地执行,它是多么强大。
00:08:44我们试图以一种非常类似 Claude Code 的方式重建它。
00:08:50你知道,它现在将在沙盒中运行。
00:08:54该沙盒会将整个语义层转储到其中。
00:08:57你可以——智能体将能够到处抓取、bash、读取文件、写入文件,以弄清楚它需要什么。
00:09:00我们只需在上面点缀几个工具,以确保它能够做所有 Vercel 特定的事情。
00:09:05这实际上是有史以来最大的解锁。
00:09:10你知道,从单一智能体到 Claude Code SDK 的飞跃,然后从 Claude Code SDK 到一般的文件系统智能体(针对我们的用例进行了微调或专门构建),是一个惊人的飞跃。
00:09:14你知道的,从单代理到 Claude Code SDK,再从 Claude Code SDK 到针对我们用例进行微调或量身定制的通用文件系统代理,这种跨越真的是一次惊人的飞跃。
00:09:27到了这个时候,我们开始准备把它分享给 Vercel 的更多人。
00:09:31我写了这个——这基本上就是它的样子。
00:09:36非常简单。
00:09:39你只需给它一个 bash 工具。
00:09:40我们在 NPM 上有一个不错的辅助工具叫 bash tool。
00:09:41你可以把它附加到一个沙盒上。
00:09:44你可以将文件附加到沙盒上供其读取、写入和执行。
00:09:45在这次启示之后,在我看到我们通过了之前无法完成的许多问题之后,我写了这篇超赞的博客文章。
00:09:50它今天实际上还在。
00:09:59在我写这篇文章的那周,它占了我们 Vercel.com 流量的 70%。
00:10:00所以你知道它非常火爆。
00:10:05在那之后,合乎逻辑的下一步就是我们想要弄清楚我们拥有的常见用例。
00:10:07所以到那时,我们已经基本上在整个 Vercel 放手让它运行了。
00:10:14我们每天收到来自人们的数千个查询,他们想要各种东西,从客户指标、销售指标、数字指标到 NPM 下载量。
00:10:18当时我们每天收到成千上万条查询,大家想要各种数据,从客户指标、销售指标、数字指标到 NPM 下载量应有尽有。
00:10:27结果发现,许多这类查询在形态上其实是相似的。
00:10:30你知道的,聚合操作的方法也就那么几种。
00:10:33查询账单信息的方法就那么多。
00:10:35因此,我们实际上有一个循环作业,它获取最近的查询并试图将它们提炼成一项技能。
00:10:37现在,我们大约有 100 种技能,它们混合了各种聚合,一直到查找关于某些人的特定数据。
00:10:43我们发现这非常有效。
00:10:50我们发现这非常有效。
00:10:52因为如果你想想每个新的智能体运行,它基本上都是从零开始的。
00:10:56你知道,除了语义层和系统提示词之外,真的没有预先建立的上下文。
00:11:01但有了技能(skill),它从一开始就带有大量已经整理好的上下文知识。
00:11:09大致就是这个样子。
00:11:11它和之前那个非常相似。
00:11:12但引入 skills 文件夹实际上非常强大。
00:11:15我们还在 Vercel 构建了一个名为 Skills SH 的工具。
00:11:18这是寻找智能体技能并亲自运行它们最热门的方式。
00:11:22我之所以说这些,是因为这段历程你们大多数人可能偶尔也会经历。
00:11:28即从简单的事情开始,逐渐增加复杂性,最终打造出一个能够部署到生产环境的系统。
00:11:34我告诉你们这些是因为,在构建这个智能体的每一步中,Vercel 都有人对智能体充满好奇。
00:11:42他们尝试从我的 D0 智能体分叉并构建自己的智能体。
00:11:46在每一步中,我们总能找到更好、以往未知的方法来做某事。
00:11:50于是我们在想,如果现在的人们可以直接从最后的洞察开始,而不必每次都从简单的提示词或从头摸索基本原理开始,会怎么样呢?
00:12:04因此我们萌生了一个想法:如果我们为智能体构建一个 Next.js 呢?
00:12:09对于不了解的人,Next.js 是 Vercel 构建的一个热门 Web 框架,它创造了通过文件系统框架来定义基础设施的概念。
00:12:18你不需要担心文件该放在哪里。
00:12:20你只需要按照正确的规范编写文件即可。
00:12:23它就会自动声明它们应该去往何处。
00:12:26你的页面会进入 CDN。
00:12:27你的无服务器函数会去到那里。
00:12:29你的缓存则在中间处理。
00:12:31我们觉得,构建智能体也应该这么简单。
00:12:34你只需要创建一个 skills 文件夹、一个 tools 文件夹、一个 channels 文件夹。
00:12:38并且你可以非常轻松地声明它们。
00:12:40框架应该知道如何准确地用它们组装出一个智能体。
00:12:44这就是为什么我们在两周前发布了 Eve。
00:12:47Eve 是一个类似智能体界的 Next.js 的框架,从一个示例模板开始,就能非常轻松地拥有一个完全就绪的智能体,并且能够添加你自己的自定义知识、自定义工具,
00:12:59甚至将其集成到你熟悉的频道中。
00:13:03这就是我们认为的智能体大致的模样。
00:13:06你知道,智能体拥有运行时以及各种频道。
00:13:09在这个运行时中,你需要持久性。
00:13:11你会希望在隔离的环境中运行任务。
00:13:13你会想要调用不同的模型。
00:13:15并且你会希望拥有各种连接。
00:13:17我们在构建它时就铭记着开源。
00:13:19你知道,我们构建 Eve 是为了让你能够接入自己的开源适配器,用于 Postgres、OpenAI 的 responses API、Docker 以及其他连接器。
00:13:29但我们也让它在 Vercel 上的部署变得极其简单。
00:13:31你在这里看到的唯一不同之处在于,这里的一切都在使用我们多年来构建的 Vercel 产品,以简化这些体验的构建。
00:13:39用于持久性的 Vercel Workflows、用于安全执行的 Sandbox,以及我们刚发布不久的 Vercel Connect,旨在简化生成用于连接的短期 OADC 令牌的过程。
00:13:51在构建 Eve 的过程中,我们实际上用 Eve 重写了整个 D0 智能体。
00:13:55抛开代码背后那些你看不见的复杂结构,它的文件系统大致就是这个样子。
00:14:01非常简单。
00:14:02你拥有一些系统指令、几个技能、几个工具,就能非常轻松地将它们组合成一个真正的智能体。
00:14:09而且迭代起来非常容易。
00:14:11在两周前我们在伦敦的活动上正式发布之前,我们实际上已经把它交给了少数几位测试客户。
00:14:17与我们紧密合作的一家公司 Aura,他们重建了他们的智能体,有点像一个微型爪子(mini-claw),用来测试人们的服务。
00:14:26它会访问网站、安装它们、并尝试使用它们。
00:14:29与使用现成的云代码相比,他们通过从头使用 Eve 构建自己的智能体,取得了令人难以置信的成功。
00:14:38更少的步骤,更高的成功率,以及更好的洞察。
00:14:42当你将 Eve 部署到 Vercel 时,你可以开箱即用获得可观测性。
00:14:49你可以在这里看到,你获得了所有的智能体运行记录、所有的工具调用、它采取的每一步,以及一些预估成本和你可以采取的潜在优化方案。
00:15:00你今天就可以访问 Eve.dev 开始使用。
00:15:02你只需克隆它,即可启动一个模板、轻松部署,如果需要的话还可以自托管。
00:15:07我之所以提起这个,是因为我希望未来会有越来越多针对特定业务用例的智能体。
00:15:14你知道,在我们构建 D-Zero 之前,我们实际上对业界许多资金充足、做这些垂直智能体的初创公司进行了压力测试。
00:15:23它们致力于接管你的 Snowflake 实例,让它们的智能体能够针对其运行 Snowflake 查询。
00:15:30但我们发现,真正让这个智能体变得优秀的,是它拥有大量非常具体的公司内部知识。
00:15:38就像 Vercel 是一家网络公司,我们有很多客户拥有网站和网络资产。
00:15:45这更深入地涉及到你应该在什么时候查询什么,以及哪些内容链接到什么。
00:15:51所以很多现成的智能体,它们很棒,也值得尝试,但我认为如果你真的想榨取最大价值,
00:15:58你真应该尝试构建自己的智能体,并尽可能加入属于你公司的特定知识。
00:16:03今天,你知道的,我们在 Vercel 拥有大约 20 个达到产品市场契合度(PMF)的智能体,涵盖了从弄清该联系谁的市场回顾,
00:16:14到法务看到新谈判时的合同首次红线修改,一直到协助数据查询的数据科学智能体。
00:16:24这表明我们 Vercel 已经深度融入了智能体。
00:16:28你知道,所有这些东西实际上为我们节省了大量时间。
00:16:32数据团队从未如此高效过。
00:16:34他们有更多时间去提高 Snowflake 的性能,添加以前缺失的新数据源,
00:16:40去填补他们以前因为忙着写查询而没有时间填补的空白。
00:16:46我认为,无论对于大型、小型还是中型公司,现在比以往任何时候都更容易自动化掉一些你不想做的事情,
00:16:55或者花太多时间去做的事情。
00:16:58你知道,我认为许多人力资源、财务、销售工作都可以通过智能体在某种程度上实现自动化,而且我认为 Eve 是当今构建此类智能体的最佳方式。
00:17:09这些是我的社交账号。
00:17:11谢谢大家的光临和聆听。
00:17:13我是 Andrew,如果想在外面聊天,我随时奉陪。
Community Posts
No posts yet. Be the first to write about this video!
Write about this video