站点图标 高效码农

Skyvern:使用AI和计算机视觉实现浏览器工作流自动化的完整指南

引言

在日常工作中,我们经常需要重复执行各种浏览器操作——填写表单、下载文件、提取数据、完成登录流程等。传统自动化方法依赖编写针对特定网站的脚本,使用XPath或CSS选择器定位元素,但网站布局的任何微小变化都可能导致脚本失效。

现在,有一种更智能的解决方案出现了。Skyvern通过结合大型语言模型(LLMs)和计算机视觉技术,彻底改变了浏览器自动化的实现方式。它能够像人类一样”看”懂网页内容,理解任务要求,并自主决定如何操作,无需针对每个网站编写特定代码。

本文将深入介绍Skyvern的工作原理、安装使用方法、核心功能以及实际应用场景,帮助您全面了解这一革命性的自动化工具。

Skyvern是什么?

Skyvern是一个基于AI的浏览器自动化平台,它使用LLMs和计算机视觉来自动化各种浏览器工作流。与传统方法不同,Skyvern不需要预先编写针对特定网站的脚本,而是通过理解网页的视觉元素和文本内容,自主决策并执行操作。

核心特点:

  • 无需编写针对特定网站的代码
  • 对网站布局变化具有强韧性
  • 能够处理从未见过的网站
  • 支持复杂推理和决策
Skyvern系统架构

Skyvern如何工作?

Skyvern的设计灵感来源于任务驱动型自主代理架构,如BabyAGI和AutoGPT,但增加了一个关键能力:通过浏览器自动化库(如Playwright)与网站交互。

多代理系统架构

Skyvern使用一组专门化的代理来协同完成任务:

  1. 理解代理:分析网页内容,识别可交互元素
  2. 规划代理:制定完成任务所需的步骤序列
  3. 执行代理:实际执行点击、输入、滚动等浏览器操作
  4. 验证代理:确认操作结果是否符合预期

这种分工协作的方式使Skyvern能够处理复杂的工作流,并在遇到意外情况时调整策略。

与传统方法的对比

传统浏览器自动化通常依赖以下方法:

  • DOM解析和XPath选择器
  • 预先编写的脚本和流程
  • 针对特定网站定制的代码

这些方法的主要缺点是脆弱性——网站布局的微小变化就可能导致自动化流程中断。

Skyvern采用的根本不同之处在于:

  • 基于视觉理解而非代码选择器
  • 适应性强,能处理布局变化
  • 具备推理能力,可处理复杂情况

例如,当需要从Geico获取汽车保险报价时,Skyvern能够推断出”18岁时是否有驾驶资格?”这一问题的答案可以从驾驶员16岁获得驾照这一事实推导出来,而不需要明确提供答案。

性能与评估

在WebBench基准测试中,Skyvern表现出色,总体准确率达到64.4%。特别是在”写入”任务(如填写表单、登录、下载文件等)方面,Skyvern是性能最佳的代理,这对于机器人流程自动化(RPA)相关任务尤为重要。

WebBench总体性能
WebBench写入任务性能

这些结果表明,Skyvern在处理现实世界的自动化任务方面已经达到了行业领先水平。

如何开始使用Skyvern

Skyvern云服务

对于不想处理基础设施管理的用户,👉Skyvern Cloud提供了完全托管的云服务。它包括并行运行多个Skyvern实例、反机器人检测机制、代理网络和CAPTCHA解决方案等功能。

要试用Skyvern Cloud,只需访问👉app.skyvern.com创建账户即可。

本地安装和使用

环境要求

在开始之前,请确保您的系统满足以下要求:

  • Python 3.11.x(支持3.12,暂不支持3.13)
  • NodeJS和NPM
  • Windows用户额外需要:
    • Rust
    • VS Code及C++开发工具和Windows SDK

安装步骤

  1. 安装Skyvern

    pip install skyvern
    
  2. 初始化Skyvern

    首次运行时,需要设置数据库和运行迁移:

    skyvern quickstart
    
  3. 运行Skyvern服务

    skyvern run all
    

    完成后,访问 http://localhost:8080 即可使用Web界面创建和管理任务。

通过代码运行任务

除了Web界面,您也可以通过Python代码使用Skyvern:

from skyvern import Skyvern

skyvern = Skyvern()
task = await skyvern.run_task(prompt="查找今天HackerNews上的热门帖子")
print(task)

Skyvern会在弹出的浏览器中执行任务,完成后自动关闭浏览器。您可以通过 http://localhost:8080/history 查看任务历史记录。

高级使用技巧

使用自己的Chrome浏览器

注意:从Chrome 136开始,默认用户数据目录拒绝任何CDP连接。为了使用您的浏览器数据,Skyvern会在首次连接本地浏览器时将默认用户数据目录复制到./tmp/user_data_dir

  1. 通过代码控制

    from skyvern import Skyvern
    
    # Mac系统下的Chrome路径示例
    browser_path = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
    skyvern = Skyvern(
        base_url="http://localhost:8000",
        api_key="YOUR_API_KEY",
        browser_path=browser_path,
    )
    task = await skyvern.run_task(
        prompt="查找今天HackerNews上的热门帖子",
    )
    
  2. 通过Skyvern服务控制

    在.env文件中添加以下变量:

    # Mac系统下的Chrome路径示例
    CHROME_EXECUTABLE_PATH="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
    BROWSER_TYPE=cdp-connect
    

    重启Skyvern服务后,即可通过UI或代码运行任务。

连接远程浏览器

获取CDP连接URL并传递给Skyvern:

from skyvern import Skyvern

skyvern = Skyvern(cdp_url="您的CDP连接URL")
task = await skyvern.run_task(
    prompt="查找今天HackerNews上的热门帖子",
)

获取结构化输出

通过指定数据提取架构,可以确保输出符合特定格式:

from skyvern import Skyvern

skyvern = Skyvern()
task = await skyvern.run_task(
    prompt="查找今天HackerNews上的热门帖子",
    data_extraction_schema={
        "type": "object",
        "properties": {
            "title": {
                "type": "string",
                "description": "热门帖子的标题"
            },
            "url": {
                "type": "string",
                "description": "热门帖子的URL"
            },
            "points": {
                "type": "integer",
                "description": "帖子获得的积分数量"
            }
        }
    }
)

常用调试命令

# 单独启动Skyvern服务器
skyvern run server

# 启动Skyvern UI
skyvern run ui

# 检查Skyvern服务状态
skyvern status

# 停止所有Skyvern服务
skyvern stop all

# 停止Skyvern UI
skyvern stop ui

# 停止Skyvern服务器
skyvern stop server

Docker Compose部署

对于喜欢使用容器化部署的用户,Skyvern提供了Docker Compose配置:

  1. 确保已安装并运行Docker Desktop

  2. 检查本地是否有Postgres运行(使用docker ps命令)

  3. 克隆仓库并进入根目录

  4. 运行skyvern init llm生成.env文件(这会被复制到Docker镜像中)

  5. 👉docker-compose.yml中填写LLM提供商密钥

  6. 运行以下命令:

    docker compose up -d
    
  7. 在浏览器中访问http://localhost:8080开始使用UI

重要提示:一次只能有一个Postgres容器在5432端口上运行。如果从CLI管理的Postgres切换到Docker Compose,必须先删除原始容器:

docker rm -f postgresql-container

Skyvern核心功能

任务管理

任务是Skyvern中的基本构建块。每个任务代表一个单独的请求,指示Skyvern导航网站并完成特定目标。

创建任务时需要指定:

  • url:目标网站地址
  • prompt:任务描述
  • 可选的data schema:如果需要输出符合特定架构
  • 可选的error codes:如果希望在特定情况下停止运行
Skyvern任务界面

工作流设计

工作流允许将多个任务链接在一起,形成连贯的工作单元。

典型工作流示例:

  1. 发票下载工作流

    • 导航到发票页面
    • 过滤显示1月1日后的发票
    • 提取符合条件的发票列表
    • 遍历每张发票并下载
  2. 电商购买工作流

    • 导航到目标商品页面
    • 将商品添加到购物车
    • 导航到购物车并验证状态
    • 完成结账流程

支持的工作流功能:

  • 浏览器任务
  • 浏览器操作
  • 数据提取
  • 验证
  • 循环
  • 文件解析
  • 发送电子邮件
  • 文本提示
  • HTTP请求块
  • 自定义代码块
  • 上传文件到块存储
  • (即将推出)条件语句
工作流块示例

实时流媒体

Skyvern允许将浏览器视口实时流式传输到本地机器,让您可以实时查看Skyvern在网页上的操作。这对于调试和理解Skyvern如何与网站交互非常有用,必要时可以进行干预。

表单填写

Skyvern天生具备在网站上填写表单输入的能力。通过navigation_goal传递信息,Skyvern能够理解信息并相应填写表单。

数据提取

Skyvern还能够从网站提取数据。您可以在主要提示中直接指定data_extraction_schema,以JSONC格式告诉Skyvern您希望从网站提取哪些数据。Skyvern的输出将按照提供的架构进行结构化。

文件下载

Skyvern支持从网站下载文件。所有下载的文件都会自动上传到块存储(如果已配置),您可以通过UI访问它们。

身份验证支持

Skyvern支持多种身份验证方法,使登录后的任务自动化更加容易。如果您想试用此功能,请通过👉电子邮件👉Discord联系我们。

安全密码任务示例

双因素认证(2FA)支持

Skyvern支持多种2FA方法,允许您自动化需要2FA的工作流:

  • 基于QR码的2FA(如Google Authenticator、Authy)
  • 基于电子邮件的2FA
  • 基于短信的2FA

密码管理器集成

Skyvern目前支持以下密码管理器集成:

  • [x] Bitwarden
  • [ ] 1Password(开发中)
  • [ ] LastPass(开发中)

模型上下文协议(MCP)支持

Skyvern支持模型上下文协议(MCP),允许您使用任何支持MCP的LLM。

Zapier / Make.com / N8N集成

Skyvern支持与Zapier、Make.com和N8N集成,允许您将Skyvern工作流连接到其他应用程序。

实际应用案例

以下是Skyvern在现实世界中的一些应用示例:

多网站发票下载

企业经常需要从多个供应商门户下载发票,每个门户都有不同的界面和导航流程。Skyvern可以自动化这一过程,无需为每个网站编写特定代码。

发票下载演示

求职申请自动化

求职者可以使用Skyvern自动化投递简历和填写申请表格的过程,节省大量时间。

求职申请演示

制造业物料采购

制造公司可以使用Skyvern自动化查找和采购原材料的过程,从多个供应商网站比较价格和库存。

物料采购演示

政府网站账户注册和表格填写

Skyvern可以处理政府网站复杂的注册和表格填写流程,这些网站通常有独特的界面和验证流程。

政府服务演示

填写联系表单

企业可以使用Skyvern自动化在多个网站上填写联系表单的过程,用于潜在客户开发或合作伙伴联系。

联系表单演示

多语言保险报价获取

保险公司或比较网站可以使用Skyvern从多个保险提供商获取报价,即使网站使用不同语言。

保险报价演示
Geico保险演示

支持的LLM提供商

Skyvern支持多种LLM提供商,让您可以根据需求、预算和性能要求选择合适的模型。

提供商 支持的模型
OpenAI gpt4-turbo, gpt-4o, gpt-4o-mini
Anthropic Claude 3 (Haiku, Sonnet, Opus), Claude 3.5 (Sonnet)
Azure OpenAI 任何GPT模型,多模态LLM(azure/gpt4-o)性能更佳
AWS Bedrock Anthropic Claude 3 (Haiku, Sonnet, Opus), Claude 3.5 (Sonnet)
Gemini Gemini 2.5 Pro和flash, Gemini 2.0
Ollama 通过👉Ollama运行任何本地托管模型
OpenRouter 通过👉OpenRouter访问模型
OpenAI兼容 任何遵循OpenAI API格式的自定义API端点(通过👉liteLLM

环境变量配置

OpenAI

变量 描述 类型 示例值
ENABLE_OPENAI 注册OpenAI模型 布尔值 true, false
OPENAI_API_KEY OpenAI API密钥 字符串 sk-1234567890
OPENAI_API_BASE OpenAI API基础URL,可选 字符串 https://openai.api.base
OPENAI_ORGANIZATION OpenAI组织ID,可选 字符串 your-org-id

推荐LLM_KEYOPENAI_GPT4O, OPENAI_GPT4O_MINI, OPENAI_GPT4_1, OPENAI_O4_MINI, OPENAI_O3

Anthropic

变量 描述 类型 示例值
ENABLE_ANTHROPIC 注册Anthropic模型 布尔值 true, false
ANTHROPIC_API_KEY Anthropic API密钥 字符串 sk-1234567890

推荐LLM_KEYANTHROPIC_CLAUDE3.5_SONNET, ANTHROPIC_CLAUDE3.7_SONNET, ANTHROPIC_CLAUDE4_OPUS, ANTHROPIC_CLAUDE4_SONNET

Azure OpenAI

变量 描述 类型 示例值
ENABLE_AZURE 注册Azure OpenAI模型 布尔值 true, false
AZURE_API_KEY Azure部署API密钥 字符串 sk-1234567890
AZURE_DEPLOYMENT Azure OpenAI部署名称 字符串 skyvern-deployment
AZURE_API_BASE Azure部署API基础URL 字符串 https://skyvern-deployment.openai.azure.com/
AZURE_API_VERSION Azure API版本 字符串 2024-02-01

推荐LLM_KEYAZURE_OPENAI

AWS Bedrock

变量 描述 类型 示例值
ENABLE_BEDROCK 注册AWS Bedrock模型。使用AWS Bedrock前,请确保👉AWS配置已正确设置 布尔值 true, false

推荐LLM_KEYBEDROCK_ANTHROPIC_CLAUDE3.7_SONNET_INFERENCE_PROFILE, BEDROCK_ANTHROPIC_CLAUDE4_OPUS_INFERENCE_PROFILE, BEDROCK_ANTHROPIC_CLAUDE4_SONNET_INFERENCE_PROFILE

Gemini

变量 描述 类型 示例值
ENABLE_GEMINI 注册Gemini模型 布尔值 true, false
GEMINI_API_KEY Gemini API密钥 字符串 your_google_gemini_api_key

推荐LLM_KEYGEMINI_2.5_PRO_PREVIEW, GEMINI_2.5_FLASH_PREVIEW

Ollama

变量 描述 类型 示例值
ENABLE_OLLAMA 通过Ollama注册本地模型 布尔值 true, false
OLLAMA_SERVER_URL Ollama服务器URL 字符串 http://host.docker.internal:11434
OLLAMA_MODEL Ollama模型名称 字符串 qwen2.5:7b-instruct

推荐LLM_KEYOLLAMA

注意:Ollama暂不支持视觉功能。

OpenRouter

变量 描述 类型 示例值
ENABLE_OPENROUTER 注册OpenRouter模型 布尔值 true, false
OPENROUTER_API_KEY OpenRouter API密钥 字符串 sk-1234567890
OPENROUTER_MODEL OpenRouter模型名称 字符串 mistralai/mistral-small-3.1-24b-instruct
OPENROUTER_API_BASE OpenRouter API基础URL 字符串 https://api.openrouter.ai/v1

推荐LLM_KEYOPENROUTER

OpenAI兼容

变量 描述 类型 示例值
ENABLE_OPENAI_COMPATIBLE 注册自定义OpenAI兼容API端点 布尔值 true, false
OPENAI_COMPATIBLE_MODEL_NAME OpenAI兼容端点模型名称 字符串 yi-34b, gpt-3.5-turbo, mistral-large
OPENAI_COMPATIBLE_API_KEY OpenAI兼容端点API密钥 字符串 sk-1234567890
OPENAI_COMPATIBLE_API_BASE OpenAI兼容端点基础URL 字符串 https://api.together.xyz/v1, http://localhost:8000/v1
OPENAI_COMPATIBLE_API_VERSION OpenAI兼容端点API版本,可选 字符串 2023-05-15
OPENAI_COMPATIBLE_MAX_TOKENS 完成最大令牌数,可选 整数 4096, 8192
OPENAI_COMPATIBLE_TEMPERATURE 温度设置,可选 浮点数 0.0, 0.5, 0.7
OPENAI_COMPATIBLE_SUPPORTS_VISION 模型是否支持视觉,可选 布尔值 true, false

支持的LLM Key:OPENAI_COMPATIBLE

通用LLM配置

变量 描述 类型 示例值
LLM_KEY 要使用的模型名称 字符串 参见上面支持的LLM密钥
SECONDARY_LLM_KEY Skyvern运行迷你代理使用的模型名称 字符串 参见上面支持的LLM密钥
LLM_CONFIG_MAX_TOKENS 覆盖LLM使用的最大令牌数 整数 128000

开发者设置

对于想要贡献代码或自定义Skyvern的开发者,以下是设置开发环境的步骤:

确保已安装👉uv

  1. 创建虚拟环境(.venv

    uv sync --group dev
    
  2. 执行初始服务器配置

    uv run skyvern quickstart
    
  3. 在浏览器中访问http://localhost:8080开始使用UI

    Skyvern CLI支持Windows、WSL、macOS和Linux环境。

功能路线图

Skyvern团队有明确的开发计划,以下是未来几个月的主要目标:

  • [x] 开源 – 开源Skyvern核心代码库
  • [x] 工作流支持 – 支持将多个Skyvern调用链接在一起
  • [x] 改进上下文理解 – 通过文本提示提供相关标签上下文,提高Skyvern理解可交互元素周围内容的能力
  • [x] 成本优化 – 通过优化传递给Skyvern的上下文树,提高稳定性并降低运行成本
  • [x] 自助服务UI – 用基于React的UI组件取代Streamlit UI,允许用户在Skyvern中启动新任务
  • [x] 工作流UI构建器 – 引入UI允许用户可视化构建和分析工作流
  • [x] Chrome视口流式传输 – 引入将Chrome视口实时流式传输到用户浏览器的方法
  • [x] 历史运行记录UI – 用基于React的UI取代Streamlit UI,允许可视化查看历史运行记录及其结果
  • [X] 自动工作流构建器(”观察者”模式) – 允许Skyvern在浏览网页时自动生成工作流,使构建新工作流更加容易
  • [x] 提示缓存 – 引入LLM调用的缓存层,显著降低运行Skyvern的成本
  • [x] Web评估数据集 – 将Skyvern与公共基准测试集成,跟踪模型质量随时间的变化
  • [ ] 改进的调试模式 – 允许Skyvern在运行动作前规划并获取”批准”,方便调试和迭代提示
  • [ ] Chrome扩展 – 允许用户通过Chrome扩展与Skyvern交互
  • [ ] Skyvern动作记录器 – 允许Skyvern观察用户完成任务并自动生成工作流
  • [ ] 交互式实时流 – 允许用户实时与流交互,必要时进行干预
  • [ ] 集成LLM可观察性工具 – 集成LLM可观察性工具,允许使用特定数据集回溯测试提示更改
  • [x] Langchain集成 – 在langchain_community中创建集成,将Skyvern用作”工具”

常见问题解答

Skyvern与传统RPA工具有何不同?

传统RPA工具通常依赖录制和回放技术,或基于XPath/CSS选择器的脚本,这些方法在网站布局变化时容易失效。Skyvern使用LLMs和计算机视觉理解网页内容,能够适应布局变化,处理从未见过的网站,并具备推理能力处理复杂情况。

Skyvern能否处理需要登录的网站?

是的,Skyvern支持多种身份验证方法,包括用户名/密码登录和双因素认证(2FA)。它支持基于QR码、电子邮件和短信的2FA,并且可以与密码管理器(如Bitwarden)集成。

Skyvern如何保证数据安全?

当使用本地部署时,所有数据都保留在您的环境中。Skyvern的开源版本不包含云服务中的反机器人检测功能,但核心自动化逻辑完全相同。如果对许可有疑问,可以联系支持团队。

Skyvern支持哪些浏览器?

Skyvern主要基于Chromium内核的浏览器(如Google Chrome、Microsoft Edge)进行优化,通过Chrome DevTools Protocol(CDP)与浏览器交互。它支持连接本地或远程浏览器实例。

如果Skyvern在执行任务时卡住了怎么办?

Skyvern提供了多种调试工具:

  • 实时流媒体功能可以让您观察执行过程
  • 详细的任务历史记录可以回顾每一步操作
  • 可以通过UI或代码干预任务执行
  • 丰富的日志记录帮助诊断问题

Skyvern的性能如何?

根据WebBench基准测试,Skyvern在总体任务上达到64.4%的准确率,在”写入”类任务(如表单填写、登录、文件下载等)上表现尤为出色,这些任务正是RPA场景的核心需求。

是否可以自定义Skyvern的行为?

是的,Skyvern提供了多种自定义方式:

  • 通过数据提取架构定义输出格式
  • 通过错误代码定义停止条件
  • 支持自定义工作流组合多个任务
  • 可以集成自定义代码块

总结

Skyvern代表了浏览器自动化领域的重大进步,通过结合LLMs和计算机视觉,解决了传统自动化方法的根本局限性。它不需要针对每个网站编写特定代码,能够适应网站布局变化,并具备处理复杂情况的能力。

无论您是企业希望自动化重复性工作流程,还是开发者寻求更可靠的浏览器自动化解决方案,Skyvern都值得一试。其开源版本提供了完整核心功能,而云服务则为不想管理基础设施的用户提供了便利选择。

随着AI技术的不断发展,Skyvern这类工具有望彻底改变我们与网络应用程序交互的方式,将人们从重复性任务中解放出来,专注于更有价值的工作。

退出移动版