CaptchaNo
[ الوكلاء ]

حل الكابتشا
لوكلاء ⁦LangChain⁩

الوكيل الذي يصادف تحديًا لا يملك في مجموعة أدواته ما يجيب عنه، فيتوقف أو يلتف عليه بالهلوسة. زوّده بأداة حل، فيصبح العائق مجرد استدعاء آخر.

python · langchain
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 list

لماذا يحتاج الوكلاء إلى هذا تحديدًا

أداة الـ scraping التي تصطدم بتحدٍّ تفشل بشكل واضح فتصلحها. أما الوكيل فيفشل بصمت: يستنتج حول الصفحة المحجوبة، ويختلق خطوة تالية معقولة، ويبلّغ عن تقدم لم يحققه قط. والفشل هنا أسوأ لأنه صامت. أداة حل محددة النوع تحوّل الطريق المسدود الغامض إلى نتيجة حتمية يستطيع الوكيل بناء قراراته عليها.

ما الذي تعيده الأداة

  • رمز token أو ملف cookie — بحسب نوع التحدي. الأنظمة التي تقيّم الجلسة تعيد ملف cookie مع مجموعة الترويسات (headers) المستخدمة للحصول عليه.
  • وكيل المستخدم المستخدَم، كي يعيد الوكيل استخدامه عند الإرسال.
  • تكلفة عملية الحل، كي يتمكن الوكيل العامل ضمن ميزانية من احتسابها بدلًا من الإنفاق دون رؤية.

إبقاء الحلقة محدودة

امنح الوكيل ميزانية حل لكل تشغيل. تبلّغ كل استجابة عن تكلفتها، لذا يمكن لجهة الإشراف قطع الحلقة عندما يتجاوز الإنفاق حدًا معينًا بدلًا من اكتشاف ذلك في الفاتورة. بسعر ⁦$0.00598⁩ لكل عملية حل، تكلف عملية تشغيل الوكيل المعتادة بضعة سنتات أو أقل، لكن حلقة إعادة المحاولة غير المحدودة تبقى حلقة غير محدودة.

اجعل استدعاء الأداة متزامنًا (blocking)

تستدعي الأمثلة ?wait=60، فتعيد الأداة رمز token جاهزًا في خطوة واحدة. وهذا أهم للوكلاء منه للسكربتات: الأداة التي تعيد "ما زال الحل جاريًا" تجبر النموذج على التفكير في الاستطلاع الدوري (polling)، وهو ما يجيده بشكل سيئ. إذا احتجت إلى سقف أطول، فارفع wait حتى 120 ثانية. أشكال الطلبات لكل أنواع التحديات موجودة في مرجع API.

[ موقعه في سير العمل ]

كيف تندمج عملية الحل في ⁦LangChain⁩

في LangChain، تكون أداة الحل أداةً (tool) ذات مخطط محدد النوع. يستدعيها الوكيل عندما تبلّغ أداة المتصفح الخاصة به عن تحدٍّ.

  1. 01
    عرّف الأداة

    غلّف استدعاء API باستخدام المزخرف @tool مع docstring واضح.

  2. 02
    اربطها بالوكيل

    أضفها إلى قائمة الأدوات إلى جانب أدوات المتصفح لديك.

  3. 03
    صِف متى تُستخدم

    يخبر docstring النموذج بأن يستدعيها فقط عند وجود كابتشا.

  4. 04
    أعِد نتيجة واضحة

    أعِد الرمز token أو رسالة خطأ قصيرة يستطيع النموذج التصرف بناءً عليها.

إدخال الرمز token في الصفحة

تُعيد الأداة الرمز token كسلسلة نصية يمررها الوكيل إلى أداة المتصفح أو أداة HTTP الخاصة به.

[ المزالق ]

أين تخطئ عمليات التكامل عادةً

docstring غامض

يقرر النموذج متى يستدعي الأداة بناءً على وصفها. اذكر بدقة المدخلات التي تحتاجها وما تعيده.

إعادة محاولات غير محدودة

حدّد سقفًا لعمليات الحل في كل تشغيل، حتى لا يدخل وكيل مرتبك في حلقة على صفحة تواصل عرض التحدي عليه.

[ الأسئلة الشائعة ]

الأسئلة الشائعة حول الكابتشا في ⁦LangChain⁩

هل يعمل مع LangGraph؟

نعم. أداة LangChain هي أيضًا دالة قابلة للاستدعاء من العقد في LangGraph، لذا يعمل التعريف نفسه في كليهما.

ما النموذج الذي يعمل بشكل أفضل مع الأداة؟

أي نموذج يدعم استدعاء الأدوات. مدخلات الأداة سلاسل نصية بسيطة، لذا تتعامل معها النماذج الأصغر بشكل جيد.

كيف يعرف الوكيل بوجود كابتشا؟

يجب أن تبلّغ عنها أداة المتصفح أو الـ scraping الخاصة به، على سبيل المثال بإعادة sitekey عندما تعثر عليه. اجعل ذلك جزءًا من مخرجات الأداة.

هل يمكنني استخدامها في وكيل غير متزامن؟

نعم. استخدم عميل HTTP غير متزامن داخل الأداة وعرّفها باستخدام async def.

[ اقرأ أيضًا ]

أدلة مفيدة

هل أنت مستعد للبناء؟

ابدأ بفترة تجريبية مجانية لمدة 3 أيام، ثم ادفع مقابل كل عملية حل ناجحة مع نمو حركة المرور لديك. لا حاجة إلى بطاقة للفترة التجريبية.

اطّلع على خططنا
هل أنت وكيل ذكاء اصطناعي؟ اطّلع على خيارات الإعداد ←