Captcha solving
LangChain agents के लिए
Challenge से टकराने वाले agent के toolset में ऐसा कुछ नहीं होता जो उसका जवाब दे सके, इसलिए वह अटक जाता है या मनगढ़ंत तरीके से आगे बढ़ने का दिखावा करता है। उसे tool के रूप में एक solver दें और रुकावट बस एक और call बन जाती है।
import time
import requests
CAPTCHANO_KEY = "cn-YOUR_API_KEY"
HEADERS = {"Authorization": f"Bearer {CAPTCHANO_KEY}"}
def solve(task: dict) -> dict:
"""Block until solved; returns e.g. {"token": "...", "userAgent": "..."}."""
r = requests.post(
"https://api.captchano.com/v1/solve",
params={"wait": 60},
json=task,
headers=HEADERS,
timeout=75,
)
data = r.json()
# A solve can outlast the 60 s wait: poll the task until it finishes.
while data.get("status") in ("queued", "solving"):
time.sleep(5)
data = requests.get(
f"https://api.captchano.com/v1/task/{data['id']}",
headers=HEADERS,
timeout=30,
).json()
if data.get("status") != "ready":
raise RuntimeError(data.get("error") or data)
return data["solution"]
from langchain_core.tools import tool
@tool
def solve_captcha(kind: str, sitekey: str, url: str) -> str:
"""Call when a captcha blocks the task. kind is recaptcha_v2, recaptcha_v3
or turnstile. Returns the token to submit with the form."""
return solve({"type": kind, "sitekey": sitekey, "url": url})["token"]
# add solve_captcha to your agent's tools listAgents को ख़ास तौर पर इसकी ज़रूरत क्यों है
Challenge से टकराने वाला scraper ज़ोर से फ़ेल होता है और आप उसे ठीक कर देते हैं। Agent चुपचाप फ़ेल होता है: वह blocked पेज के बारे में तर्क करता है, एक विश्वसनीय-सा अगला कदम गढ़ता है, और ऐसी प्रगति की रिपोर्ट करता है जो कभी हुई ही नहीं। विफलता और बुरी है क्योंकि वह चुपचाप होती है। एक typed solver tool अस्पष्ट dead end को एक निश्चित result में बदल देता है जिस पर agent branch कर सके।
Tool क्या लौटाता है
- एक token या cookie — challenge type के अनुसार। Session-graded सिस्टम एक cookie के साथ वह header set भी लौटाते हैं जिससे वह हासिल हुई।
- इस्तेमाल किया गया user agent, ताकि agent submit करते समय उसे दोहरा सके।
- Solve की लागत, ताकि बजट के तहत काम करने वाला agent आँख मूँदकर खर्च करने के बजाय उसका हिसाब रख सके।
Loop को सीमा में रखना
Agent को हर run के लिए solve बजट दें। हर response अपनी लागत बताता है, इसलिए खर्च किसी सीमा से ऊपर जाने पर supervisor loop को काट सकता है, बजाय इसके कि यह invoice पर पता चले। $0.00598 प्रति solve पर एक सामान्य agent run की लागत कुछ सेंट्स या उससे कम होती है, लेकिन असीमित retry loop फिर भी असीमित retry loop ही है।
Tool call को blocking रखें
उदाहरण ?wait=60 को call करते हैं, इसलिए tool एक ही स्टेप में तैयार token लौटाता है। Scripts से ज़्यादा यह agents के लिए मायने रखता है: "still solving" लौटाने वाला tool model को polling के बारे में सोचने पर मजबूर करता है, जो वह ठीक से नहीं कर पाता। अगर आपको ज़्यादा लंबी सीमा चाहिए, तो wait को 120 सेकंड तक बढ़ाएँ। हर challenge type के request फ़ॉर्मेट API reference में हैं।
LangChain में solve कैसे फ़िट होता है
LangChain में solver एक typed schema वाला tool है। जब agent का browser tool challenge की सूचना देता है, तब agent इसे call करता है।
- 01Tool define करें
API call को @tool decorator और एक साफ़ docstring के साथ wrap करें।
- 02इसे agent से bind करें
इसे अपने browser tools के साथ tools list में जोड़ें।
- 03बताएँ कि इसे कब इस्तेमाल करना है
Docstring model को बताती है कि इसे सिर्फ़ तब call करे जब captcha मौजूद हो।
- 04साफ़ result लौटाएँ
Token लौटाएँ या एक छोटा error जिस पर model कार्रवाई कर सके।
Token को पेज में कैसे डालें
Tool token को एक string के रूप में लौटाता है, जिसे agent अपने browser या HTTP tool को देता है।
इंटीग्रेशन आमतौर पर कहाँ गलत होते हैं
Model किसी tool को कब call करना है, यह उसके description से तय करता है। साफ़-साफ़ बताएँ कि इसे कौन-से inputs चाहिए और यह क्या लौटाता है।
हर run के solves की सीमा तय करें ताकि भ्रमित agent उस पेज पर loop न करता रहे जो बार-बार challenge दिखाता है।
LangChain captcha: अक्सर पूछे सवाल
क्या यह LangGraph के साथ काम करता है?
हाँ। LangChain tool, LangGraph में भी node से call किया जा सकने वाला फ़ंक्शन है, इसलिए एक ही definition दोनों में काम करती है।
इस tool के साथ कौन-सा model सबसे अच्छा काम करता है?
कोई भी model जो tool calling सपोर्ट करता है। Tool के inputs सादी strings हैं, इसलिए छोटे models भी इसे अच्छे से संभाल लेते हैं।
Agent को कैसे पता चलता है कि captcha मौजूद है?
उसके browser या scraping tool को इसकी सूचना देनी चाहिए, जैसे sitekey मिलने पर उसे लौटाकर। इसे tool के output का हिस्सा बनाएँ।
क्या मैं इसे async agent में इस्तेमाल कर सकता हूँ?
हाँ। Tool के अंदर async HTTP client इस्तेमाल करें और उसे async def से define करें।
उपयोगी गाइड
बनाने के लिए तैयार?
3 दिन के free trial से शुरू करें, फिर ट्रैफ़िक बढ़ने के साथ हर सफल solve के हिसाब से भुगतान करें। Trial के लिए कार्ड की ज़रूरत नहीं।