首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >让 AI 自己写代码、自己维护:Skyvern「探索-回放」方法实现自动化爬虫

让 AI 自己写代码、自己维护:Skyvern「探索-回放」方法实现自动化爬虫

作者头像
不二小段
发布2026-04-09 18:52:22
发布2026-04-09 18:52:22
1050
举报
文章被收录于专栏:不二小段不二小段

网页爬虫(Web Scraping)过去一直是软件开发领域的脏活累活。开发者需要编写脚本来模拟用户在浏览器中的操作,例如登录网站、填写表单、点击按钮、抓取数据。但同时,这些脚本往往很脆弱,一旦目标网站的前端代码发生微小变化,比如修改了一个按钮的 ID 或者调整了页面的 DOM 结构,脚本可能就会失效,需要人工进行维护。

随着大语言模型的进步,特别是 AI 编程工具的涌现,让 AI 来写爬虫或者浏览器的自动化脚本,理论上是很简单的问题,而且能一劳永逸地解决脚本的维护难题。

然而,理想很丰满,现实却骨感。

一家名为 Skyvern 的 AI 浏览器自动化公司,在初代版本发布后,收到了大量用户的反馈:

别让 AI Agent 每次都实时决策了,又贵又不稳定。我们只想让 AI 把代码写好,然后我们自己来运行。

这种来自实践的反馈让 Skyvern 意识到,如果 AI 智能体能够将它的「思考过程」编译成可重复执行的代码,那么自动化任务将变得更快、更便宜、也更可靠。

Skyvern 的联合创始人 Suchintan Singh 在最近的一篇文章中分享了他们的探索和发现。

AI 直接生成代码的两个难题

Suchintan 指出,尝试让 AI 直接编写自动化脚本会遇到两大障碍。

1. 需求的模糊性

即便是人类,也很难一次性清晰地定义一个自动化任务的所有细节和边界条件。我们给出的指令往往是模糊的,甚至是具有误导性的。

2. 互联网的混乱

网页的实现千差万别,充满了不规范和不一致。例如,一个看起来是文本输入框的元素,在 DOM 结构里可能是一个伪装的下拉菜单;有些复选框在代码层面总是处于选中状态;搜索框的背后可能只是一个按钮。

为了具体说明这些问题,Suchintan 举了一个真实的例子:在美国特拉华州政府网站(Delaware.gov)为一家新公司注册雇主识别号码(EIN)。

给 AI 的指令(Prompt)非常直接:

你的目标是填写 EIN 注册表。一直填写,直到你看到包含所有信息摘要的表单确认页面。当你看到信息摘要时,目标就完成了。 ein_info: {{ein_info}}

这里的 ein_info 是一个包含公司所有元数据(如实体类型、负责人等)的 JSON 对象。

如果让一个初级的 AI 模型直接根据这个指令生成 Playwright 脚本,可能会得到类似下面的代码:

这段代码看起来能工作,但实际上非常脆弱,几乎立刻就会遇到问题。

首先是「耦合交互」。

有时,网页表单上的选项并非相互独立。比如在下面这个页面,用户需要选择公司的法律结构。

对于人类开发者来说,这组单选按钮显然是互斥的,选择其中一个会影响后续的流程。比如,选择「Corporation」和选择「Partnership」,接下来需要填写的表单字段会完全不同。

一个有经验的开发者会意识到这些选项构成了一个决策树,并编写出带有分支逻辑的代码。但对于 AI 来说,它最初看到的只是一系列独立的按钮。用户输入与可用选项之间的关系,必须在运行时通过与页面的实际交互才能发现。静态生成的脚本一旦遇到预料之外的分支,就会立刻崩溃。

其次是「随机的非确定性故障」。

政府网站经常在夜间或周末进行维护,导致服务不可用。有时,两次访问之间,表单字段的布局会发生变化。甚至在填写过程中,网站可能会突然弹出一个「请稍后再试」的页面。

一个健壮的系统需要优雅地处理这些异常情况。如果我们将每一种边缘情况都硬编码到脚本中,那就又回到了编写脆弱、难以维护的传统脚本的老路。而这恰恰是 AI 智能体应该发挥优势的地方。

解决方案:「探索」与「回放」

面对这些挑战,Skyvern 团队意识到,关键不是让 AI 一次性「写好代码」,而是要模仿人类开发者的工作流程:先手动探索,搞清楚流程;在遇到问题的地方添加逻辑;最后将整个过程固化下来。

基于这个思路,他们设计了一种全新的两阶段模式:「探索模式」(Explore mode)和「回放模式」(Replay mode)。

阶段一:探索

在这个阶段,AI 智能体会完整地运行一次自动化任务。此阶段的目标不是追求速度,而是「学习」和「记录」。

  1. 1. 执行初始任务:使用一个高阶的自然语言指令,让 AI 智能体访问网站并尝试完成任务。
  2. 2. 记录执行轨迹:代理的每一步操作,包括点击、输入、页面跳转等,都会被详细记录下来,形成一个「执行轨迹」。

阶段二:编译与回放

这个阶段将「探索」阶段的成果转化成高效、可靠的确定性脚本。

第一步:生成初始脚本

根据之前记录下的执行轨迹,AI 可以生成一个基础的 Playwright 脚本。这个脚本是线性的,不包含任何上下文信息或容错逻辑,因此依然很脆弱。

第二步:记录「意图」,让代码拥有灵魂

探索模式虽然给出了一个可运行的脚本,但这个脚本是「死」的。因为它只知道 做什么 (what),不知道 为什么做 (why)。

解决这个问题的关键,是为每一步操作都捕获其背后的 「意图」 (intent)。这样,当页面发生变化时,系统才能智能地恢复。

在「探索」阶段,除了记录操作本身,AI 智能体还会被要求生成两个额外的元数据字段:user_detail_queryuser_detail_answer。这两个字段可以用于记录每个操作背后的目的

例如,当代理在一个表单上选择单选按钮时,它不仅仅是记录下点击了 id="corp" 这个元素。它还会记录下:

  • user_detail_query: 这个实体的法律结构是什么?
  • user_detail_answer: 公司

然后,AI 会将这些信息提炼成一个结构化的「意图」:

最后把这个「意图」对象被嵌入到生成的代码中。

这样做的好处是,在「回放」阶段,如果原先的 CSS 选择器失效了(比如网站前端更新,id 变了),脚本不会立即失败。它会启动一个恢复(recovery)机制:

首先可以根据记录的「意图」,尝试使用其他方式定位元素,比如通过标签文本(label)、aria 属性等更宽松的匹配规则。

如果还是找不到,它会向 LLM 发起一个非常具体、小范围的请求:「在这个页面上,我如何完成『选择法律结构:Corporation』这个操作?」这比让 LLM 重新进行端到端的推理要便宜和快速得多。

如果遇到彻底的死胡同,比如网站宕机或出现严重错误,系统会回退到最初的 AI 智能体模式,让强大的通用模型来判断当前状况并决定下一步行动。

第三步:廉价、快速地运行

经过「意图」增强后,AI 生成的 Playwright 脚本变得非常健壮。在后续的「回放」中,只要网站没有发生根本性的流程变化,脚本就能像传统的确定性代码一样快速、廉价地运行,完全不需要 LLM 的介入。只有在发生意外时,LLM 才会被「唤醒」作为后备支持。

根据 Skyvern 的基准测试,采用这种「探索-回放」模式后,平均运行时间从 278.95秒 缩短到 119.92秒(提速 2.3 倍);平均运行成本 从 0.11 降低到 0.04(便宜 2.7 倍);运行过程变得可预测和稳定。

实际应用场景

这种「探索一次,回放多次」的模式已经应用在许多场景中,替代了过去需要人工维护的脆弱脚本。例如:

  1. 1. 发票下载:智能体登录成千上万个不同的供应商或公共事业门户网站,导航到正确的账单周期,并下载发票。当网站布局或日期筛选器发生变化时,基于「意图」的恢复机制能自动适应,而不是直接失败。
  2. 2. 自动化采购:用于重复性采购,如每月续订软件许可证或通过供应商后台购买办公用品。首次运行学习结账流程,后续的回放则能确定性地执行,并在价格或 SKU 发生变化时发出警报。
  3. 3. 从遗留系统中提取数据:代理登录到有密码保护的内部系统后台,抓取表格或 PDF 中的数据,并通过 Webhook 将结构化数据推送到数据库。如果 DOM 结构改变,代理会重用「提取交易记录」的意图,重新映射选择器。
  4. 4. 政府表格填写:处理冗长、多步骤的政府表格,如工资税注册、营业执照更新等。这些网站的脚本尤其容易因微小改动而失效。

AI 编程的边界与人类思维的相似性

Skyvern 的这篇实践经验文章可以给我们带来很多新的思考。

学习过程的类比

Skyvern 的创始人 Suchintan 将 AI 智能体的学习过程比作观察他两岁的女儿学习认识世界。这种「尝试、失败、修正、再尝试」的模式,在宏观层面与人类的学习过程有相似之处。

但也有开发者提出了反对意见。他们认为,儿童的学习是具身的(embodied),通过与物理世界的真实互动来建立对世界的模型。而 LLM 只是在海量的文本数据上进行模式匹配和预测,两者有本质区别。AI 代理的「学习」更像是梯度下降的优化过程,而孩子的每一次经验都会塑造一个不同的、独一无二的认知主体。

大模型编写代码的能力边界

实际上,大模型在处理某些编程任务时表现出色,但在另一些任务上则惨不忍睹。

例如,LLM 在编写并发代码方面表现极差,这很可能是因为现有开源代码库中高质量的并发代码范例本身就非常稀少。

传统方法依然有效

有在很多情况下,我们根本不需要动用 Playwright 这样的浏览器自动化工具。如果网站不是由纯 JavaScript 渲染,也没有复杂的反爬虫机制(如 Cloudflare),直接使用 BeautifulSoup 解析静态 HTML,或者逆向分析其背后的 API 请求,通常是更快、更稳定的方法。

未来的方向

Skyvern 团队认为,「探索-回放」架构仍有改进空间。

  1. 1. 聚合多次运行的经验:目前,每次失败后的修复是孤立的。如果能分析大量运行失败的数据,发现哪些选择器最容易失效,哪些流程最常出现分支,系统就可以自动生成更具泛化能力的代码,减少对 LLM 回退的依赖。
  2. 2. 缓存数据提取逻辑:在数据提取任务中,目前每次仍需 LLM 来「阅读」页面。未来,可以追踪模型是如何定位到目标数据的(使用了哪些选择器、哪些子字符串),并将这个路径缓存下来,从而在后续运行中实现数量级的成本降低。
  3. 3. 全面集成到 SDK:将这种自动生成和使用优化脚本的能力,作为 Skyvern SDK 的默认行为,让开发者可以无缝地享受到其带来的好处。

总而言之,AI 智能体的未来发展,可能不仅仅是让模型本身变得越来越「聪明」,更是要建立一套机制,让 AI 能够将它一次性的「智能」转化为持久、高效、可维护的工程产物。

Skyvern 提出的「探索-编译-执行」范式,正是朝这个方向迈出的重要一步。这种分层、解耦的架构,或许才是通往真正鲁棒、经济、可扩展的 AI 自动化系统的正确道路。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-10-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • AI 直接生成代码的两个难题
  • 解决方案:「探索」与「回放」
    • 阶段一:探索
    • 阶段二:编译与回放
    • 第三步:廉价、快速地运行
  • 实际应用场景
  • AI 编程的边界与人类思维的相似性
  • 未来的方向
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档