
Ethan Collins
Pattern Recognition Specialist

微软的AutoGen框架使对话式AI代理能够通过多轮对话协作完成复杂任务。当AutoGen代理执行基于网络的操作——数据检索、表单提交或自动化研究时,验证码挑战会中断对话流程并阻止任务完成。CapSolver的capsolver-agent包提供了工具模式和异步执行器,可直接集成到AutoGen的函数调用机制中,使您的代理能够在对话中清除reCAPTCHA、Cloudflare Turnstile和其他验证挑战。
register_function API作为可调用工具集成capsolver-agent执行器异步处理并返回结构化结果AutoGen的多代理架构使用对话模式,代理通过消息协作。典型的设置包括一个助理代理(AI)和一个用户代理(执行代码和工具)。当助理确定需要验证码解决的网络任务时,需要注册函数调用——否则对话循环会停滞,无法继续。
在AutoGen的群组聊天场景中,问题被放大。多个代理可能需要同时访问网络:一个代理研究公司数据,另一个验证联系信息,第三个检查法规文件。每个代理可能在不同网站遇到验证码。没有解决机制,整个群组对话会在第一个验证墙处停止。
根据CapSolver的生产数据,约30%的代理网络任务会遇到验证挑战。对于执行10个依赖网络步骤的AutoGen工作流,这意味着每次对话可能有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
# AutoGen框架
pip install autogen-agentchat
设置环境变量:
export CAPSOLVER_API_KEY="your-capsolver-api-key"
export OPENAI_API_KEY="your-openai-api-key"
您需要一个CapSolver账户并加载API积分。
AutoGen使用register_function使工具对代理可用。创建验证码解决函数并注册:
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的设计模式。
创建具有验证码解决能力的助理代理和用户代理对:
# 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。用户代理执行函数调用,结果返回给助理,助理随后继续对话并可用令牌。
启动需要验证码解决的对话:
# 启动对话
user_proxy.initiate_chat(
assistant,
message="""我需要访问受reCAPTCHA v2保护的页面。
URL: https://example.com/data-portal
网站密钥: 6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI
请解决验证码并提供令牌。"""
)
对话流程:
solve_captcha并传递参数对于具有多个代理的复杂工作流,请在群组聊天中注册验证码解决:
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多代理工作流的团队。
为生产部署添加重试逻辑和余额检查:
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 "无法检索余额"
注册两个函数以实现全面功能:
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对话无需人工干预即可流畅进行。
从简单的任务开始使用双代理模式,然后扩展到复杂多代理工作流的群组聊天。函数注册方法意味着代理会根据对话上下文自然决定何时解决,无需硬编码的验证码检测。
是的。虽然AutoGen的register_function使用同步函数签名,但您可以在注册的函数内部使用asyncio.run()包装CapSolver的异步执行器。这在AutoGen的同步函数调用接口中提供了异步解决的优势(连接池、并发请求)。
是的。在群组聊天中将相同解决函数注册给多个调用代理。每个代理可以在其特定任务需要时独立调用验证码解决。CapSolver的API会处理并发请求而不会发生冲突。
AutoGen的助理代理使用函数描述和对话上下文来决定。当任务提到访问受验证码保护的资源时,助理会识别到需要并生成带有适当参数的函数调用。您也可以在系统消息中包含显式指令。
函数会向助理代理返回错误信息。助理可以重试并使用不同参数,请求澄清,或报告失败。AutoGen的对话循环会继续运行——失败作为对话的一部分处理,而不是导致系统崩溃。
遇到1-3个验证码的典型AutoGen对话成本为0.002-0.009美元。reCAPTCHA v2每1000次解决成本约2-3美元,Cloudflare Turnstile每1000次解决成本约1-2美元。对于大多数工作流,验证码解决成本相对于LLM API成本可以忽略不计。