Langchain •agent runner


代理自动化·浪链
将 CapSolver 添加到您的 LangChain 代理 — 通过一次工具调用解决验证码
CapSolver Agent 通过 get_langchain_tools() 将现成的 LangChain BaseTools 添加到您的 ReAct 或 LangGraph 代理中。当验证码出现时,它会调用求解器,获取令牌,然后继续 - 由 LangChain、浏览器工具和 MCP 的本机 SDK 提供支持。
代理验证码工作流程
检测
出现验证码或验证
提取物
URL、站点密钥、元数据
解决
CapSolver 任务
返回
解决方案返回给代理
继续
代理恢复工作流程
将验证码解决添加到您的 LangChain 代理中
专为代理循环而构建
当代理工作流程接触真实网站并且可以通过流量验证或验证码挑战来停止时,LangChain 验证码求解器非常有用。
工具原生模式
将 CapSolver 公开为可调用的 LangChain 工具并提供清晰的输入,使代理仅在需要时请求解决验证码。
生产恢复
处理重试、错误、请求 ID 和超时,而不会中断代理工作流程。
清晰的工具边界
您的代理控制工作流程。 CapSolver 处理求解任务并返回结果。
为什么浪链代理在生产中需要验证码恢复
LangChain是为通过工具采取行动的代理而设计的。在浏览器自动化工作流程中,此循环通常会被 reCAPTCHA 或 Cloudflare Turnstile 中断。正确的解决方案不是将 CapSolver 转变为代理框架,而是使 CapSolver 成为每个现实世界的浏览器代理在需要时都可以调用的代理就绪验证码基础设施层。
工作流层
LangChain工作流程中的角色
CapSolver 添加了什么
浪链代理
规划任务、选择工具并维护状态。
一个可调用的验证码恢复工具,仅在需要时调用。
CapSolver API
创建特定于挑战的任务并返回解决方案。
通过 API 处理 reCAPTCHA v2/v3、Cloudflare Challenge /Turnstile 以及其他支持的挑战。
可观察性
跟踪工具调用、错误和工作流程状态
CAPTCHA 任务 ID、质询类型、解决状态和错误代码/重试。
建筑
职责清晰:LangChain 协调,CapSolver 解决验证码
使用 CapSolver 作为 LangChain 工作流程中的重点工具。代理提供网站 URL、站点密钥和质询详细信息。该工具创建任务、检查结果并返回解决方案。 LangChain 管理代理工作流程,而 CapSolver 处理验证码解决。
检测
目标页面上存在验证码质询。
提取物
收集 websiteURL、websiteKey 和挑战类型。
创建
使用正确的任务对象调用 CapSolver createTask。
民意调查
检查 getTaskResult 直到任务准备好或超时。对速率限制错误使用重试延迟。
继续
该工具返回一个结构化代币,LangChain代理恢复原来的任务。
观察
记录任务 ID、状态和错误代码/重试。
快速入门
使用 CapSolver API 构建 Python LangChain 工具
包裹 CapSolver 的createTask+getTaskResult在一个工具中:输入结构化信息,输出结构化结果。轮询使用固定间隔和整体超时。
# pip install "capsolver-agent[langchain]" langchain-openai langgraph
# export CAPSOLVER_API_KEY=CAP-XXXXXX
# export OPENAI_API_KEY=sk-XXXXXX
import asyncio
import os
from langchain_core.tools import tool
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent
from capsolver_agent.schema import create_executor
from _env import load_example_env # demo only: reads repo-root .env
load_example_env()
# 1. Wrap CapSolver as one LangChain tool.
# createTask + result polling are handled inside capsolver-agent.
executor = create_executor() # key from CAPSOLVER_API_KEY
@tool
async def solve_captcha(captcha_type: str, website_url: str, website_key: str) -> dict:
"""Solve a captcha (reCaptchaV2 / reCaptchaV3 / cloudflare) and return its token.
captcha_type: captcha family, e.g. reCaptchaV2
website_url: full URL of the page that loads the captcha
website_key: site key found on that page
"""
result = await executor.execute(
"solve_captcha",
{"captcha_type": captcha_type, "website_url": website_url, "website_key": website_key},
)
if not result.get("success"):
return {"ok": False, "error": result.get("error", "unknown error")}
return {"ok": True, "token": result["solution"]["token"]}
# 2. Any OpenAI-compatible chat model works; the LLM decides when to call the tool.
llm = ChatOpenAI(model=os.environ.get("OPENAI_MODEL", "gpt-4o"), temperature=0)
# 3. Give the tool to a ReAct agent.
agent = create_react_agent(llm, [solve_captcha])
# 4. Run.
PROMPT = (
"Solve the reCaptchaV2 at https://www.google.com/recaptcha/api2/demo "
"with site key 6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ- "
"and report the first 40 characters of the token."
)
result = asyncio.run(agent.ainvoke({"messages": [("user", PROMPT)]}))
print(result["messages"][-1].content)
将工具添加到LangChain代理中
get_langchain_tools()返回位于代理已使用的浏览器、数据提取或工作流程工具旁边的标准 BaseTools。
# pip install "capsolver-agent[langchain]" langchain-openai langgraph
# export CAPSOLVER_API_KEY=CAP-XXXXXX
# export OPENAI_API_KEY=sk-XXXXXX
import asyncio
import os
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent
from capsolver_agent.langchain_tools import get_langchain_tools
from _env import load_example_env # demo only: reads repo-root .env
load_example_env()
# CapSolver's ready-made LangChain BaseTools, backed by capsolver-core:
# solve_captcha, detect_captchas, solve_on_page, get_balance, get_supported_captchas
tools = get_langchain_tools(api_key=os.environ["CAPSOLVER_API_KEY"])
llm = ChatOpenAI(model=os.environ.get("OPENAI_MODEL", "gpt-4o"), temperature=0)
# The solver tools sit beside the browser / data / workflow tools your agent already uses
agent = create_react_agent(llm, tools)
result = asyncio.run( # CapSolver tools are async, so use ainvoke
agent.ainvoke(
{
"messages": [
{
"role": "user",
"content": "Solve the reCaptchaV2 at "
"https://www.google.com/recaptcha/api2/demo with site key "
"6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ- and report the "
"first 40 characters of the token.",
}
]
}
)
)
print(result["messages"][-1].content)
并直接导入工具——不需要 JavaScript 或 TypeScript 包。
生产最佳实践
为 LangChain 代理构建生产就绪的验证码解决方案
01
秘密管理
将 CAPSOLVER_API_KEY 存储在环境变量或秘密管理器中。
为什么
防止提示、日志和存储库中的意外密钥泄露。
02
工具架构
保持工具输入范围窄并键入(website_url、website_key)。
为什么
减少模型混乱和不安全参数的生成。
03
检测
从页面上下文中读取挑战类型和站点密钥。
为什么
模型不应从原始文本中猜测页面参数。
04
轮询并重试
按设定的时间间隔检查任务状态,超时后停止。使用退避重试 API 错误。
为什么
防止不必要的负载和失控的代理循环。
05
记录
记录task_id、挑战类型、状态和错误代码/重试。
为什么
使调试和支持变得更加容易。
06
错误处理
停止重复失败,并在需要时将任务发送给人工审核。
为什么
防止对敏感或不确定的工作流程进行盲目重试。
07
合规性
查看网站条款、用户授权、隐私要求和速率限制。
为什么
保持自动化与批准的用例保持一致。
生态系统契合度
CapSolver 可与您的浏览器基础设施配合使用,但不会取代它
01
浏览器库/钢
02
剧作家/木偶师
03
LangChain/LangGraph
主要工作
托管浏览器执行和会话管理。
浏览器控制和 DOM 交互。
代理编排和工具使用。
不使用 CapSolver
浏览器会话可以继续运行,但验证码可能会停止工作流程。
自动化可以检测页面并与之交互,但它仍然需要验证码解决逻辑。
代理可以调用工具,但它没有用于解决验证码的内置工具。
使用 CapSolver
CapSolver 在浏览器会话保持活动状态时处理验证码任务。
自动化将挑战数据发送到 CapSolver 并使用返回的解决方案。
代理将 CapSolver 作为工具调用,并根据结果继续工作流程。
最适合的用例
专为在生产中运行浏览器工作流程的 B2B 代理团队而构建
销售自动化
授权销售研究和 CRM 工作流程可能会在浏览器任务期间遇到 CAPTCHA 或验证检查。
人力资源技术
当多步骤浏览器任务期间出现验证时,已批准的招聘工作流程可能会暂停。
质量保证和测试工具
注册、结帐和表单的端到端测试需要明确的验证码处理,以减少失败的测试运行。
监管科技与合规
公共注册表检查和证据收集工作流程需要可靠性、审计日志和明确的后备行为。
研究自动化
当来源显示验证码或验证检查时,授权的公共数据工作流程可能会暂停。
内部机器人流程自动化
当流量验证阻止任务时,用户授权的重复工作流程将受益于清晰的验证码恢复层。
负责任的使用
使用 CapSolver 实现合法且授权的自动化
CapSolver 适用于合法和授权的用途,包括批准的 QA 测试、内部 RPA、用户授权的代理任务和合规的公共数据工作流程。在对网站进行自动化之前,请查看其条款、适用的隐私规则、速率限制以及您组织的合规性要求。

