CaptchaNo
[ الوكلاء ]

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

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

python · crewai
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 crewai import Agent
from crewai.tools import tool

@tool("Solve captcha")
def solve_captcha(kind: str, sitekey: str, url: str) -> str:
    """Call when a captcha blocks the task. Returns the token to submit."""
    return solve({"type": kind, "sitekey": sitekey, "url": url})["token"]

researcher = Agent(role="Researcher", goal="...", backstory="...", tools=[solve_captcha])

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

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

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

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

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

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

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

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

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

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

في CrewAI، تكون أداة الحل أداةً مخصصة تُسند إلى الوكيل الذي يتصفح. ولا يحتاج الوكلاء الآخرون في الفريق (crew) إلى معرفة أي شيء عن الكابتشا.

  1. 01
    أنشئ صنفًا فرعيًا من BaseTool

    عرّف name وdescription ومخطط args، واستدعِ API داخل _run.

  2. 02
    أسندها

    أعطِ الأداة فقط للوكيل الذي يتولى التصفح.

  3. 03
    صِف شرط الاستدعاء

    ينص الوصف على استخدامها عندما تعرض الصفحة كابتشا.

  4. 04
    أعِد الرمز token

    أعِد سلسلة الرمز token أو رسالة خطأ قصيرة.

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

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

[ المزالق ]

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

الأداة لدى كل وكيل

وكيل التصفح وحده يحتاج إليها. إعطاؤها للجميع يفتح الباب لاستدعاءات غير ضرورية.

التخزين المؤقت

الرموز token صالحة للاستخدام مرة واحدة. عطّل التخزين المؤقت لنتائج الأدوات في CrewAI بالنسبة لأداة الحل.

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

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

هل تحتوي CrewAI على أداة كابتشا مدمجة؟

ليس للحل. أداة مخصصة من بضعة أسطر تكفي، وتُبقي المفتاح تحت سيطرتك.

هل يمكن لعدة وكلاء مشاركة مفتاح واحد؟

نعم، أو أنشئ مفتاحًا لكل فريق من لوحة التحكم ليُعرض الاستخدام بشكل منفصل.

هل يعمل مع CrewAI Flows؟

نعم. يستدعي الأداةَ وكيلٌ، أينما كان ذلك الوكيل يعمل.

لماذا يجب تعطيل التخزين المؤقت؟

النتيجة المخزنة مؤقتًا ستعيد رمز token قديمًا يرفضه الموقع، لأن الرموز token صالحة للاستخدام مرة واحدة وتنتهي صلاحيتها خلال دقيقتين تقريبًا.

[ اقرأ أيضًا ]

أدلة مفيدة

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

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

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