CAPSOLVER
博客
如何在AutoGen代理中解决CAPTCHA

如何在AutoGen代理中解决CAPTCHA

Logo of CapSolver

Ethan Collins

Pattern Recognition Specialist

29-Jul-2026

微软的AutoGen框架使对话式AI代理能够通过多轮对话协作完成复杂任务。当AutoGen代理执行基于网络的操作——数据检索、表单提交或自动化研究时,验证码挑战会中断对话流程并阻止任务完成。CapSolver的capsolver-agent包提供了工具模式和异步执行器,可直接集成到AutoGen的函数调用机制中,使您的代理能够在对话中清除reCAPTCHA、Cloudflare Turnstile和其他验证挑战。

快速摘要

  • AutoGen的对话式代理在遇到验证码验证挑战时会停滞
  • CapSolver通过AutoGen的register_function API作为可调用工具集成
  • capsolver-agent执行器异步处理并返回结构化结果
  • 支持reCAPTCHA v2/v3(包括企业版)和Cloudflare Turnstile
  • 适用于AutoGen的双代理聊天和群组聊天模式

为什么AutoGen代理需要验证码解决

AutoGen的多代理架构使用对话模式,代理通过消息协作。典型的设置包括一个助理代理(AI)和一个用户代理(执行代码和工具)。当助理确定需要验证码解决的网络任务时,需要注册函数调用——否则对话循环会停滞,无法继续。

在AutoGen的群组聊天场景中,问题被放大。多个代理可能需要同时访问网络:一个代理研究公司数据,另一个验证联系信息,第三个检查法规文件。每个代理可能在不同网站遇到验证码。没有解决机制,整个群组对话会在第一个验证墙处停止。

根据CapSolver的生产数据,约30%的代理网络任务会遇到验证挑战。对于执行10个依赖网络步骤的AutoGen工作流,这意味着每次对话可能有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

# AutoGen框架
pip install autogen-agentchat

设置环境变量:

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

您需要一个CapSolver账户并加载API积分。

步骤1 — 将验证码解决注册为AutoGen函数

操作内容

AutoGen使用register_function使工具对代理可用。创建验证码解决函数并注册:

python 复制代码
import asyncio
from autogen import AssistantAgent, UserProxyAgent, config_list_from_json
from capsolver_agent.schema import create_executor

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

def solve_captcha(
    captcha_type: str,
    website_url: str,
    website_key: str,
    page_action: str = "",
    min_score: float = 0.7
) -> str:
    """解决验证码挑战并返回验证令牌。
    
    Args:
        captcha_type: 验证码类型 - 'reCaptchaV2', 'reCaptchaV3' 或 'cloudflare'
        website_url: 包含验证码的页面完整URL
        website_key: 网站密钥(data-sitekey属性)
        page_action: reCAPTCHA v3的动作名称(可选)
        min_score: reCAPTCHA v3的最低分数(默认0.7)
    
    Returns:
        解决的验证码令牌或错误信息
    """
    params = {
        "captcha_type": captcha_type,
        "website_url": website_url,
        "website_key": website_key
    }
    if page_action and captcha_type == "reCaptchaV3":
        params["page_action"] = page_action
        params["min_score"] = min_score
    
    result = asyncio.run(executor.execute("solve_captcha", params))
    
    if result["success"]:
        token = result["solution"]["token"]
        return f"验证码成功解决。令牌(前80个字符):{token[:80]}..."
    return f"验证码解决失败:{result['error']}"

为什么这很重要

AutoGen的函数注册是赋予代理可执行能力的标准方式。助理代理会看到函数描述,通过文档字符串理解其参数,并在对话需要验证码解决时调用它。这完全遵循AutoGen的设计模式。

步骤2 — 设置AutoGen双代理聊天

操作内容

创建具有验证码解决能力的助理代理和用户代理对:

python 复制代码
# LLM配置
llm_config = {
    "config_list": [{"model": "gpt-4o", "api_key": "YOUR_OPENAI_KEY"}],
    "temperature": 0
}

# 助理代理(决定做什么的AI)
assistant = AssistantAgent(
    name="web_assistant",
    system_message="""您是具有验证码解决能力的网络研究助理。
    当任务需要访问受验证码保护的网站时,请使用solve_captcha
    函数并提供以下参数:
    - captcha_type: 'reCaptchaV2', 'reCaptchaV3' 或 'cloudflare'
    - website_url: 页面完整URL
    - website_key: 页面中的网站密钥
    
    解决后,将令牌返回给用户以提交表单。""",
    llm_config=llm_config
)

# 用户代理(代表助理执行函数)
user_proxy = UserProxyAgent(
    name="user_proxy",
    human_input_mode="NEVER",
    max_consecutive_auto_reply=5,
    code_execution_config={"work_dir": "workspace", "use_docker": False}
)

# 注册验证码解决函数
from autogen import register_function

register_function(
    solve_captcha,
    caller=assistant,      # 助理决定何时调用
    executor=user_proxy,   # 用户代理执行函数
    name="solve_captcha",
    description="解决验证码挑战(reCAPTCHA v2/v3 或 Cloudflare Turnstile)并返回验证令牌"
)

为什么这很重要

双代理模式是AutoGen的核心架构。助理推理任务并决定在需要时调用solve_captcha。用户代理执行函数调用,结果返回给助理,助理随后继续对话并可用令牌。

步骤3 — 运行验证码解决对话

操作内容

启动需要验证码解决的对话:

python 复制代码
# 启动对话
user_proxy.initiate_chat(
    assistant,
    message="""我需要访问受reCAPTCHA v2保护的页面。
    URL: https://example.com/data-portal
    网站密钥: 6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI
    
    请解决验证码并提供令牌。"""
)

对话流程:

  1. 用户代理发送任务消息
  2. 助理识别需要验证码解决
  3. 助理调用solve_captcha并传递参数
  4. 用户代理执行函数(CapSolver解决)
  5. 结果返回给助理
  6. 助理呈现令牌以完成任务

步骤4 — 在AutoGen群组聊天中使用

操作内容

对于具有多个代理的复杂工作流,请在群组聊天中注册验证码解决:

python 复制代码
from autogen import GroupChat, GroupChatManager

# 专业代理
researcher = AssistantAgent(
    name="researcher",
    system_message="您研究网站并收集数据。遇到验证挑战时使用solve_captcha。",
    llm_config=llm_config
)

analyst = AssistantAgent(
    name="analyst",
    system_message="您分析收集的数据并生成见解。",
    llm_config=llm_config
)

executor_agent = UserProxyAgent(
    name="executor",
    human_input_mode="NEVER",
    code_execution_config={"work_dir": "workspace", "use_docker": False}
)

# 为researcher注册验证码解决
register_function(
    solve_captcha,
    caller=researcher,
    executor=executor_agent,
    name="solve_captcha",
    description="解决网站上的验证码挑战"
)

# 创建群组聊天
group_chat = GroupChat(
    agents=[researcher, analyst, executor_agent],
    messages=[],
    max_round=10
)

manager = GroupChatManager(groupchat=group_chat, llm_config=llm_config)

# 启动群组研究任务
executor_agent.initiate_chat(
    manager,
    message="研究https://example.com/reports的数据。它受reCAPTCHA v2保护(密钥:6Le...)。解决验证码,收集数据,然后分析它。"
)
验证码类型 任务类型参数 平均解决时间 常见网站
reCAPTCHA v2 reCaptchaV2 5-12秒 登录页面、表单、门户
reCAPTCHA v3 reCaptchaV3 3-8秒 APIs、隐形保护
Cloudflare Turnstile cloudflare 2-5秒 现代SaaS、Shopify网站

CapSolver的reCAPTCHA指南Cloudflare Turnstile文档提供了每种验证码类型的附加参数细节。

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

步骤5 — 生产模式和错误处理

操作内容

为生产部署添加重试逻辑和余额检查:

python 复制代码
def solve_captcha_with_retry(
    captcha_type: str,
    website_url: str,
    website_key: str,
    max_retries: int = 3
) -> str:
    """在失败时自动重试的验证码解决。"""
    for attempt in range(max_retries):
        params = {
            "captcha_type": captcha_type,
            "website_url": website_url,
            "website_key": website_key
        }
        result = asyncio.run(executor.execute("solve_captcha", params))
        
        if result["success"]:
            return f"解决成功(尝试 {attempt+1})。令牌:{result['solution']['token'][:80]}..."
        
        if attempt < max_retries - 1:
            import time
            time.sleep(3)
    
    return f"尝试{max_retries}次后失败:{result.get('error', '未知')}"

def check_captcha_balance() -> str:
    """检查剩余的验证码解决积分。"""
    result = asyncio.run(executor.execute("get_balance", {}))
    if result["success"]:
        return f"CapSolver余额:${result['balance']:.2f}"
    return "无法检索余额"

注册两个函数以实现全面功能:

python 复制代码
register_function(solve_captcha_with_retry, caller=assistant, executor=user_proxy,
    name="solve_captcha", description="带有重试逻辑的验证码解决")
register_function(check_captcha_balance, caller=assistant, executor=user_proxy,
    name="check_balance", description="检查验证码解决积分余额")

CapSolver的网络爬虫文档涵盖了适用于AutoGen研究代理的高容量数据收集的其他模式。对于基于浏览器的自动化,CapSolver扩展有助于在开发过程中识别验证码参数。

结论

将验证码解决集成到AutoGen代理中需要通过register_function注册解决函数,将其连接到CapSolver的执行器,并让助理代理在对话中决定何时调用它。CapSolver提供AI驱动的解决基础设施,可在3-12秒内清除验证挑战,使您的AutoGen对话无需人工干预即可流畅进行。

从简单的任务开始使用双代理模式,然后扩展到复杂多代理工作流的群组聊天。函数注册方法意味着代理会根据对话上下文自然决定何时解决,无需硬编码的验证码检测。

FAQ

CapSolver是否与AutoGen的异步执行兼容?

是的。虽然AutoGen的register_function使用同步函数签名,但您可以在注册的函数内部使用asyncio.run()包装CapSolver的异步执行器。这在AutoGen的同步函数调用接口中提供了异步解决的优势(连接池、并发请求)。

多个AutoGen代理可以共享同一个验证码解决工具吗?

是的。在群组聊天中将相同解决函数注册给多个调用代理。每个代理可以在其特定任务需要时独立调用验证码解决。CapSolver的API会处理并发请求而不会发生冲突。

AutoGen如何决定何时调用验证码解决函数?

AutoGen的助理代理使用函数描述和对话上下文来决定。当任务提到访问受验证码保护的资源时,助理会识别到需要并生成带有适当参数的函数调用。您也可以在系统消息中包含显式指令。

如果验证码解决在对话中失败会怎样?

函数会向助理代理返回错误信息。助理可以重试并使用不同参数,请求澄清,或报告失败。AutoGen的对话循环会继续运行——失败作为对话的一部分处理,而不是导致系统崩溃。

每个AutoGen对话的验证码解决成本是多少?

遇到1-3个验证码的典型AutoGen对话成本为0.002-0.009美元。reCAPTCHA v2每1000次解决成本约2-3美元,Cloudflare Turnstile每1000次解决成本约1-2美元。对于大多数工作流,验证码解决成本相对于LLM API成本可以忽略不计。

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

更多