
Ethan Collins
Pattern Recognition Specialist

OpenAI 代理 SDK 提供了一个生产就绪的框架,用于构建具有工具调用功能的 AI 代理。当这些代理与受 reCAPTCHA 保护的网站交互时,需要一种编程方式清除验证挑战。CapSolver 的 capsolver-agent 包通过 @function_tool 装饰器与 OpenAI 代理 SDK 集成,使您的代理能够作为其自主工作流的一部分解决 reCAPTCHA v2 和 v3 挑战。
@function_tool 注册可调用工具——CapSolver 原生符合这一模式capsolver-agent 的 execute_tool() 函数将解决过程封装为一个与 SDK 兼容的异步调用OpenAI 代理 SDK 使开发人员能够构建使用工具执行多步骤任务的代理。当代理的任务涉及网络交互——访问登录后的数据、提交表单或从受保护页面收集信息时,reCAPTCHA 挑战会阻止进度。代理可以推理下一步该做什么,但如果没有解决工具,它无法生成继续所需的验证令牌。
reCAPTCHA 在代理需要访问的网站上尤为常见:登录门户、受速率限制的数据 API、政府数据库和 SaaS 平台。 Google 的 reCAPTCHA 文档 指出,全球有超过 500 万个网站使用 reCAPTCHA,使其成为代理最可能遇到的验证挑战。
CapSolver 的架构与 OpenAI 代理 SDK 的设计完美契合:代理决定 要做什么(包括何时解决 CAPTCHA),而 CapSolver 通过其 AI 服务处理 解决它。这种职责分离保持了代理逻辑的简洁性,同时增加了清除验证的能力。
安装所需包:
# CapSolver 核心引擎
pip install git+https://github.com/capsolver-ai/capsolver-core.git
# CapSolver 代理工具
pip install git+https://github.com/capsolver-ai/capsolver-agent.git
# OpenAI 代理 SDK
pip install openai-agents
设置环境变量:
export CAPSOLVER_API_KEY="your-capsolver-api-key"
export OPENAI_API_KEY="your-openai-api-key"
您需要一个 CapSolver 账户 并拥有积分。SDK 当前支持 reCAPTCHA v2、reCAPTCHA v3(包括企业版)和 Cloudflare Turnstile——覆盖代理最常遇到的验证类型。
OpenAI 代理 SDK 使用 @function_tool 定义代理可以调用的工具。将 CapSolver 的执行器包装成这种模式:
from agents import Agent, Runner, function_tool
from capsolver_agent.schema import execute_tool
@function_tool
async def solve_recaptcha(
website_url: str,
website_key: str,
captcha_type: str = "reCaptchaV2"
) -> str:
"""在网站上解决 reCAPTCHA 挑战并返回验证令牌。
在需要绕过网页上的 reCAPTCHA 验证时使用此工具。
参数:
website_url: 包含 reCAPTCHA 的页面完整 URL
website_key: reCAPTCHA 网站密钥(在 data-sitekey 属性中找到)
captcha_type: 可为 'reCaptchaV2' 或 'reCaptchaV3'(默认: reCaptchaV2)
返回:
要作为 g-recaptcha-response 提交的已解决 reCAPTCHA 令牌
"""
result = await execute_tool("solve_captcha", {
"captcha_type": captcha_type,
"website_url": website_url,
"website_key": website_key
}, api_key="YOUR_CAPSOLVER_API_KEY")
if result["success"]:
return f"reCAPTCHA 已解决。令牌: {result['solution']['token']}"
return f"解决失败: {result['error']}"
capsolver-agent 中的 execute_tool() 函数是一个单次异步调用,处理完整的解决生命周期——创建任务、轮询结果并返回结构化输出。它专门设计用于需要一次解决而无需构建完整执行器循环的场景。
OpenAI 代理 SDK 的 @function_tool 装饰器会自动生成模型需要的 JSON 模式。代理看到工具描述,理解何时使用它,并通过 SDK 内置的函数调用机制用正确的参数调用它。
async def 定义工具函数,并使用 await 调用 CapSolver。构建一个包含 reCAPTCHA 解决工具的 OpenAI 代理:
from agents import Agent, Runner
# 创建具有 CAPTCHA 解决能力的代理
captcha_agent = Agent(
name="Web Access Agent",
instructions="""您是一个帮助用户与网站交互的网络访问代理。当任务需要访问受 reCAPTCHA 保护的页面时,请使用 solve_recaptcha 工具获取验证令牌。
对于 reCAPTCHA v2: 使用 captcha_type='reCaptchaV2'
对于 reCAPTCHA v3: 使用 captcha_type='reCaptchaV3'
始终提供用户请求中的精确 website_url 和 website_key。""",
tools=[solve_recaptcha]
)
# 运行代理
async def main():
result = await Runner.run(
captcha_agent,
"我需要访问 https://example.com/login,它有 reCAPTCHA v2。"
"网站密钥是 6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI。"
"请解决它并给我令牌。"
)
print(result.final_output)
import asyncio
asyncio.run(main())
代理处理请求,识别需要解决 reCAPTCHA,使用提供的参数调用工具,并将令牌返回给用户。
OpenAI 代理 SDK 自动处理对话循环、工具分发和结果集成。您只需定义一次工具,SDK 的运行时管理其调用的时间和方式。这比手动构建函数调用循环更简单。
reCAPTCHA v3 是基于分数且不可见的——它需要 page_action 参数并返回一个带有相关分数的令牌。创建一个专用工具:
@function_tool
async def solve_recaptcha_v3(
website_url: str,
website_key: str,
page_action: str = "verify",
min_score: float = 0.7
) -> str:
"""解决 reCAPTCHA v3(不可见、基于分数)挑战。
当网站使用 reCAPTCHA v3 时使用此工具——没有可见的复选框,
但网站在后台验证基于分数的令牌。
参数:
website_url: 页面的完整 URL
website_key: reCAPTCHA v3 网站密钥
page_action: 用于评分的操作名称(例如,'login'、'submit'、'verify')
min_score: 最低可接受分数(0.0-1.0,默认 0.7)
"""
result = await execute_tool("solve_captcha", {
"captcha_type": "reCaptchaV3",
"website_url": website_url,
"website_key": website_key,
"page_action": page_action,
"min_score": min_score
}, api_key="YOUR_CAPSOLVER_API_KEY")
if result["success"]:
return f"reCAPTCHA v3 以高分数解决。令牌: {result['solution']['token']}"
return f"解决失败: {result['error']}"
reCAPTCHA v3 解决指南 解释了如何为不同网站识别正确的 page_action 参数。常见操作包括 login、submit、homepage 和 verify。
将 reCAPTCHA 解决与其他工具结合,创建执行完整网络任务的代理:
from agents import Agent, Runner, function_tool
@function_tool
async def solve_recaptcha(website_url: str, website_key: str, captcha_type: str = "reCaptchaV2") -> str:
"""解决 reCAPTCHA 并返回令牌。"""
result = await execute_tool("solve_captcha", {
"captcha_type": captcha_type,
"website_url": website_url,
"website_key": website_key
}, api_key="YOUR_CAPSOLVER_API_KEY")
if result["success"]:
return f"令牌: {result['solution']['token']}"
return f"失败: {result['error']}"
@function_tool
async def check_solver_balance() -> str:
"""检查剩余的 CAPTCHA 解决积分。"""
result = await execute_tool("get_balance", {}, api_key="YOUR_CAPSOLVER_API_KEY")
if result["success"]:
return f"余额: ${result['balance']:.2f}"
return "无法检查余额"
# 多功能代理
web_agent = Agent(
name="自主网络代理",
instructions="""您帮助用户访问可能受 reCAPTCHA 保护的网络资源。您可以解决 reCAPTCHA v2(可见复选框)和 v3(不可见基于分数)。如果用户询问成本,请在解决前检查余额。
解决 reCAPTCHA 时:
- v2: 使用 captcha_type='reCaptchaV2'
- v3: 使用 captcha_type='reCaptchaV3' 并在已知时包含 page_action
清晰返回令牌,以便用户可以将其提交到表单中。""",
tools=[solve_recaptcha, check_solver_balance]
)
async def run_web_agent(task: str):
result = await Runner.run(web_agent, task)
return result.final_output
这种模式适用于需要在单个会话中处理不同网站上多个 reCAPTCHA 版本的代理。
领取您的优惠码:在 CapSolver 仪表板 使用代码 WEBS,每次充值可获得额外 5% 的奖励。非常适合构建具有网络访问能力的 OpenAI 代理的开发人员。
对于具有 reCAPTCHA 解决功能的生产 OpenAI 代理:
import os
from agents import Agent, Runner, function_tool
from capsolver_agent.schema import create_executor
# 带自定义设置的生产执行器
executor = create_executor(
api_key=os.environ["CAPSOLVER_API_KEY"],
default_timeout=90, # 90 秒超时
polling_interval=3 # 每 3 秒轮询一次
)
@function_tool
async def solve_recaptcha_production(
website_url: str,
website_key: str,
captcha_type: str = "reCaptchaV2"
) -> str:
"""具有重试逻辑的生产级 reCAPTCHA 解决器。"""
for attempt in range(3):
result = await 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:
await asyncio.sleep(2)
return f"三次尝试后失败: {result.get('error')}"
关键的生产注意事项:
default_timeoutCapSolver API 文档 涵盖了在生产环境中优化解决时间的其他配置选项。对于识别目标网站上的 reCAPTCHA 参数,CapSolver 浏览器扩展 提供了自动检测功能。
将 reCAPTCHA 解决集成到 OpenAI 代理 SDK 中需要定义一个包装 CapSolver 的 @function_tool,然后将其分配给您的代理。SDK 的运行时会自动处理工具分发——代理决定何时需要 reCAPTCHA 解决并用适当的参数调用工具。CapSolver 提供了 AI 驱动的解决基础设施,为 reCAPTCHA v2、v3 和企业版生成有效令牌。
从单个 solve_recaptcha 工具开始,用您的代理在已知目标上测试它,然后添加 v3 支持和生产重试逻辑。OpenAI 代理 SDK 的异步架构与 CapSolver 的异步 API 自然契合,使集成干净且高效。
是的。SDK 完全异步,CapSolver 的 execute_tool() 是异步函数。@function_tool 装饰器原生支持 async def 函数,因此 CAPTCHA 解决不会阻塞代理的事件循环。
是的。在参数中传递 enterprise: true。reCAPTCHA 企业版使用相同的 v2/v3 任务类型,但可能需要 s 令牌参数。CapSolver 通过同一 API 透明地处理企业版。
在代理的指令中包含关于识别 v2 与 v3 的指导。或者在任务提示中提供 CAPTCHA 类型。reCAPTCHA 识别指南 解释了区别:v2 显示可见小部件,而 v3 通过脚本标签无形加载。
reCAPTCHA v2 每 1000 次解决约 2-3 美元,reCAPTCHA v3 每 1000 次解决约 1-2 美元。对于每会话解决 10 个 CAPTCHA 的代理,成本约为 0.02-0.03 美元/会话——与自主任务完成的价值相比可以忽略不计。
是的。您可以创建一个专门的“CAPTCHA 解决器”代理,并在主代理遇到验证挑战时将其交接给它。解决器代理解决 CAPTCHA 并将令牌返回给主代理。这保持了代理职责的清晰分离。