当你赋予智能体最大自由时会发生什么
训练胜过提示。每一次都是。
我们给我们的智能体提供了一个 Python 工具和一个浏览器。浏览器崩溃了。智能体检查了运行时对象,找到了失效的浏览器实例,并编写 Python 代码来重启它。没有人告诉它这样做。没有人会想到要启用它。
当你不再预测模型会做什么,而是开始观察它实际做了什么时,就会发生这种情况。
训练胜过提示。每一次都是。
我们已经运行了数万次智能体会话。我们学到的最重要的一点是:当你的提示说一件事,而模型的训练说另一件事时,训练会赢。
Python 持久性。我们让每次 Python 调用都是无状态的。在系统提示中告诉了模型。它仍然引用了之前调用的变量。每一次都是。因为它在训练期间看到的每个 Python REPL 都有持久状态。
顺序循环。系统提示说:使用 Promise.all 进行并行获取。智能体仍然在 249 个国家的 for 循环中运行 requests.get()。因为 99% 的 Python 代码看起来就是这样。
通过 Python 使用 Slack。智能体的工具列表中有一个 Slack 集成工具。它忽略了它。而是编写原始的 requests.post()。因为 Stack Overflow 就是这样教它的。
提示是一种建议。训练是引力。
那么什么才是真正有效的?
如果你无法通过提示来摆脱训练先验,你会怎么做?
你使用唯一被深度训练过的东西:错误 → 修复。
我们在提示中告诉智能体“不要使用顺序循环”。被忽略了。我们添加了一个运行时 AST 检查,捕获基于循环的获取并返回错误:"Sequential network calls in loop detected. Use Promise.all for parallel fetching." 智能体立即改写代码,使用并行获取。每一次都是。
为什么这有效?因为每个编码模型在训练期间都见过数百万次错误→修复循环。你不再与训练分布对抗。你在利用它。
原则:不要通过指令来阻止行为。让模型尝试,在运行时捕获它,并返回一个清晰的错误。它已经知道如何处理错误。
自由揭示意图
但这里有个转折:并非每个意外行为都应该被捕获。其中一些是模型在告诉你它需要什么。
file:// URL。智能体在磁盘上构建一个文件,然后尝试通过浏览器中的 file:///workspace/output.html 打开它。被阻止了。尝试了 10 种变通方法。这看起来像是一个 bug。但智能体正试图以可视化方式验证自己的输出。这实际上是聪明的。正确的回应不是更严厉地阻止它——而是让它变得安全。
浏览器自愈。智能体检查一个失效的运行时对象并尝试重启它。这不是一种失败模式。这是自主恢复。启用它。
原始 API 调用而非集成。智能体编写 requests.post() 而不是使用 Slack 工具。它在伸手去拿它所知道的东西。也许你的工具接口不如它在训练期间看到的原始 API 那么清晰。
方法:在沙箱中给予最大自由。观察模型伸手去拿什么。然后决定:捕获还是启用。围绕观察到的行为构建框架,而不是围绕假设的行为。
你假设得越少,它就越有效
构建 Browser Use 的最大收获之一是:简洁非常重要。模型足够聪明,可以重新规划。
几个稳健的运行时防护加上模型智能,总是胜过精心设计的提示工程或复杂的启发式系统。不要假设模型会做什么。观察它做什么。然后给它一个合适的框架。