0Pricing
AI Agents · درس

وكيل بحث وتصفح الويب

اجمع بين أداة بحث وأداة جلب وLLM للبحث في موضوع وكتابة ملخص موثّق بالمصادر.

وكيل بحث وتصفح الويب درس مجاني في AI Agents على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في AI Agents، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة AI Agents 4 دروس في المجموع.

بعض أجزاء هذا الدرس لم تُترجم بعد وتظهر باللغة الإنجليزية.

هدف المشروع

ابنوا وكيلًا يبحث في موضوع ما عبر البحث في الويب وجلب الصفحات وكتابة ملخص موثق بالمصادر — مثل نسخة صغيرة من Perplexity.

الأدوات المطلوبة

  1. search — الاستعلام من واجهة بحث API (مثل Tavily وSerper وBrave) وإرجاع النتائج
  2. fetch_url — تنزيل صفحة وإرجاع نصها المنقّى
  3. answer — يكتب الوكيل الملخص النهائي مع الاستشهادات

Step 1: Search Tool

import requests

def search(query: str, k: int = 5) -> list[dict]:
    r = requests.post(
        'https://api.tavily.com/search',
        json={'api_key': TAVILY_KEY, 'query': query, 'max_results': k}
    )
    return r.json()['results']   # list of {url, title, snippet}

Step 2: Fetch Tool

from bs4 import BeautifulSoup

def fetch_url(url: str) -> str:
    r = requests.get(url, timeout=10)
    soup = BeautifulSoup(r.text, 'html.parser')
    for tag in soup(['script', 'style', 'nav', 'footer']):
        tag.decompose()
    return soup.get_text(separator='\n', strip=True)[:5000]   # truncate

Step 3: Tool Definitions

tools = [
    {'type': 'function', 'function': {
        'name': 'search',
        'description': 'Search the web for a query, return top results with URLs',
        'parameters': {'type': 'object', 'properties': {'query': {'type': 'string'}}, 'required': ['query']}
    }},
    {'type': 'function', 'function': {
        'name': 'fetch_url',
        'description': 'Download the text of a URL',
        'parameters': {'type': 'object', 'properties': {'url': {'type': 'string'}}, 'required': ['url']}
    }}
]
import json
print(json.dumps(tools, indent=2))

Step 4: The Agent Loop

def research(question, max_steps=8):
    messages = [
        {'role': 'system', 'content': 'You are a research agent. Use search and fetch_url to gather facts. Cite each claim with a URL.'},
        {'role': 'user', 'content': question}
    ]
    for _ in range(max_steps):
        r = oai.chat.completions.create(model='gpt-4o-mini', messages=messages, tools=tools)
        msg = r.choices[0].message
        messages.append(msg)
        if not msg.tool_calls:
            return msg.content
        for tc in msg.tool_calls:
            result = dispatch(tc)
            messages.append({'role': 'tool', 'tool_call_id': tc.id, 'content': json.dumps(result)})
    return 'Step limit reached'

Tool Dispatcher

def dispatch(tc):
    args = json.loads(tc.function.arguments)
    if tc.function.name == 'search':
        return search(**args)
    if tc.function.name == 'fetch_url':
        return fetch_url(**args)
    return {'error': 'unknown tool'}

إضافة حد للخطوات

من دون حد، قد يستمر الوكيل إلى ما لا نهاية. يُعد max_steps=8 قيمة افتراضية معقولة.

اقتطاع الصفحات التي جُلبت

يزيد حجم معظم الصفحات على 50KB — وهذا أكبر بكثير من اللازم. اقتطعوها إلى 5000 محرف (نحو 1300 token). نادرًا ما يحتاج النموذج إلى أكثر من ذلك.

احترام robots.txt

يجب أن يحترم التصفح في بيئة الإنتاج robots.txt وشروط خدمة الموقع. استخدموا خدمة مُدارة للبحث والجلب عند الشك.

تخزين النتائج مؤقتًا

سيُطلب الاستعلام وعنوان URL نفسيهما كثيرًا. خزّنوا النتائج مؤقتًا في Redis لمدة ساعة:

@lru_cache(maxsize=1000)
def cached_fetch(url):
    return fetch_url(url)

معالجة حالات الفشل

أخطاء الشبكة أمر معتاد. أعيدوا الخطأ إلى النموذج حتى يتمكن من تجربة مصدر آخر:

try:
    return fetch_url(url)
except Exception as e:
    return {'error': f'Could not fetch {url}: {e}'}

فرض الاستشهادات

أنهوا system prompt بالنص: "يجب أن تتضمن إجابتك النهائية عناوين URL لكل ادعاء، مثل [1] https://..." — وفكّروا في التحقق من مخطط المخرجات أيضًا.

مراقبة التكلفة

وكلاء البحث مكلفون — من 5 إلى 15 استدعاءً للأدوات لكل سؤال، ويجلب كل استدعاء عدة كيلوبايتات. ضعوا حدًا أقصى للميزانية لكل استعلام.

حد الخطوات

لماذا نضع حدًا أقصى لـ max_steps في حلقة الوكيل؟

مراجعة

بحث + جلب + LLM + حد للخطوات = وكيل بحث عامل في 50 سطرًا. مشروع ممتاز رقم 3.

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

هل درس «وكيل بحث وتصفح الويب» مجاني؟

نعم — نص درس «وكيل بحث وتصفح الويب» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة AI Agents، انتقل إلى CoddyKit PRO. تتضمن دورة AI Agents 4 دروس في المجموع.

ماذا ستتعلم في «وكيل بحث وتصفح الويب»؟

اجمع بين أداة بحث وأداة جلب وLLM للبحث في موضوع وكتابة ملخص موثّق بالمصادر. تتمرن على AI Agents مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ AI Agents؟

لا تُشترط خبرة سابقة. AI Agents على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «وكيل بحث وتصفح الويب»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس AI Agents هذا؟

نعم. كل درس في AI Agents يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. روبوت أسئلة وأجوبة فوق مستنداتك
  2. وكيل لشرح الشيفرة
  3. وكيل بحث وتصفح الويب
  4. مساعد SQL لقاعدة بياناتك
← العودة إلى AI Agents