CAPSOLVER
博客
如何在CrewAI多智能体工作流程中解决CAPTCHA

如何在CrewAI多智能体工作流程中解决CAPTCHA

Logo of CapSolver

Ethan Collins

Pattern Recognition Specialist

28-Jul-2026

CrewAI 协调多个 AI 代理共同完成复杂任务 —— 研究、数据收集、内容创作和工作流自动化。当 CrewAI 中的任何代理在网页交互过程中遇到 CAPTCHA 挑战时,整个多代理流水线都会停滞。CapSolver 的 capsolver-agent 包可直接集成到 CrewAI 工作流中,使您的代理能够清除 reCAPTCHA、Cloudflare Turnstile 和其他验证挑战,而不会中断协作执行流程。

TL;DR

  • CrewAI 多代理工作流在任何代理遇到网页任务中的 CAPTCHA 时会停滞
  • CapSolver 提供与 CrewAI 自定义工具注册系统兼容的工具模式
  • capsolver-agent 执行器通过 CapSolver 的 AI 服务处理验证并返回结构化结果
  • 支持 reCAPTCHA v2/v3(包括企业版)和 Cloudflare Turnstile
  • 集成仅需 15 行代码,使用 create_executor() 和 CrewAI 的 @tool 装饰器

为什么 CrewAI 代理需要 CAPTCHA 解决方案

CrewAI 使专业 AI 代理团队能够协作完成需要多种能力的任务。一个典型的团队可能包括一个浏览网页的研究员代理、一个处理数据的分析师代理和一个生成报告的写作者代理。当研究员代理在目标网站遇到 CAPTCHA 时,它无法继续执行 —— 由于 CrewAI 代理按顺序传递输出,整个团队的工作流会停止。

这种情况在 CrewAI 中被放大,因为多个代理可能需要网络访问。一个领导信息充实团队可能有一个代理抓取公司数据,另一个代理验证联系信息 —— 两者同时在不同网站遇到 CAPTCHA。没有解决机制的话,生产团队需要持续的人工监督,这违背了自主多代理编排的初衷。

根据 CapSolver 的生产数据,约 30% 的代理网络任务会遇到验证挑战。对于执行 10 个依赖网络任务的 CrewAI 团队来说,每次运行可能有 3 个潜在的停滞点 —— 没有自动解决机制时每个都需要人工干预。

开始前需要准备什么

安装所需包:

bash 复制代码
# CapSolver 核心引擎(必需依赖)
pip install git+https://github.com/capsolver-ai/capsolver-core.git

# CapSolver 代理工具
pip install git+https://github.com/capsolver-ai/capsolver-agent.git

# CrewAI 框架
pip install crewai crewai-tools

设置环境变量:

bash 复制代码
export CAPSOLVER_API_KEY="your-capsolver-api-key"
export OPENAI_API_KEY="your-openai-api-key"

确保您有一个 CapSolver 账户 并已加载 API 信用额度。CapSolver 定价页面 显示了每种 CAPTCHA 类型的当前费率。

步骤 1 — 为 CrewAI 创建 CAPTCHA 解决工具

要做什么

CrewAI 使用 @tool 装饰器定义的自定义工具。将 CapSolver 的执行器封装为 CrewAI 兼容的工具:

python 复制代码
import asyncio
from crewai import Agent, Task, Crew
from crewai.tools import tool
from capsolver_agent.schema import create_executor

# 创建 CapSolver 执行器
executor = create_executor(api_key="YOUR_CAPSOLVER_API_KEY")

@tool("解决 CAPTCHA")
def solve_captcha(captcha_type: str, website_url: str, website_key: str) -> str:
    """解决 CAPTCHA 挑战并返回令牌。
    在遇到网站上的 CAPTCHA 时使用此工具。
    
    参数:
        captcha_type: CAPTCHA 类型 - 'reCaptchaV2', 'reCaptchaV3' 或 'cloudflare'
        website_url: 包含 CAPTCHA 的页面完整 URL
        website_key: 网站密钥(data-sitekey 属性值)
    
    返回:
        用于表单提交的解决 CAPTCHA 令牌
    """
    result = asyncio.run(executor.execute("solve_captcha", {
        "captcha_type": captcha_type,
        "website_url": website_url,
        "website_key": website_key
    }))
    
    if result["success"]:
        return f"CAPTCHA 成功解决。令牌: {result['solution']['token']}"
    else:
        return f"CAPTCHA 解决失败: {result['error']}"

此工具遵循 CrewAI 的标准模式 —— @tool 装饰器将它注册为名称和描述,代理的 LLM 使用这些信息决定何时调用它。

为什么这很重要

CrewAI 代理根据描述选择工具。一个描述良好的 CAPTCHA 解决工具允许代理自主识别何时需要解决并使用正确参数调用工具。结构化的返回格式为代理提供清晰的成功或失败反馈。

避免的常见错误

  • 在 CrewAI 工具中直接使用 async:CrewAI 的工具执行是同步的。在工具函数中使用 asyncio.run() 包装异步 CapSolver 调用。
  • 模糊的工具描述:LLM 需要明确的描述来知道何时使用工具。包括具体的 CAPTCHA 类型名称和参数解释。

步骤 2 — 构建具有 CAPTCHA 功能的 CrewAI 代理

要做什么

创建一个具有 CAPTCHA 解决能力的 CrewAI 代理:

python 复制代码
from crewai import Agent

# 具有 CAPTCHA 解决能力的研究员
researcher = Agent(
    role="网络研究专家",
    goal="从网站收集数据,处理遇到的任何 CAPTCHA 挑战",
    backstory="""您是专家级网络研究员,从各种在线来源收集数据。
    当您在网站上遇到 CAPTCHA 挑战时,您使用 solve_captcha 工具清除它并继续研究。
    您知道如何识别 CAPTCHA 类型:reCaptchaV2(复选框或不可见)、reCaptchaV3(基于评分)和 cloudflare(Turnstile 小部件)。""",
    tools=[solve_captcha],
    verbose=True
)

对于需要多个具有网络访问权限的代理的团队,将 CAPTCHA 工具提供给可能遇到验证的每个代理:

python 复制代码
# 数据收集代理
data_collector = Agent(
    role="数据收集专家",
    goal="从目标网站提取结构化数据",
    backstory="您从网络来源收集数据并使用 solve_captcha 工具处理 CAPTCHA 挑战。",
    tools=[solve_captcha],
    verbose=True
)

# 验证代理
verifier = Agent(
    role="数据验证专家", 
    goal="将收集的数据与权威来源进行核对",
    backstory="您通过检查官方来源验证数据准确性,在需要时解决 CAPTCHAs。",
    tools=[solve_captcha],
    verbose=True
)

步骤 3 — 构建具有 CAPTCHA 意识的团队任务

要做什么

定义可能需要 CAPTCHA 解决的任务并将其组合成一个团队:

python 复制代码
from crewai import Task, Crew, Process

# 可能遇到 CAPTCHA 的任务
research_task = Task(
    description="""研究目标网站 {url}。
    如果遇到 CAPTCHA 挑战,请识别其类型和网站密钥,
    然后使用 solve_captcha 工具获取令牌。
    该网站使用 reCAPTCHA v2,网站密钥为:{site_key}。
    解决 CAPTCHA 后收集所需数据。""",
    expected_output="在需要时使用 CAPTCHA 令牌从目标网站收集数据",
    agent=researcher
)

# 分析任务(依赖研究结果)
analysis_task = Task(
    description="分析研究员收集的数据并生成摘要报告。",
    expected_output="收集数据的结构化分析报告",
    agent=data_collector
)

# 创建团队
crew = Crew(
    agents=[researcher, data_collector],
    tasks=[research_task, analysis_task],
    process=Process.sequential,
    verbose=True
)

# 运行团队
result = crew.kickoff(inputs={
    "url": "https://example.com/data",
    "site_key": "6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI"
})
print(result)

顺序流程确保研究员完成(包括 CAPTCHA 解决)后数据收集器才开始分析。对于并行执行,每个代理独立处理其分配网站上的 CAPTCHAs。

为什么这很重要

CrewAI 的优势在于多代理协作。通过将 CAPTCHA 解决能力赋予需要它的代理,团队可以端到端自主运行。当验证挑战出现时,无需人工干预 —— 代理会识别情况,调用工具并继续执行。

步骤 4 — 在 CrewAI 中处理多种 CAPTCHA 类型

不同网站使用不同的 CAPTCHA 系统。为常见场景创建专用工具:

python 复制代码
@tool("解决 reCAPTCHA v3")
def solve_recaptcha_v3(website_url: str, website_key: str, page_action: str = "verify") -> str:
    """使用高评分令牌解决 reCAPTCHA v3 挑战。
    当网站使用不可见的 reCAPTCHA v3(基于评分,无可见复选框)时使用。
    
    参数:
        website_url: 页面的完整 URL
        website_key: reCAPTCHA 网站密钥
        page_action: v3 评分的操作名称(默认: 'verify')
    """
    result = asyncio.run(executor.execute("solve_captcha", {
        "captcha_type": "reCaptchaV3",
        "website_url": website_url,
        "website_key": website_key,
        "page_action": page_action,
        "min_score": 0.7
    }))
    if result["success"]:
        return f"reCAPTCHA v3 已解决。令牌: {result['solution']['token']}"
    return f"失败: {result['error']}"

@tool("解决 Cloudflare Turnstile")
def solve_turnstile(website_url: str, website_key: str) -> str:
    """解决 Cloudflare Turnstile 挑战。
    当网站受 Cloudflare 保护并显示 Turnstile 小部件时使用。
    
    参数:
        website_url: 页面的完整 URL
        website_key: Turnstile 网站密钥(以 0x 开头)
    """
    result = asyncio.run(executor.execute("solve_captcha", {
        "captcha_type": "cloudflare",
        "website_url": website_url,
        "website_key": website_key
    }))
    if result["success"]:
        return f"Turnstile 已解决。令牌: {result['solution']['token']}"
    return f"失败: {result['error']}"
CAPTCHA 类型 使用的工具 平均解决时间 常见网站
reCAPTCHA v2 solve_captcha 5-12 秒 登录页面、表单
reCAPTCHA v3 solve_recaptcha_v3 3-8 秒 APIs、不可见保护
Cloudflare Turnstile solve_turnstile 2-5 秒 现代 SaaS、Shopify

CapSolver 的 reCAPTCHA 指南Cloudflare Turnstile 指南 提供了每种 CAPTCHA 类型的参数和行为的详细信息。

领取您的优惠码:在 CapSolver 仪表板 使用代码 WEBS,每次充值可额外获得 5% 的奖励。非常适合大规模运行 CrewAI 多代理工作流的团队。

步骤 5 — CrewAI + CapSolver 的生产模式

要做什么

对于生产级 CrewAI 部署,添加错误处理和重试逻辑:

python 复制代码
@tool("带重试的 CAPTCHA 解决")
def solve_captcha_robust(captcha_type: str, website_url: str, website_key: str) -> str:
    """带自动重试的 CAPTCHA 解决。
    最多尝试 3 次解决失败后报告失败。
    """
    for attempt in range(3):
        result = asyncio.run(executor.execute("solve_captcha", {
            "captcha_type": captcha_type,
            "website_url": website_url,
            "website_key": website_key
        }))
        if result["success"]:
            return f"第 {attempt + 1} 次尝试成功。令牌: {result['solution']['token']}"
        if attempt < 2:
            import time
            time.sleep(3)
    return f"3 次尝试后失败: {result.get('error', '未知错误')}"

对于处理多个网站的团队,启动前实现余额检查:

python 复制代码
@tool("检查 CAPTCHA 解决余额")
def check_balance() -> str:
    """检查 CAPTCHA 解决的剩余余额。"""
    result = asyncio.run(executor.execute("get_balance", {}))
    if result["success"]:
        return f"余额: ${result['balance']:.2f}"
    return "无法检查余额"

CapSolver 网络爬虫文档 涵盖了适用于 CrewAI 研究代理的高容量数据收集的其他模式。对于使用浏览器自动化的代理,CapSolver 插件 在开发过程中帮助识别 CAPTCHA 参数。

结论

将 CAPTCHA 解决方案集成到 CrewAI 多代理工作流中需要将 CapSolver 的执行器封装为 CrewAI 兼容的 @tool 函数,将这些工具分配给执行网络任务的代理,并组装能够通过验证挑战自主运行的团队。CapSolver 提供了 AI 驱动的解决基础设施,使您的多代理流水线无需人工干预即可持续运行。

首先创建一个单一的 CAPTCHA 解决工具,用一个代理进行测试,然后扩展到多个网络交互代理的完整团队。基于工具的方法意味着代理根据上下文决定何时解决,无需硬编码的 CAPTCHA 检测逻辑。

常见问题

多个 CrewAI 代理可以同时解决 CAPTCHA 吗?

是的。每个拥有 CAPTCHA 解决工具的代理都可以独立调用它。CapSolver 的 API 支持并发任务提交而无速率限制,因此并行团队执行不会产生冲突。每个解决操作都有唯一的请求 ID 用于调试。

CrewAI 如何知道代理需要解决 CAPTCHA?

代理的 LLM 根据工具描述和任务上下文进行推理。当任务涉及访问受 CAPTCHA 保护的资源时,代理会识别需求并使用适当参数调用解决工具。您也可以在任务描述中包含 CAPTCHA 详细信息以提供明确指导。

如果 CrewAI 工作流中的 CAPTCHA 解决失败会发生什么?

工具会向代理返回失败消息。代理可以重试、尝试其他参数,或在其任务输出中报告失败。CrewAI 的错误处理允许团队在某个任务遇到无法解决的 CAPTCHA 时继续执行剩余任务。

CapSolver 是否与 CrewAI 的分层流程模式兼容?

是的。在分层模式中,管理代理将任务委派给团队成员。如果委派的任务需要 CAPTCHA 解决,分配的代理会独立使用其工具。管理代理接收完成的结果,而无需了解 CAPTCHA 解决的细节。

每次 CrewAI 运行的 CAPTCHA 解决成本是多少?

成本取决于遇到的验证码数量及其类型。reCAPTCHA v2 每 1,000 次解决约需 2-3 美元,reCAPTCHA v3 每 1,000 次解决约需 1-2 美元,Cloudflare Turnstile 每 1,000 次解决约需 1-2 美元。一个典型的 CrewAI 研究团队每次运行遇到 3-5 个验证码,每次执行成本为 0.005-0.015 美元。

合规声明: 本博客提供的信息仅供参考。CapSolver 致力于遵守所有适用的法律和法规。严禁以非法、欺诈或滥用活动使用 CapSolver 网络,任何此类行为将受到调查。我们的验证码解决方案在确保 100% 合规的同时,帮助解决公共数据爬取过程中的验证码难题。我们鼓励负责任地使用我们的服务。如需更多信息,请访问我们的服务条款和隐私政策。

更多