
Ethan Collins
Pattern Recognition Specialist

CrewAI 协调多个 AI 代理共同完成复杂任务 —— 研究、数据收集、内容创作和工作流自动化。当 CrewAI 中的任何代理在网页交互过程中遇到 CAPTCHA 挑战时,整个多代理流水线都会停滞。CapSolver 的 capsolver-agent 包可直接集成到 CrewAI 工作流中,使您的代理能够清除 reCAPTCHA、Cloudflare Turnstile 和其他验证挑战,而不会中断协作执行流程。
capsolver-agent 执行器通过 CapSolver 的 AI 服务处理验证并返回结构化结果create_executor() 和 CrewAI 的 @tool 装饰器CrewAI 使专业 AI 代理团队能够协作完成需要多种能力的任务。一个典型的团队可能包括一个浏览网页的研究员代理、一个处理数据的分析师代理和一个生成报告的写作者代理。当研究员代理在目标网站遇到 CAPTCHA 时,它无法继续执行 —— 由于 CrewAI 代理按顺序传递输出,整个团队的工作流会停止。
这种情况在 CrewAI 中被放大,因为多个代理可能需要网络访问。一个领导信息充实团队可能有一个代理抓取公司数据,另一个代理验证联系信息 —— 两者同时在不同网站遇到 CAPTCHA。没有解决机制的话,生产团队需要持续的人工监督,这违背了自主多代理编排的初衷。
根据 CapSolver 的生产数据,约 30% 的代理网络任务会遇到验证挑战。对于执行 10 个依赖网络任务的 CrewAI 团队来说,每次运行可能有 3 个潜在的停滞点 —— 没有自动解决机制时每个都需要人工干预。
安装所需包:
# 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
设置环境变量:
export CAPSOLVER_API_KEY="your-capsolver-api-key"
export OPENAI_API_KEY="your-openai-api-key"
确保您有一个 CapSolver 账户 并已加载 API 信用额度。CapSolver 定价页面 显示了每种 CAPTCHA 类型的当前费率。
CrewAI 使用 @tool 装饰器定义的自定义工具。将 CapSolver 的执行器封装为 CrewAI 兼容的工具:
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 解决工具允许代理自主识别何时需要解决并使用正确参数调用工具。结构化的返回格式为代理提供清晰的成功或失败反馈。
asyncio.run() 包装异步 CapSolver 调用。创建一个具有 CAPTCHA 解决能力的 CrewAI 代理:
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 工具提供给可能遇到验证的每个代理:
# 数据收集代理
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
)
定义可能需要 CAPTCHA 解决的任务并将其组合成一个团队:
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 解决能力赋予需要它的代理,团队可以端到端自主运行。当验证挑战出现时,无需人工干预 —— 代理会识别情况,调用工具并继续执行。
不同网站使用不同的 CAPTCHA 系统。为常见场景创建专用工具:
@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 多代理工作流的团队。
对于生产级 CrewAI 部署,添加错误处理和重试逻辑:
@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', '未知错误')}"
对于处理多个网站的团队,启动前实现余额检查:
@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 检测逻辑。
是的。每个拥有 CAPTCHA 解决工具的代理都可以独立调用它。CapSolver 的 API 支持并发任务提交而无速率限制,因此并行团队执行不会产生冲突。每个解决操作都有唯一的请求 ID 用于调试。
代理的 LLM 根据工具描述和任务上下文进行推理。当任务涉及访问受 CAPTCHA 保护的资源时,代理会识别需求并使用适当参数调用解决工具。您也可以在任务描述中包含 CAPTCHA 详细信息以提供明确指导。
工具会向代理返回失败消息。代理可以重试、尝试其他参数,或在其任务输出中报告失败。CrewAI 的错误处理允许团队在某个任务遇到无法解决的 CAPTCHA 时继续执行剩余任务。
是的。在分层模式中,管理代理将任务委派给团队成员。如果委派的任务需要 CAPTCHA 解决,分配的代理会独立使用其工具。管理代理接收完成的结果,而无需了解 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 美元。