Skyvern-AI/skyvern

GitHub: Skyvern-AI/skyvern

Skyvern 利用 LLM 和计算机视觉驱动浏览器自动化,通过自然语言替代脆弱的 XPath 脚本,实现跨网站工作流的智能执行。

Stars: 22229 | Forks: 2083


🐉 Automate Browser-based workflows using LLMs and Computer Vision 🐉

[Skyvern](https://www.skyvern.com) 利用 LLM 和计算机视觉实现了基于浏览器的工作流自动化。它提供了一个与 Playwright 兼容的 SDK,在 Playwright 之上增加了 AI 功能,同时还提供了一个无代码工作流构建器,帮助技术和非技术用户在任何网站上自动化手动工作流,从而取代脆弱或不可靠的自动化解决方案。

传统的浏览器自动化方法需要为网站编写自定义脚本,通常依赖于 DOM 解析和基于 XPath 的交互,一旦网站布局发生变化,这些交互就会失效。 Skyvern 不再仅仅依赖通过代码定义的 XPath 交互,而是依靠视觉 LLM 来学习并与网站进行交互。 # 工作原理 Skyvern 的灵感来自于由 [BabyAGI](https://github.com/yoheinakajima/babyagi) 和 [AutoGPT](https://github.com/Significant-Gravitas/AutoGPT) 推广的任务驱动自主 Agent 设计——但有一个主要优势:我们赋予了 Skyvern 使用 [Playwright](https://playwright.dev/) 等浏览器自动化库与网站进行交互的能力。 Skyvern 使用 Agent 群来理解网站,并规划和执行其操作: 这种方法有几个优点: 1. Skyvern 可以在它从未见过的网站上运行,因为它能够将视觉元素映射为完成工作流所需的操作,而无需任何自定义代码 2. Skyvern 能够抵抗网站布局变化,因为在尝试导航时,我们的系统不需要寻找预先确定的 XPath 或其他选择器 3. Skyvern 能够提取单个工作流并将其应用于大量网站,因为它能够推理出完成工作流所需的交互 详细的技术报告可以在[这里](https://www.skyvern.com/blog/skyvern-2-0-state-of-the-art-web-navigation-with-85-8-on-webvoyager-eval/)找到。 # 演示 https://github.com/user-attachments/assets/5cab4668-e8e2-4982-8551-aab05ff73a7f # 快速开始 ## Skyvern Cloud [Skyvern Cloud](https://app.skyvern.com) 是 Skyvern 的托管云版本,可让您运行 Skyvern 而无需担心基础设施。它允许您并行运行多个 Skyvern 实例,并内置了反机器人检测机制、代理网络和验证码解决工具。 如果您想尝试,请导航至 [app.skyvern.com](https://app.skyvern.com) 并创建一个账户。 ## 本地运行(UI + 服务器) 选择您偏好的安装方式: ### 选项 A:pip install(推荐用于 Python 管理的本地设置) 所需依赖: - [Python 3.11、3.12 或 3.13](https://www.python.org/downloads/) 此外,对于 Windows,还需要: - [Rust](https://rustup.rs/) - 带有 C++ 开发工具和 Windows SDK 的 VS Code #### 1. 安装 Skyvern ``` pip install "skyvern[all]" ``` #### 2. 运行 Skyvern ``` skyvern quickstart ``` pip 快速入门默认使用 SQLite。若要使用本地 Postgres 容器,请运行 `skyvern quickstart --postgres`。 ### 选项 B:Docker Compose 如果您希望将所有内容容器化(Postgres、API、UI)并且不想在本地安装 Python/Node,请使用此选项。 1. 安装 [Docker Desktop](https://www.docker.com/products/docker-desktop/) 2. 克隆仓库: git clone https://github.com/skyvern-ai/skyvern.git && cd skyvern 3. 在 `.env` 中配置您的 LLM 提供商(如果文件缺失,下方的 `quickstart --docker-compose` 命令将从 `.env.example` 创建它): cp .env.example .env # 如果尚未创建 # 编辑 .env 以添加您的 LLM API key 4. 启动所有服务: docker compose up -d 5. 打开 http://localhost:8080 ### 故障排除 **`(sqlite3.OperationalError) table organizations already exists`** — 您遇到了 `pip install skyvern==1.0.31` 中的一个已知 Bug。解决方法: ``` rm ~/.skyvern/data.db # remove the leftover SQLite file pip install --upgrade skyvern # 1.0.32+ contains the fix skyvern quickstart ``` 如果您仍然停留在 1.0.31 版本且无法升级,请改用 uv 安装: ``` uv pip install skyvern ``` **`pip install skyvern` 失败并提示 ResolutionImpossible (litellm / fastmcp)** — 您遇到了 1.0.31 版本中的依赖冲突。请升级到 1.0.32+ 版本或使用 uv:`uv pip install skyvern`。 ## SDK **Skyvern 是一个 Playwright 扩展,增加了 AI 驱动的浏览器自动化功能。** 它为您提供了 Playwright 的全部功能以及额外的 AI 能力——使用自然语言提示与元素交互、提取数据并自动化复杂的多步骤工作流。 **安装:** - Python SDK / 云 API:`pip install skyvern` - 本地服务器 + 打包的 UI:`pip install "skyvern[all]"` 然后运行 `skyvern quickstart` - 本地服务器 + 带 Postgres 的打包 UI:`pip install "skyvern[all]"` 然后运行 `skyvern quickstart --postgres` - 用于现有 API 的打包 UI:`pip install "skyvern[ui]"` 然后运行 `skyvern run ui --api-url --api-key ` - TypeScript:`npm install @skyvern/client` ### AI 驱动的页面命令 Skyvern 在页面对象上直接添加了四个核心 AI 命令: | 命令 | 描述 | |---------|-------------| | `page.act(prompt)` | 使用自然语言执行操作(例如,“点击登录按钮”) | | `page.extract(prompt, schema)` | 从页面提取结构化数据,带有可选的 JSON schema | | `page.validate(prompt)` | 验证页面状态,返回 `bool`(例如,“检查用户是否已登录”) | | `page.prompt(prompt, schema)` | 向 LLM 发送任意提示,带有可选的响应 schema | 此外,`page.agent` 提供了更高级别的工作流命令: | 命令 | 描述 | |---------|-------------| | `page.agent.run_task(prompt)` | 执行复杂的多步骤任务 | | `page.agent.login(credential_type, credential_id)` | 使用存储的凭证进行身份验证(Skyvern、Bitwarden、1Password) | | `page.agent.download_files(prompt)` | 导航并下载文件 | | `page.agent.run_workflow(workflow_id)` | 执行预构建的工作流 | ### AI 增强的 Playwright 操作 所有标准的 Playwright 操作都支持可选的 `prompt` 参数,用于 AI 驱动的元素定位: | 操作 | Playwright | AI 增强 | |--------|------------|--------------| | Click | `page.click("#btn")` | `page.click(prompt="Click login button")` | | Fill | `page.fill("#email", "a@b.com")` | `page.fill(prompt="Email field", value="a@b.com")` | | Select | `page.select_option("#country", "US")` | `page.select_option(prompt="Country dropdown", value="US")` | | Upload | `page.upload_file("#file", "doc.pdf")` | `page.upload_file(prompt="Upload area", files="doc.pdf")` | **三种交互模式:** ``` # 1. 传统 Playwright - CSS/XPath selectors await page.click("#submit-button") # 2. AI 驱动 - 自然语言 await page.click(prompt="Click the green Submit button") # 3. AI 回退 - 首先尝试 selector,如果失败则回退到 AI await page.click("#submit-btn", prompt="Click the Submit button") ``` ### 核心 AI 命令 - 示例 ``` # act - 使用自然语言执行操作 await page.act("Click the login button and wait for the dashboard to load") # extract - 提取结构化数据,支持可选的 JSON schema result = await page.extract("Get the product name and price") result = await page.extract( prompt="Extract order details", schema={"order_id": "string", "total": "number", "items": "array"} ) # validate - 检查页面状态(返回 bool) is_logged_in = await page.validate("Check if the user is logged in") # prompt - 向 LLM 发送任意 prompt summary = await page.prompt("Summarize what's on this page") ``` ### 快速入门示例 **通过 UI 运行:** ``` skyvern run all ``` 导航到 http://localhost:8080 以通过 Web 界面运行任务。如果打包的 UI 缺失,`skyvern run ui` 会提示安装匹配的 UI 包。对于非交互式设置,请使用 `skyvern run ui --install-ui` 或 `skyvern run all --install-ui`。 若要仅针对现有的 Skyvern API 运行打包的 UI,请安装 `skyvern[ui]` 并传入 `--api-url`;除非您覆盖它,否则 CLI 会从 API URL 推断 `--wss-url`。您也可以在运行 `skyvern run ui` 之前设置 `VITE_API_BASE_URL`、`VITE_WSS_BASE_URL`、`VITE_ARTIFACT_API_BASE_URL`、`VITE_SKYVERN_API_KEY` 和 `VITE_BROWSER_STREAMING_MODE`。 **Python SDK:** ``` from skyvern import Skyvern # 本地模式 skyvern = Skyvern.local() # 或连接到 Skyvern Cloud skyvern = Skyvern(api_key="your-api-key") # 启动浏览器并获取页面 browser = await skyvern.launch_cloud_browser() page = await browser.get_working_page() # 将 Playwright 与 AI 驱动的操作结合使用 await page.goto("https://example.com") await page.click("#login-button") # Traditional Playwright await page.agent.login(credential_type="skyvern", credential_id="cred_123") # AI login await page.click(prompt="Add first item to cart") # AI-augmented click await page.agent.run_task("Complete checkout with: John Snow, 12345") # AI task ``` **TypeScript SDK:** ``` import { Skyvern } from "@skyvern/client"; const skyvern = new Skyvern({ apiKey: "your-api-key" }); const browser = await skyvern.launchCloudBrowser(); const page = await browser.getWorkingPage(); // Mix Playwright with AI-powered actions await page.goto("https://example.com"); await page.click("#login-button"); // Traditional Playwright await page.agent.login("skyvern", { credentialId: "cred_123" }); // AI login await page.click({ prompt: "Add first item to cart" }); // AI-augmented click await page.agent.runTask("Complete checkout with: John Snow, 12345"); // AI task await browser.close(); ``` **简单任务执行:** ``` from skyvern import Skyvern skyvern = Skyvern() task = await skyvern.run_task(prompt="Find the top post on hackernews today") print(task) ``` ## 高级用法 ### 控制您自己的浏览器 让 Skyvern 控制您现有的 Chrome 浏览器——包含您所有的 Cookie、登录状态和扩展。 #### 步骤 1:在 Chrome 中启用远程调试 1. 打开 Chrome 并导航到 `chrome://inspect/#remote-debugging` 2. 点击 **启用** 以启动调试服务器 3. 您应该会看到:**服务器运行于:127.0.0.1:9222** #### 步骤 2:连接 Skyvern **选项 A — Python 代码:** ``` from skyvern import Skyvern skyvern = Skyvern( base_url="http://localhost:8000", api_key="YOUR_API_KEY", browser_address="http://127.0.0.1:9222", ) task = await skyvern.run_task( prompt="Find the top post on hackernews today", ) ``` **选项 B — Skyvern 服务:** 在您的 .env 文件中添加两个变量: ``` BROWSER_TYPE=cdp-connect BROWSER_REMOTE_DEBUGGING_URL=http://127.0.0.1:9222 ``` 重启 Skyvern 服务 `skyvern run all`,并通过 UI 或代码运行任务 ### 将 Skyvern Cloud 连接到您的本地浏览器 让 Skyvern Cloud 控制运行在您机器上的 Chrome 浏览器——包含您所有现有的 Cookie、登录状态和扩展。这对于自动化您已经登录或位于 VPN 后的站点非常有用。 ``` # 一条命令启动 Chrome + 创建到 Skyvern Cloud 的 tunnel skyvern browser serve --tunnel ``` 然后在您的任务中使用隧道 URL: ``` from skyvern import Skyvern skyvern = Skyvern(api_key="your-api-key") task = await skyvern.run_task( prompt="Download the latest invoice from my account", browser_address="https://abc123.ngrok-free.dev", ) ``` 有关所有选项、手动隧道设置和故障排除,请参阅[完整文档](https://www.skyvern.com/docs/optimization/browser-tunneling)。 ### 从运行中获取一致的输出 schema 您可以通过添加 `data_extraction_schema` 参数来实现这一点: ``` from skyvern import Skyvern skyvern = Skyvern() task = await skyvern.run_task( prompt="Find the top post on hackernews today", data_extraction_schema={ "type": "object", "properties": { "title": { "type": "string", "description": "The title of the top post" }, "url": { "type": "string", "description": "The URL of the top post" }, "points": { "type": "integer", "description": "Number of points the post has received" } } } ) ``` ### 调试问题的有用命令 ``` # 单独启动 Skyvern Server* skyvern run server # 启动 Skyvern UI skyvern run ui # 检查 Skyvern 服务的状态 skyvern status # 停止 Skyvern 服务 skyvern stop all # 停止 Skyvern UI skyvern stop ui # 单独停止 Skyvern Server skyvern stop server ``` # 性能与评估 Skyvern 在 [WebBench benchmark](webbench.ai) 上拥有 SOTA 的性能表现,准确率达到 64.4%。技术报告和评估可以在[这里](https://www.skyvern.com/blog/web-bench-a-new-way-to-compare-ai-browser-agents/)找到

## WRITE 任务上的性能(例如填写表单、登录、下载文件等) Skyvern 是 WRITE 任务(例如填写表单、登录、下载文件等)中表现最佳的 Agent,主要用于 RPA(机器人流程自动化)相关的任务。

# Skyvern 功能 ## Skyvern 任务 任务是 Skyvern 内部的基础构建块。每个任务都是对 Skyvern 的单个请求,指示它在网站中导航并实现特定目标。 任务要求您指定 `url`、`prompt`,并且可以选择包含 `data schema`(如果您希望输出符合特定 schema)和 `error codes`(如果您希望 Skyvern 在特定情况下停止运行)。

## Skyvern 工作流 工作流是将多个任务链接在一起以形成一个内聚的工作单元的一种方式。 例如,如果您想下载所有 1 月 1 日之后的发票,您可以创建一个工作流:首先导航到发票页面,然后进行筛选以仅显示 1 月 1 日之后的发票,接着提取所有符合条件发票的列表,并遍历每张发票进行下载。 另一个例子是,如果您想自动化从电子商务商店购买产品的过程,您可以创建一个工作流:首先导航到所需的产品,然后将其添加到购物车。其次,它会导航到购物车并验证购物车状态。最后,它会进入结账流程以购买商品。 支持的工作流功能包括: 1. 浏览器任务 2. 浏览器操作 3. 数据提取 4. 验证 5. For 循环 6. 文件解析 7. 发送电子邮件 8. 文本提示 9. HTTP 请求块 10. 自定义代码块 11. 将文件上传到块存储 12. (即将推出)条件判断

## 实时流 Skyvern 允许您将浏览器的视口实时流式传输到本地机器,以便您可以准确地看到 Skyvern 在网络上正在做什么。这对于调试和理解 Skyvern 如何与网站进行交互,以及在必要时进行干预非常有用 ## 表单填写 Skyvern 本身就能够填写网站上的表单输入。通过 `navigation_goal` 传入信息将使 Skyvern 能够理解信息并相应地填写表单。 ## 数据提取 Skyvern 还能够从网站提取数据。 您也可以直接在主提示中指定 `data_extraction_schema`,以 jsonc 格式准确地告诉 Skyvern 您想从网站提取什么数据。Skyvern 的输出将根据提供的 schema 进行结构化。 ## 文件下载 Skyvern 还能够从网站下载文件。所有下载的文件都会自动上传到块存储(如果已配置),您可以通过 UI 访问它们。 ## 身份验证 Skyvern 支持多种不同的身份验证方法,以便更轻松地自动化登录后的任务。如果您想尝试一下,请[通过电子邮件](mailto:founders@skyvern.com)或 [discord](https://discord.gg/fG2XXEuQX3) 联系我们。

### 🔐 2FA 支持 (TOTP) Skyvern 支持多种不同的 2FA 方法,允许您自动化需要 2FA 的工作流。 示例包括: 1. 基于 QR 码的 2FA(例如 Google Authenticator、Authy) 2. 基于电子邮件的 2FA 3. 基于短信的 2FA 🔐 在这里](https://www.skyvern.com/docs/credentials/totp)了解更多关于 2FA 支持的信息。 ### 密码管理器集成 Skyvern 目前支持以下密码管理器集成: - [x] Bitwarden - [x] 自定义凭证服务 (HTTP API) - [ ] 1Password - [ ] LastPass ## 模型上下文协议 (MCP) Skyvern 支持模型上下文协议 (MCP),允许您使用任何支持 MCP 的 LLM。 在[这里](https://www.skyvern.com/docs/integrations/mcp#mcp-server)查看 MCP 文档 ## Zapier / Make.com / N8N 集成 Skyvern 支持 Zapier、Make.com 和 N8N,允许您将 Skyvern 工作流连接到其他应用程序。 * [Zapier](https://www.skyvern.com/docs/integrations/zapier) * [Make.com](https://www.skyvern.com/docs/integrations/make.com) * [N8N](https://www.skyvern.com/docs/integrations/n8n) 🔐 在[这里](https://www.skyvern.com/docs/credentials/totp)了解更多关于 2FA 支持的信息。 # Skyvern 的真实世界示例 我们很乐意看到 Skyvern 在实际场景中是如何被使用的。以下是在现实世界中如何使用 Skyvern 自动化工作流的一些示例。请提交 PR 以添加您自己的示例! ## 在许多不同的网站上下载发票 [预约演示以观看实际操作](https://meetings.hubspot.com/skyvern/demo)

## 自动化求职申请流程 [💡 观看实际操作](https://app.skyvern.com/tasks/create/job_application)

## 为制造公司自动化材料采购 [💡 观看实际操作](https://app.skyvern.com/tasks/create/finditparts)

## 导航至政府网站注册账户或填写表单 [💡 观看实际操作](https://app.skyvern.com/tasks/create/california_edd)

## 填写随机的联系我们表单 [💡 观看实际操作](https://app.skyvern.com/tasks/create/contact_us_forms)

## 以任何语言从保险提供商处获取保险报价 [💡 观看实际操作](https://app.skyvern.com/tasks/create/bci_seguros)

[💡 观看实际操作](https://app.skyvern.com/tasks/create/geico)

# 贡献者设置 确保已安装 [uv](https://docs.astral.sh/uv/getting-started/installation/)。 1. 运行此命令以创建您的虚拟环境 (`.venv`) uv sync --group dev 2. 执行初始服务器配置 uv run skyvern quickstart 3. 在浏览器中导航到 `http://localhost:8080` 以开始使用 UI *Skyvern CLI 支持 Windows、WSL、macOS 和 Linux 环境。* # 文档 更详尽的文档可以在我们的[📕 文档页面](https://www.skyvern.com/docs)上找到。如果有任何不清楚或缺失的内容,请通过创建 issue 或[通过电子邮件](mailto:founders@skyvern.com)或 [discord](https://discord.gg/fG2XXEuQX3) 联系我们告诉我们。 # 支持的 LLMs | 提供商 | 支持的模型 | | -------- | ------- | | OpenAI | GPT-5.5, GPT-5.4, GPT-5, GPT-4.1, o3, o4-mini | | Anthropic | Claude 4.7 Opus, Claude 4.6 (Sonnet, Opus), Claude 4.5 (Haiku, Sonnet, Opus) | | Azure OpenAI | 部署到您 Azure 订阅中的任何 GPT 模型 | | AWS Bedrock | Claude 4.7, Claude 4.6 (Sonnet, Opus), Claude 4.5 (Sonnet, Opus) | | Gemini | Gemini 3.1 Pro, Gemini 3 Flash, Gemini 2.5 Pro/Flash | | Ollama | 通过 [Ollama](https://github.com/ollama/ollama) 运行任何本地托管的模型 | | OpenRouter | 通过 [OpenRouter](https://openrouter.ai) 访问模型 | | OpenAI 兼容 | 遵循 OpenAI API 格式的任何自定义 API endpoint(通过 [liteLLM](https://docs.litellm.ai/docs/providers/openai_compatible)) | 有关详细的 LLM 配置,包括所有可用的模型 key、环境变量和多模型设置,请参阅 [LLM 配置文档](https://www.skyvern.com/docs/self-hosted/llm-configuration)。 # 贡献 我们欢迎 PR 和建议!不要犹豫,立即提交 PR/issue 或[通过电子邮件](mailto:founders@skyvern.com)或 [discord](https://discord.gg/fG2XXEuQX3) 联系我们。 请查看我们的[贡献指南](CONTRIBUTING.md)和 [“需要帮助”的 issues](https://github.com/skyvern-ai/skyvern/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) 以便开始吧! 如果您想与 skyvern 仓库进行聊天,以获取有关其结构、如何基于它进行开发以及如何解决使用问题的宏观概述,请查看 [Code Sage](https://sage.storia.ai?utm_source=github&utm_medium=referral&utm_campaign=skyvern-readme)。 # 遥测 默认情况下,Skyvern 会收集基本的使用统计数据,以帮助我们了解 Skyvern 的使用情况。如果您想退出遥测,请将 `SKYVERN_TELEMETRY` 环境变量设置为 `false`。 # 许可证 Skyvern 的开源仓库通过托管云提供支持。支持 Skyvern 的所有核心逻辑均在此开源仓库中提供,并采用 [AGPL-3.0 许可证](LICENSE)进行授权,但在我们提供的托管云服务中可用的反机器人措施除外。 如果您对许可证有任何疑问或顾虑,请[联系我们](mailto:support@skyvern.com),我们将很乐意为您提供帮助。 # Star 历史 [![Star History Chart](https://api.star-history.com/svg?repos=Skyvern-AI/skyvern&type=Date)](https://star-history.com/#Skyvern-AI/skyvern&Date)
标签:AI自动化, C2, DLL 劫持, Playwright, RPA, 大语言模型, 工作流自动化, 浏览器自动化, 特征检测, 计算机视觉, 请求拦截, 逆向工具