
Rajinder Singh
Deep Learning Researcher
प्रकाशित Sep 18, 2026
अद्यतन Sep 18, 2026 · मिनट पढ़ने का समय

एक पायथन एआई कैप्चा टूल एक एजेंट के लिए एक परिभाषित ऑपरेशन प्रदान करता है जब एक अनुमोदित ब्राउजर कार्य एक समर्थित चुनौती तक पहुंचता है। मॉडल को समाधान एल्गोरिथ्म खोजने की आवश्यकता नहीं होती है, और एप्लिकेशन को हर एजेंट फ्रेमवर्क के लिए नए कैप्चा क्लाइंट की आवश्यकता नहीं होती है।
CapSolver एजेंट एडाप्टर एक्सीक्यूशन लेयर प्रदान करता है। पायथन एआई एक फंक्शन-टूल इंटरफेस प्रदान करता है। इस गाइड में उदाहरण के माध्यम से इन टुकड़ों के जुड़ाव को दिखाया गया है, जो कैपसॉल्वर के द्वारा बनाए रखे गए पायथन एआई रिपॉजिटरी से लिया गया है और वास्तविक एडाप्टर कैटलॉग ऑपरेशन के साथ एक स्थानीय परीक्षण करता है।
पायथन एआई एंटीग्रेशन एक सामान्य प्रकार के पायथन फंक्शन को एक एजेंट के लिए उपलब्ध टूल में बदल देता है। फंक्शन को नामित आर्गुमेंट प्राप्त होते हैं, कैप्चा ऑपरेशन को डिलीगेट करते हैं, और एजेंट द्वारा जांच कर सकने वाले परिणाम को वापस करते हैं।
एक स्वामित्व वाले QA फॉर्म के लिए, उपयोगी अनुक्रम निश्चित है: ब्राउजर एक समर्थित चुनौती की पहचान करता है, एप्लिकेशन पृष्ठ पैरामीटर प्रदान करता है, समाधान टूल अपना परिणाम वापस करता है, और ब्राउजर उसी फॉर्म प्रयास को जारी रखता है। अंतिम निर्णय फॉर्म वर्कफ्लो के अंदर होता है।
एक API प per नीचे के सेवा कॉल को पैकेज करता है। इस मामले में, CapSolver एजेंट-टूल्स दस्तावेज़ में एक एक्सीक्यूटर का वर्णन किया गया है जो नामित ऑपरेशन को मुख्य कार्यान्वयन में डिस्पैच करता है।
पायथन एआई के फंक्शन टूल दस्तावेज़ बताते हैं कि फंक्शन साइनेचर और अनोटेशन टूल परिभाषाओं में कैसे योगदान देते हैं। तीन अनोटेड स्ट्रिंग्स आवश्यक इनपुट आकृति का वर्णन कर सकते हैं, लेकिन वे यह स्थापित नहीं करते कि एक URL अनुमोदित है या एक साइट कुंजी वर्तमान पृष्ठ के साथ संबंधित है।
जब आप दस्तावेज़ीकृत समाधान के आसपास एक छोटा फ्रेमवर्क वॉरपर चाहते हैं, तो आधिकारिक एडाप्टर का उपयोग करें। इससे वॉरपर एजेंट इंटरफेस पर ध्यान केंद्रित रहता है बजाय कार्य बनाने, प्राप्त करने और परिणाम रूपांतरण करने के लिए दोहराए जाने के।
CapSolver एक पायथन एआई उदाहरण रिपॉजिटरी बनाए रखता है जिसमें create_executor, Agent और @agent.tool_plain का उपयोग किया जाता है। यह एक उदाहरण एप्लिकेशन है, रिपॉजिटरी के नाम पर एक अतिरिक्त पैकेज नहीं।
इस लेख में उदाहरण रिपॉजिटरी के तीन-अंकीय समाधान फंक्शन और एक्सीक्यूटर कॉल को बरकरार रखता है। यह विशेष रूप से पायथन एआई के टेस्ट मॉडल और समर्थित-प्रकार कैटलॉग कॉल के उपयोग के साथ विस्तार को बदल देता है। इससे टूल कनेक्शन का परीक्षण किया जा सकता है बिना मॉडल कुंजी प्रदान किए या भुगतान किए गए समाधान कार्य के बनाए रखे।
इस रास्ता एमसीपी सर्वर के साथ जुड़े रास्ते से अलग है। फंक्शन एक ही पायथन एप्लिकेशन में स्थापित एडाप्टर को कॉल करते हैं; इस उदाहरण में कोई अलग एमसीपी सर्वर प्रक्रिया नहीं होती है। अपने मौजूदा एजेंट के अनुरूप इंटरफेस चुनें, बिना कारण के एक ही छोटे कार्य में दोनों इंटरफेस जोड़े बिना।
एक अलगाव वाले पायथन पर्यावरण में फ्रेमवर्क और एडाप्टर स्थापित करें। रिकॉर्ड किए गए चलाने में पायथन 3.12.14, pydantic-ai-slim 2.44.0, capsolver-agent 0.1.1 और capsolver-core 0.1.1 का उपयोग किया गया था।
स्लिम पैकेज पायथन एआई के मुख्य कार्यक्षमता प्रदान करता है जो टेस्ट मॉडल के लिए आवश्यक है, बिना हर मॉडल-प्रदाता एकीकरण के स्थापित किए। निम्न संस्करण मॉक चलाने के साथ मेल खाते हैं:
python3 -m venv .venv
source .venv/bin/activate
python -m pip install pydantic-ai-slim==2.44.0 capsolver-agent==0.1.1 capsolver-core==0.1.1
पायथन के वर्चुअल पर्यावरण गाइड पर्यावरण बनाने और शेल-विशिष्ट सक्रियण के बारे में विवरण प्रदान करता है। अपने परियोजना के साथ पैकेज संस्करण बनाए रखें ताकि प्रदर्शन को पुनर्जीवित किया जा सके बिना अपग्रेड करने से पहले।
स्थानीय कैटलॉग प्रदर्शन के लिए कोई समाधान प्रमाण पत्र की आवश्यकता नहीं होती है। एक बाद में वास्तविक solve_captcha कॉल के लिए आपके कैपसॉल्वर समाधान API कुंजी की आवश्यकता होती है, और एक वास्तविक मॉडल बातचीत के लिए आपके चयनित प्रदाता के पैकेज और प्रमाणीकरण की आवश्यकता होती है। ये अलग आवश्यकताएं हैं।
एक ब्लॉग-प्रकाशन एमसीपी प्रमाण पत्र के रूप में समाधान कुंजी का उपयोग न करें। एक्सीक्यूटर के सेवा प्रमाण पत्र को मॉडल प्रेरणा और संगत स्रोत से बाहर रखें।
निम्नलिखित को quickstart.py के रूप में सहेजें। समाधान वॉरपर आधिकारिक रिपॉजिटरी के अनुसार है; कैटलॉग टूल और टेस्ट मॉडल कॉन्फ़िगरेशन स्थानीय रूप से चलाए गए अनुकूलन हैं। कोड समाधान टूल को पंजीकृत करता है लेकिन इसका उपयोग नहीं करता है।
import asyncio
import json
from capsolver_agent import create_executor
from pydantic_ai import Agent, models
from pydantic_ai.models.test import TestModel
models.ALLOW_MODEL_REQUESTS = False
capsolver = create_executor()
agent = Agent(TestModel(call_tools=["get_supported_captchas"]))
@agent.tool_plain
async def get_supported_captchas() -> str:
"""प्रतिबंधित कैप्चा प्रकार लौटाएं बिना चुनौती हल किए।"""
return json.dumps(await capsolver.execute("get_supported_captchas", {}))
@agent.tool_plain
async def solve_captcha(captcha_type: str, website_url: str, website_key: str) -> str:
"""एक कानूनी, उपयोगकर्ता-अनुमोदित वर्कफ्लो के लिए एक समर्थित कैप्चा हल करें।"""
result = await capsolver.execute(
"solve_captcha",
{
"captcha_type": captcha_type,
"website_url": website_url,
"website_key": website_key,
},
)
return json.dumps(result, ensure_ascii=False)
async def main() -> None:
result = await agent.run("समर्थित कैप्चा प्रकार सूचीबद्ध करें।")
print(result.output)
if __name__ == "__main__":
asyncio.run(main())
पर्यावरण के पायथन इंटरप्रेटर के साथ फ़ाइल चलाएं:
python quickstart.py
स्क्रिप्ट ALLOW_MODEL_REQUESTS को गलती से एक गैर-परीक्षण मॉडल पर कॉल करने से रोकने के लिए गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से गलती से

Rajinder Singh
Deep Learning Researcher
Making CAPTCHA solving more reliable in automated workflows.
लेखक के बारे में
CapSolver MCP के आधिकारिक MCP पंजीकरण में खोजें, uvx या pip के साथ 0.1.3 संस्करण स्थापित करें, एक स्थानीय क्लाइंट को कॉन्फ़िगर करें, और stdio टूल्स की पुष्टि करें।

AI एजेंट के लिए MCP और CLI इंटरफेस की उपकरण खोज, संदर्भ लागत, सुरक्षा, डीबगिंग, असफलता प्रबंधन और हाइब्रिड आर्किटेक्चर के बीच तुलना करें।
