好的,大家好。感谢各位的到来。我知道这是今天的最后一个研讨会,非常感谢大家出席。我这次要讲的是“爬山式技能提升”(Hill-Climbing Skills),具体来说,就是如何在不完全依赖模型权重微调的情况下,提升智能体(Agent)的能力。我也在这里放了一个Slido的二维码,如果各位有任何问题可以随时提交,我们可以在最后统一解答。

简单介绍一下我自己:我是Sh,来自Browserbase的销售工程团队。我主要协助客户在生产环境中部署浏览器智能体。不确定在座有多少人了解什么是“浏览器智能体”?请举手示意一下。好的,有一些人知道。那有多少人之前构建或使用过这类工具呢?也请举手。看来也有不少专业人士,太棒了。

在深入探讨“爬山式技能提升”这一概念之前,我想先简要介绍一下什么是浏览器智能体,以便大家清楚我们最后要讨论的内容。同时,我也会展示如何将这些方法应用到各位自己的领域或行业中。

首先快速科普一下什么是浏览器智能体:如果一个智能体的主要工具是驱动网页浏览器,那么它就被称为“浏览器智能体”。在这种情况下,“浏览器”成为了智能体的工具。我们如何控制它呢?通常通过某种命令行界面(CLI)、模型上下文协议(MCP)或其他方法,让智能体能够操控浏览器并执行指令。例如:“嘿,去点击那个红色按钮”、“刷新页面”或“截取这个网站的无障碍树快照”。

这些底层工具赋予智能体控制浏览器的能力。而Browserbase本质上是一个用于构建和运行此类浏览器智能体的平台。我们提供基础设施、软件开发工具包(SDK)、技能库以及配套的CLI,帮助开发者构建这些智能体。接下来,我们将利用所有这些工具来演示“爬山式技能提升”的具体运作方式。

我想谈谈当前智能体面临的最大问题:可靠性。人们对浏览器智能体的挫败感主要源于它们容易卡住、触发反爬虫机制,或者因为懒惰/遗忘而无法完成任务。我们认为,可靠性本质上是一个工程问题。虽然像Opus和Fable等最新模型在发布初期表现非常聪明,但我们发现,提升可靠性的关键在于智能体所获得的工具和技能。这也是我们接下来要重点探讨的方向:如何通过这些手段提升浏览器智能体的可靠性?

我想举几个例子,说明当前这些智能体在哪些方面表现不佳。稍微放大一点画面,大家可以看到这个浏览器智能体正试图访问Google Flights(谷歌航班),它想拖动时间筛选器,但却无法确定如何操作。对于这类智能体来说,“拖拽”是一个棘手的动作,它对此感到极度困惑:既不知道对应的HTML元素是什么,也不清楚背后的JavaScript逻辑。因此,它卡住了,无法完成我的机票预订任务。

另一个例子是OpenTable(餐厅预订平台)。假设我使用“Open Claw”或“Hermes”智能体,想要预订一个约会晚餐。我告诉它:“去OpenTable帮我找一家餐厅。”但结果它会遇到反机器人验证,显示“拒绝访问”。我们不知道具体发生了什么。那么问题来了:我的浏览器智能体能否绕过这些问题?它们是否能变得更可靠,从而成功帮我预订约会餐厅的位子?这是我想要提出的核心问题。

为了解决这个问题,我们需要深入探究根本原因:为什么会发生这种情况?我们拥有像Opus、Gemini等优秀的通用大模型,甚至CodeX和Computer Use等技术也很出色。但是,当面对OpenTable或Google Flights这样需要长时间运行且逻辑复杂的网站时,在生产环境中部署这些模型就变得非常困难。

智能体并不了解针对特定网站的技巧或需要运行的JavaScript代码。更重要的是,每次运行都是从零开始的,智能体的学习过程并没有被内置到运行中。正如Darkh前几天提到的:为什么计算机使用(Computer Use)领域的进展依然如此缓慢?尽管这看起来是一个可验证的问题,但它仍未得到解决。根本原因在于缺乏学习机制:每次智能体运行都是从头开始,没有从生产环境的痕迹中学习。

我将这些浏览器智能体称为“从不学习的天才”。有些人可能会说:“为什么不针对OpenTable或餐厅网站进行微调呢?”但这并不可行。如果你打算构建智能体,就不可能为每一个新出现的任务都进行微调。我们需要一种模式,让智能体能够从生产痕迹中学习并随时间推移不断变强。

大约六个月前,Karpathy提出了“自动研究”(Auto Research)的想法,我们开始思考如何将其应用。这本质上是一个循环过程:针对一个可验证的问题陈述进行尝试,反复迭代,审视自身的运行痕迹并自我改进。我们想知道:如何将这种方法应用到浏览器智能体上?如何应用于这些复杂的工作流和非确定性的网站(它们每天变化,每次触发的反爬机制都不同)?我们如何从中学习呢?

接下来我将切换到一个演示环节,现场展示这一过程。我将从一个提示词开始:“去Google Flights帮我找一张本周六从旧金山到纽约的头等舱机票。我要带一个登机箱,航班时间最好在上午。”好的,输入正确,现在运行它。

这里启动了一个基于浏览器的会话。屏幕中央显示远程浏览器刚刚启动并导航到了Google Flights页面。如果我展开我的智能体视图,可以看到它正在执行一系列操作:这是你可以实时看到的推理痕迹。它正试图应用“头等舱”筛选器,然后它会继续执行任务并返回结果。但我想重点谈谈这里实际发生的事情,以及支撑这个“自动研究循环”的架构。

我们启动了Google航班任务。这里的架构是我们称之为“自动浏览循环”的东西,结合了Auto Research和Browsing功能,我们将其命名为Auto Browse。这个循环本质上是一个双爪Agent SDK架构:一个是执行者代理(Doer Agent),另一个是教师代理(Teacher Agent)。执行者的工作是实际进行浏览操作,它拥有我们之前提到的浏览器CLI访问权限以及浏览器本身。它会点击按钮、查看截图并尝试获取信息;而教师的工作则是观察执行者的操作痕迹,学习哪里做对了、哪里出错了。两者持续协作直到找到收敛的良好解决方案。

我们并不指定需要多少循环次数,也不设定具体的成功率指标,更不限制必须在特定数量的Token或秒数内完成。我们只提供一个宽泛的提示,并拥抱“痛苦的教训”(Bitter Lesson),让执行者和教师自行探索。关键在于存在一个strategy.md文件,它是跨多次运行的产物。每次迭代后,教师会回顾发生的情况、查看截图和日志,然后思考:“哦,你没有点击这个按钮,你应该点那个”,并将这些建议写入strategy.md文件。该产物会延续到下一次迭代并持续改进。

让我们回到演示看看发生了什么。第一次迭代失败了,但从中学到的教训是:跳过整个表单日历小部件,因为直接使用查询参数即可,无需四处点击。代理在此实例中足够聪明地意识到,与其浪费Token和时间去点击那些地方,不如直接使用Google航班的查询参数。这在事后看来显而易见,但作为人类我可能不会想到这一点,也不会自己编写如此复杂的查询参数。这是第一次迭代的成果,随后代理在第二次迭代中继续操作,直到它认为已穷尽所有技巧。

它会尝试各种JavaScript黑客手段,然后总结出可用的技能。我想强调的关键点是:在这个收敛循环结束时,我希望得到的输出是一个skill.md文件。这个技能文件将交付给未来的代理使用,其中包含之前运行中的所有黑客技巧、窍门和学习成果。我们可以看看这种规模可能呈现的样子:例如,“预填充URL是必须的,不要浪费点击和Token去点那些按钮”;“日历存在重新打开的Bug,请勿这样做”。

如果想拖动时间戳元素,请使用JavaScript注入而非鼠标操作。这些技巧将在每次后续运行中得以保留,从而在性能、可靠性和成本方面带来巨大的节省。现在让我们回到之前的运行记录看看是否通过。第二次迭代通过了,你可以看到成本节省了4倍左右(该图表是实时生成的)。起始成本为12美元,第二次降至3美元。请注意,这里的执行者和教师代理均使用Opus 48模型。

第三次迭代刚刚完成,回合数减少,延迟也更好了,但第三次迭代出现了失败。代理似乎过度纠正了一些问题,第四次迭代应该从中吸取教训并观察其表现如何。在它自行操作的同时,我想展示一些之前为本次演示准备的运行记录。例如,我使用Auto Browse访问AI工程师网站,询问哪些讲座和研讨会涉及“爬山算法”(Hill Climbing)。它在多次迭代中完成了任务,你可以看到每次的回放。

这些回放来自Browserbase,对于可观测性视角非常有用且重要。尽管它在所有迭代中都通过了测试,但成本仍提升了7.4倍(从更高降至更低)。现在我想实际看看这些技能中的学习成果是如何积累的。它写道:“直接前往日程页面;如果有错误,不要盲目重试”、“在会话搜索输入框中输入关键词并稍作等待”。因为有时网站加载需要时间,所以可以包含这类技巧。

这些技能中蕴含大量学习成果。我想展示一些有趣的例子,特别是那个“打开表格”的案例,因为我在演示开始时遇到了访问被拒的阻碍。如果我们查看截图,这是第一次迭代时出现的“拒绝访问”问题。让我们看看它是如何从中学习的。它意识到该阻碍是环境性的,因为网站不希望代理执行某些操作。

在第二次迭代中,它发现如果直接使用查询参数并输入经纬度或地铁ID,就能自动获取可用的UI。不要打开被阻止的/r路径,也不要重新加载/s页面,这些是触发封锁的地方。如果不这样做而是遵循此技术,代理就能正常工作。你可以看到成本从6.22美元降至0.51美元,时间从189秒缩短至27秒。

它生成的规模策略包括:构建搜索URL、进行日期计算(如旧金山已知的地铁ID),并遵循特定步骤。永远不要调用/r,因为这会返回访问被拒错误。这些是人类几乎无法做到的学习成果,我们只需拥抱“痛苦的教训”,让代理去工作并发现这些技巧。我还想展示一些改进示例,这个问题之所以让我感同身受,是因为从销售角度来看,我正在部署这些浏览器代理。

将智能体投入生产环境时,只有当浏览器代理成功完成任务,销售才算真正达成。因此,可靠性对我来说是最重要的一点,这也是我带给客户的关键工具。我会告诉客户:“直接启用你们的智能体吧,让它们去执行自动研究任务,这样它们就能在生产环境中取得成功。”人们正在寻找的成功指标包括:在不同任务上成本降低高达 16 倍、12 倍甚至 3 倍。当然,每个任务都不同,瓶颈也各异,因此可能会看到数据的波动。但核心理念是你可以利用这些技术进行“爬山式”优化(逐步提升)。我想回到现场演示,看看是否有任何改进。

好的,我们展示了一个渐进式的技能应用过程,该技能端到端地发挥作用,无需进一步学习。结果显示正确:单程商务舱,从旧金山到纽约,7 月 4 日,含一件随身行李。早上 8 点的航班价格为 649 美元。没错,它能够获取所有这些信息,我可以查看整个回放以确认准确性。它成功解析了整个技能流程,快速路径是将整个查询编码在 URL 中。我强烈建议这样做。

我知道我在展示这些内容,但当我第一次看到结果时,那真是浏览器代理的“神话时刻”。你知道的,就是彻底逆向工程那些东西。我和一些客户一起审视这些结果时,他们感到震惊不已。以前他们会为每个网站编写脚本,抱怨需要花费大量工程时间来逆向这些网站,并询问如何将其扩展到 100 甚至上万个网站。而现在,我们的客户实际上已经构建了这些技能的完整流水线,技能可以动态生成,拉取请求自动创建。

如果生产环境中出现故障,智能体会介入并开始修复该技能。因此,围绕这项技术我们可以做大量的工程工作来加以利用。我还想展示一下我们在浏览.sh 产品上所做的努力。我们心想,如果能为一个网站做到这一点,就能为五个网站做;那为什么不为 500 个网站提供这项服务并免费供任何人使用呢?

如果你还记得,在 90 年代互联网普及之前,你有黄页,里面有联系个人或企业的详细信息。这就是浏览器代理的“黄页”,它包含了在互联网上任何网站执行任何任务的详细指南。我想向大家展示这一点。你可以安装 browse CLI 并免费使用所有这些技能。我们承担了所有的令牌成本,并将这些资源免费提供给大家。

例如,如果我搜索亚马逊上的产品,我可以看到整个规模都在这里。你应该何时使用这些技能?如何查看定价和可用性等信息呢?这里有关于亚马逊的大量详细信息和截图。我只需将这些浏览技能 CLI 给我的 OpenClaw,它就知道何时调用 alltrails.com 的技能,何时调用 weather.gov 的技能。这让我的生活轻松了许多。

我们在后台运行相同的自动研究循环,并将其提供给各位使用。事实上,如果你想的话,你可以访问这里并说:“嘿,为我生成一个技能,用来查找本周旧金山的活动。”你只需执行此操作以生成一个技能,它就会为你完成这项工作。它会给你发送一封电子邮件,然后你可以在你想要的任何智能体中使用该技能。

我们已经为浏览器代理完成了这项工作。我还想谈谈如何将其潜在地应用于其他任何领域。我认为编码智能体是一个让我感到沮丧的地方,因为智能体每次都在重新学习仓库的约定。它没有正确应用代码规范规则,我必须每次都告诉它。也许你可以拥有你的云 MD 和代理 MD 来改进这一点,但基本前提是智能体不应该从零开始重新学习任务。

我在研究代理中也看到了这种情况。我们为内部工作流程运行了许多深度研究代理,但每次它都会挣扎并试图重新学习:“哦,我从维基百科获取了这些信息,但我没有从这个其他网站获取。”我问为什么不能?我们总是使用这个其他网站,你应该从之前的轨迹中学习并提取信息。

在内部运营中,你有所有这些仪表板、数据库和内部工具,但你的智能体不知道哪些有效以及哪些是首选的。理想情况下,你应该应用这种自动研究技术。这需要满足两个条件:首先,你必须拥有某种可重放的环境,以便运行这些循环;其次,你需要某种可验证的结果或可量化的指标来驱动这些循环。是的,我看到一个问题。

我意识到…… 是的。>> 是的。>> 没错。所以我认为问题是:你如何知道自动研究循环是准确的?无论它声称正在收敛,是否真的在收敛?当它说“好”时,实际上好吗?当它说“坏”时,实际上是坏的吗?我如何对智能体所说的话以及循环所做的操作建立信心?我想在这里谈谈可验证的结果。

对于 Karpathy 来说,这相当容易,因为他在训练神经网络时查看实验的对数损失。所以很容易看出你的对数损失是否降低了。但在许多现实世界场景中,情况并非如此,对于浏览器代理更是这样。正如我所解释的,你是否预订了机票可能很简单,但“是否为我找到了最好的航班选项”则有些模糊,且未必是最佳方案。

是的,如果我理解正确的话,你是说循环中的一个错误可能会破坏整个自动研究过程。你如何防止这种情况?实际上,我确实看到某些迭代失败了。例如,如果我们看之前的幻灯片,在取得成功之后也会发生失败。所以并不总是说一旦成功,未来的迭代就一定会一直成功。但我认为关键在于循环的设计,使其能够抵御失败的影响,不过度依赖那些结果,并仍然能够从之前的运行错误中自我纠正和保护。

我想我们正试图防止某种被称为“爆炸性损失”的场景。

我觉得你可以这样做。事实上,Karpathy 曾讨论过这一点,认为这是进行自动研究的一种方式。你甚至可以对“如何进行自动研究”本身的不同方法进行自动化研究。这就好比,教师-执行者循环(teacher-doer loop)真的是最好的方式吗?应该采用多智能体架构来实现这一目标,还是存在其他在神经网络研究任务中比浏览器代理更有效的方案?当然,你可以设计不同的循环结构来避免类似的问题。回到我之前的观点,只要你能获得可验证的结果或某些量化指标,我认为你就能够设计出良好的循环。

有时“可重放的环境”这一话题讨论得不够充分,但它极其重要。之前有人提到 DarkHorse 的观点,认为拥有可验证的结果很重要,但同时也需要极其易于“打磨”(grindable)的环境或用例。如果智能体无法通过失败进行反复试错和迭代,它就很难自我修正并推进多次循环。因此,“编码智能体”就是一个很好的例子,因为你可以从 Docker 镜像或特定的 EC2 实例开始,并从堆栈的不同部分进行重放。

然而,“知识工作”可能不太容易实现重放,因为其中涉及大量的人机交互步骤,使得从特定时间点重新开始变得非常困难。因此,在这些情况下投资于环境建设往往能带来巨大的回报。刚才我想分享一下我今天演示的自动浏览循环(auto browse loop)的相关链接。扫描二维码即可获取该项目的 GitHub 仓库,而第二个二维码则是技能本身的内容。

你只需在 Claude Code 或 CodeEx 中输入 /auto browse,然后说:“嘿,使用 Opus-48 模型分别作为教师和执行者,为我创建一个执行此任务的技能。”我正在看其中一个问题。如果你有任何想法,希望我们将智能体置于某种特定场景中进行测试,欢迎在 Slido 中输入,我们可以现场尝试。让我们看看这个问题:是否有方法优化收敛性?

我认为这与刚才讨论的问题相同。“高成本”这一点很有趣,因为人们可能会认为随着迭代次数增加,长期运行的成本会越来越高。我对此进行了一系列评估实验:将问题交给 Sonnet 模型并运行更长的迭代次数, versus 使用 Opus 模型但减少迭代次数。我认为通过让 Sonnet 进行更多次数的迭代,虽然单次成本较低,但整体完成同一任务的成本可能更低且更具性价比。

此外,这种成本是可以摊薄的(amortized)。我们运行一次自动浏览循环的成本大约在 30 到 40 美元之间,如果情况极其复杂,最多也就 100 美元。只要这些成本在你的生产部署中是合理的,那就尽管使用吧。当然,对于你生成的循环类型进行评估还有很多有趣的事情可以做。是的,我也会分享幻灯片,我可以直接在 GitHub 上提供这些内容。

有人问你是如何将“自动研究”转化为“自动浏览”的?我的思路过程相当直接。我使用了 Karpathy 发布的 GitHub 仓库,并结合了我客户的相关背景信息——这些客户面临各种可靠性问题。我为他们解决这类问题的方式是:深入他们的办公室,与他们并肩工作(forward deployed),通过 brute force 和逆向工程来摸索解决方案。这就是我做的,也就是作为“教师智能体”的角色。

那么问题就是:能否将我在这个过程中自动化?借鉴 Karpathy 的思路构建一个循环,并实现同样的功能。当然,在此基础上进行了大量的迭代和工程化改进以简化流程。这就是转化的过程。有人问能否在代理(proxy)中使用?能否保持登录状态?是的,这又回到了你设计的环境。基于浏览器的基础设施允许智能体登录网站、保存 Cookie 并在后续运行中复用,无需每次重新登录。

这使得复制现实世界的工作流程变得非常简单。当然也可以使用代理服务器。如果你有特定的 IP 地址,例如住宅 IP,也可以将其引入系统。在这些对抗性场景(如验证码和反机器人机制)中,成功的关键很大程度上取决于你的基础设施和环境质量。因此,尽可能优化基础设施绝对是有价值的。

有人问是否有什么想现场演示的内容?是的,这是一个很好的问题。实际上,我也想展示一下代码。如果你查看 GitHub 仓库,可以找到 evaluate.mjs 文件。本质上,它列出了整个循环的流程。回答你的问题:教师和执行者在每次循环中是依次工作的。因此,教师在每一次迭代中寻找学习成果。

如果我在这里展示演示视频——让我们看看刚才完成的那个例子:第一次迭代有这些学习成果,第二次迭代有一些其他的学习成果。例如:“你应该以这种特定格式包含显式的 ISO 日期。”第三次迭代会有其他的学习成果。日期的分辨率仍然打开了空白页面并点击,浪费了三个回合去读取今天的日期或让执行器计算今天的时间。所以它正在弄清楚关于日期的某些信息。

在每一次迭代中,教师都会学习新的内容并将其重新放入 strategy.md 文件中。也许我会通过查看其中一次运行的轨迹来使其更直观。这里是我的所有运行记录。例如,这是“OpenTable 预订”的例子,以及教师每次追加到 strategy.md 中的策略步骤。比如“第零步你应该这样做”等等。这是我给出的任务提示:“帮我找 Big B 大餐厅的预订信息。”

这些是它从中学习的轨迹类型。它会截取屏幕截图,并在每一步记录此类轨迹:浏览、打开页面等,并输出结果。第二步是“浏览快照”。快照本质上获取了无障碍树(accessibility tree),这就是快照内容。它在每一步都在思考什么做对了,什么做错了。是的,这就像机器代码一样,我不会展示全部内容。但这是它在每次迭代中编写的摘要。

还有很多工程上的微调手段,你可以根据自身领域进行适配。阅读这部分内容的最简单方式是访问 skills.sh 网站上的 auto browse 部分,你可以尝试类似的操作。

这是个很好的问题。确实是个好问题。我认为这回到了如何提升代理可靠性的核心问题上。可靠性是一个工程难题。你可以设计你的“控制框架”(harness),为每个任务分配一个专用技能,或者设定为一个万能技能以应对所有可能遇到的情况。我认为这完全取决于你的控制框架工程策略以及具体的使用场景。你可以针对不同的策略运行评估(evals),看看哪种方案最适合你和我们。

没错,这正是控制框架发挥作用的地方。如果控制框架具备智能,能够从 OpenTable、Resi 和 Google Reservations(谷歌预订服务)中引入技能,它就能整合这些信息来找出为你安排约会之夜的最佳方式。这就是你的解决方案:控制框架应该能够判断使用哪些工具来完成任务,这就是我处理这类问题的思路。

你需要找出客户最常见的用例是什么?针对这些用例,最佳的技能文件、提示词和工具组合是怎样的?也许你想为特定用例开发专用工具,或者为所有用例使用通用工具。这就像之前的争论一样:是为每个任务创建一个技能还是为一个万能场景创建?你可以对所有这些策略进行评估,让控制框架自行决定。

是的,这概念非常相似。比如 DSPY 项目……我觉得他们确实抓住了某些很酷的东西。大概三四年前,当他们开始构建 DSPY 等工具时……我们也一直在这一领域进行大量研究。Browserbase 与微软合作,我们实际上发表了一篇关于如何为你的代理构建合适验证器的论文。

我认为运行评估很直接,直到你开始质疑“如何评估我的评估”时才会变得复杂。比如:我需要投入大量人力来验证所有运行结果吗?或者我能在这里构建一个好的自动验证器吗?这些论文的学习成果也被我们应用其中。我可以把这些资料都分享到 GitHub 上,顺便看看这里有没有其他新问题。

这些技能是如何大规模存储和检索的?目前在这个仓库中,所有这些内容都存储在我的云端。每一个都是一个技能文件(skill file)。这是我的“食谱搜索者”。我想做点晚餐,昨天我就说:“嘿,给我弄些菜谱。”目前所有这些都在我本地的技能文件夹中。

但如果你想将其投入生产环境,当然可以将其烘焙到你的代理循环(agent loop)中。或者对于 browse.sh 上公开可用的技能,我们使用 Vercel Blob Storage(对象存储)来存储这些技能并按需调用。希望这能帮到你。

网站经常发生变化,你监测这种情况并保持网站技能更新的策略是什么?是的,这是个极好的问题。这也是我早前提到的:如何保持这些技能的更新,因为网站会发生变化。我们目前的主流理论是,你不想每天浪费 token 去运行自动研究(auto research)。

你可能希望触发它,或者当它在生产环境的某个特定点失败时再运行。我们构建了这样的循环或系统:一旦遇到任何生产故障,我们就运行自动研究循环来查看出错原因以进行修复(heal),创建拉取请求,这直接发送给人类工程师,他们会自动修复。技能随之更新。

因此,确实存在这种“生产故障”触发的概念。但这是一种权衡:你可以运行自动研究,或者每两小时、三小时进行一次样本运行以检查技能是否完美工作。因此,有不同的方式通过定时任务(cron jobs)来检查这些技能的准确性。这实际上是我目前正在与客户一起实施的一件事。

还有所有这些疑问,对吧?人们并不想要 100% 的准确率。人们可能更看重成本低十倍之类的因素。所以这就引出了这个问题:这里的教师代理(teacher agent)标准是什么?在示例中,除了达成目标外,似乎还进行了一些针对步数(turns)的优化。你还使用其他什么标准?

这又回到了自动研究循环的设计上。有一种方式是告诉你的自动研究:“嘿,我只关注成功。”一旦你让我获得成功,我就满意了。但这通常不是每个人想要的。人们希望最小化延迟,因为也许这是一个实时运行场景,你专注于能多快完成任务。

如果这是优化指标,你会关注如何尽可能快地完成它。我有时看到这些自动研究循环非常聪明,它们意识到根本不需要浏览器,于是直接逆向工程出 API 并调用它,这是你能得到的最快速度。

有时是步数的问题:你想最小化上下文循环并减少完成任务所需的步骤数。在我的案例中,我认为是否暂停或收敛由你决定。我不太关心成本,我最关心的是可靠性。所以只要你觉得相关就继续做下去,然后由教师代理决定何时停止。但你也可以尝试所有不同的策略。

如果网站支持 WebMCP,这会使用它吗?WebMCP 太酷了。这本质上是一个让网站可编程的概念。我不知道大家是否都了解这一点,这是最近新发布的 Google Chrome 版本中出现的概念:你告诉你的网站,如果有人想预订座位,他们可以在网站上执行 xyz 操作。这有点像 API,但它是基于浏览器的。

目前我认为我们的自动研究循环不支持这一点。但我认为实现起来并不难。事实上,我们最近在我们推出的 SDK 中发布了 WebMCP(注:此处原文可能指类似 MCP Model Context Protocol 或特定协议)的支持。我们还为网站所有者制作了一些工具……

大规模部署 Web MCPs。嗯,但这确实是个有趣的话题。目前我们尚未看到 Web MCP 的广泛采用。“通过测试”的地面真值(Ground Truth)这一点很有趣。嗯,我认为只要任务完成了就行,例如在 Google Flights 上找到最便宜的航班,或在 OpenTable 上完成预订。它是在自我评估,通常是二元的。嗯,是的,我完全接受“痛苦教训”(Bitter Lesson)。在这些评估中,我不倾向于设置过多的护栏。

你是否考虑过为浏览任务提供“验证器即服务”(Verifier as a Service),包括允许我们模拟某些副作用,比如购买行为?嗯,我可能需要就此追问一下。你所说的“验证器即服务”是什么意思?Ravish 如果你在场的话,是的。嗯,你的意思是……如果我理解正确的话,你拥有不同的环境用于强化学习训练,并且想要模拟如果我在复制 Amazon 时点击购买会发生什么?

不完全是。因为我们更倾向于依赖真实世界的网站。Browserbase 有幸能够访问大多数网络,接触不同的网站并捕获求解器等。所以我们尽可能模仿真实世界。但我们看到很多强化学习环境是在模拟网站,以训练构建擅长浏览 Salesforce 或 SAP 的浏览器代理。我们尽可能在真实世界的门户上做到这一点。(轻笑)

Edge captures(边缘捕获/验证码)对于技能来说容易绕过吗,还是说这是令牌激励?对网站所有者而言,Edge captures 的意义何在?如果我的理解没错,Edge capture 是一种特定类型的捕获。它有点像 Google reCAPTCHA 等验证码。嗯,是的,我可能会单独讨论这一点。我认为我们不能在这里详细讨论我们能解决或不能解决的捕获类型。

但这本身并非一项令牌密集型工作,因为它是在基础设施层完成的事情,对吧?我们真的不需要使用 AI 来解决验证码。它是在 Chrome 二进制层面解决的。我们是开箱即用地做到这一点的。“教师”如何评估“执行者”,以及技能标记何时毕业?是的。所以,它通过阅读这些追踪记录来评估执行者。

每次迭代都会创建一个文件夹,里面有一些 JSON 文件。“教师”读取这些文件,拥有一个带爪子的代理 SDK 循环,并基本上确定从该循环中得出的学习成果。实际上,我认为最后有一张幻灯片在讲这个。是的。这有点像这里的提示词,它说你是一个浏览器自动化代理。

你可以使用这些工具,“strategy.md”会在每次迭代时注入,这就是“教师”评估“执行者”工作的方式。所以,“教师”读取追踪记录,拥有系统提示词和之前的策略,并得出一个更好的策略。(轻笑)太棒了。嗯,我希望我们已经回答了所有问题。现场还有没有其他我们想讨论的问题?有。

是的,它可以与 Stagehand SDK 配合使用。它也可以在您的 Cloud Code(云代码)中工作。嗯,本质上它是一个 Markdown 文件,对吧?我取了一个技能,告诉我的 Clot Code:“你能找到本周五7月3日在 Salesforce 中的事件吗?”然后它就执行了。所以它不一定需要使用 Browserbase,也不一定需要 Stagehand。本质上它是一个技能。它是可以在任何代理或 SDK 中使用的可移植工件。

是的,好的问题。我想如果我理解正确的话,你是想问如何防止提示词注入?因为网站可能会欺骗我的自动研究循环,让它学习一些可能导致生产环境中恶意行为的东西。嗯,我们有几种方法可以做到这一点。首先是在基础设施层本身。我们在浏览器周围有一堆保护措施。

我们有一个 Browserbase 安全模式,你可以控制它访问哪些 URL,以及它可以对不同网站采取何种类型的操作。所以在基础设施层、网络防火墙层面,我们控制着这些事物。现在你可能会说,Amazon.com 有一天可能会被黑客攻击。你如何防止在这些门户上发生恶意行为呢?嗯,我认为

我们也尝试在将生成的技能发布到 browser.sh 之前,让一些安全审查代理之类的东西对它们进行运行测试。这是一种方法。我们鼓励客户建立一定水平的提示词注入护栏,特别是如果他们将此提供给消费者用户的话。例如,我们的一些客户可能想在 Amazon 上自动化一些事情,如果有人在 Amazon 上架带有隐藏指令的商品列表怎么办?你如何防止这类情况发生呢?

这就是我们要与客户合作,在指令甚至到达“硬度”(Hardness/执行层)之前构建适当护栏的地方。嗯,是的,我认为这里有三层防护。第一是在查询甚至进入我们的表面区域时,我们在技能层控制它,确保我们的技能不会被欺骗;在基础设施层,我们有网络限制和行动限制。

你可以做类似 CodeEx 或 PlotCode 做的事情,比如总是允许、仅允许一次或允许任何操作。这是 Browserbase 安全模式开箱即用的功能。我知道,从提示词注入的角度来看,浏览器是一个极其危险的威胁向量,因为它可以访问野生网络上的任何东西。这一点必须认真对待。

太棒了。如果有其他问题,我会再等10秒。这很有趣,我非常享受这个过程,我也很喜欢这些问题的质量。嗯,是的,如果你们中的任何人想扫描二维码,我会把它重新放回屏幕上。好的。

是的,没错。嗯,我想我们之前讨论过这个问题。你可以像我经常使用 Entropic Managed Agents 那样操作。我会在托管代理上运行一个定时任务(cron job),告诉它每天早上9点使用这个技能完成这项工作。如果成功,那就没问题;如果失败,就给我发送通知。这将触发一个修复循环(healing loop)。这样我就可以围绕网站变化、反机器人机制等建立检查与制衡。

我会留在这里。嗯,我还会在整个会议期间待在 Browserbase 的展位上。所以如果你好奇想多聊聊的话,我很乐意奉陪。谢谢。

[音乐]