Tavily وSerpAPI للبحث باستخدام الوكلاء
إعداد API، وبناء الاستعلامات، وتحليل النتائج لأدوات البحث على الويب
Tavily وSerpAPI للبحث باستخدام الوكلاء درس مجاني في AI Agents على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في AI Agents، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة AI Agents 4 دروس في المجموع.
لماذا تحتاج الوكلاء إلى بحث الويب
تمتلك نماذج LLM تاريخًا تتوقف عنده معرفتها. وبالنسبة إلى الأسئلة المتعلقة بالأحداث الجارية، أو الأسعار المباشرة، أو الأخبار الحديثة، أو الموضوعات سريعة التغير، تكون بيانات التدريب الخاصة بالنموذج قديمة.
تمنح أدوات بحث الويب مثل Tavily وSerpApi الوكلاء وصولًا آنيًا إلى الإنترنت، فتسد الفجوة بين بيانات التدريب الثابتة والواقع الحالي.
Tavily: مصمم خصيصًا لوكلاء الذكاء الاصطناعي
إن Tavily واجهة بحث API مصممة خصيصًا لوكلاء الذكاء الاصطناعي. وعلى خلاف استخراج بيانات الويب العام، تعيد نتائج نظيفة ومنظّمة تتضمن محتوى مستخرجًا مسبقًا — لذلك لا حاجة إلى تحليل HTML.
ثبّته باستخدام pip install tavily-python. واحصل على مفتاح API من tavily.com.
from tavily import TavilyClient
import os
client = TavilyClient(api_key=os.getenv('TAVILY_API_KEY'))
results = client.search(
query='latest OpenAI GPT-5 release date',
max_results=5
)
for r in results['results']:
print(r['title'])
print(r['url'])
print(r['content'][:200])
print('---')معاملات البحث في Tavily
يوفر Tavily عدة معاملات للتحكم في سلوك البحث. وأكثرها فائدة للوكلاء هي max_results وsearch_depth وinclude_domains / exclude_domains.
# Basic search
results = client.search(
query='Python async best practices 2024',
max_results=5,
search_depth='basic' # 'basic' (fast) or 'advanced' (slower, deeper)
)
# Domain-filtered search
results = client.search(
query='machine learning papers',
max_results=5,
include_domains=['arxiv.org', 'papers.nips.cc', 'openreview.net']
)
# Exclude low-quality domains
results = client.search(
query='stock market today',
max_results=5,
exclude_domains=['pinterest.com', 'quora.com']
)بنية نتائج Tavily
تتضمن كل نتيجة من Tavily: title وurl وcontent (النص المستخرج) وscore (مدى الصلة)، واختياريًا published_date. ويحتوي الحقل content على نص نظيف — من دون وسوم HTML.
results = client.search('Claude AI pricing 2024', max_results=3)
for r in results['results']:
print(f"Title: {r['title']}")
print(f"URL: {r['url']}")
print(f"Score: {r.get('score', 'N/A')}")
print(f"Date: {r.get('published_date', 'unknown')}")
print(f"Content: {r['content'][:300]}")
print()
# Tavily also returns 'answer' — a direct answer synthesized from results
if results.get('answer'):
print('Direct answer:', results['answer'])SerpApi: وصول برمجي إلى بحث Google
توفر SerpApi وصولًا منظّمًا إلى Google وBing وYouTube ومحركات بحث أخرى. وتعيد بيانات غنية تتضمن النتائج المجانية، ولوحات المعرفة، والمقتطفات المميزة، ونتائج التسوق.
ثبّتها باستخدام pip install google-search-results.
from serpapi import GoogleSearch
import os
params = {
'q': 'best Python web frameworks 2024',
'api_key': os.getenv('SERPAPI_KEY'),
'num': 5, # number of results
'hl': 'en', # language
'gl': 'us', # country
'safe': 'active' # safe search
}
search = GoogleSearch(params)
results = search.get_dict()
for r in results.get('organic_results', []):
print(r['title'])
print(r['link'])
print(r.get('snippet', ''))
print()بنية نتائج SerpApi
تعيد SerpApi بيانات منظّمة أكثر ثراءً من Tavily. وتشمل الحقول الرئيسية في organic_results: title وlink وsnippet وposition. وتظهر المقتطفات المميزة بشكل منفصل ضمن answer_box.
def extract_serp_results(serp_data, max_results=5):
results = []
# Featured snippet / answer box (highest priority)
if 'answer_box' in serp_data:
box = serp_data['answer_box']
results.append({
'title': box.get('title', 'Featured Snippet'),
'url': box.get('link', ''),
'snippet': box.get('answer') or box.get('snippet', ''),
'is_featured': True
})
# Organic results
for r in serp_data.get('organic_results', [])[:max_results]:
results.append({
'title': r.get('title', ''),
'url': r.get('link', ''),
'snippet': r.get('snippet', ''),
'position': r.get('position', 0),
'is_featured': False
})
return results
if __name__ == '__main__':
demo_serp = {
'answer_box': {'title': 'Python version', 'link': 'https://python.org', 'answer': '3.13'},
'organic_results': [
{'title': 'Python Docs', 'link': 'https://docs.python.org', 'snippet': 'Official docs', 'position': 1},
],
}
for r in extract_serp_results(demo_serp):
print(f"{'[FEATURED] ' if r['is_featured'] else ''}{r['title']} - {r['url']}")
خيارات حداثة النتائج والتصفية حسب التاريخ
بالنسبة إلى الاستعلامات الحساسة زمنيًا، صفِّ النتائج حسب تاريخ النشر. يدعم Tavily معامل days، بينما يدعم SerpApi معامل tbs (البحث المستند إلى الوقت).
# Tavily: results from last 7 days
recent_results = client.search(
query='AI news',
max_results=5,
days=7 # only results published in last 7 days
)
# SerpApi: results from last month
params = {
'q': 'AI news',
'api_key': os.getenv('SERPAPI_KEY'),
'tbs': 'qdr:m', # qdr:d=day, qdr:w=week, qdr:m=month, qdr:y=year
'num': 5
}
search = GoogleSearch(params)
results = search.get_dict()إنشاء أداة بحث لـ LangChain
لاستخدام Tavily أو SerpApi داخل وكيل LangChain، غلّف دالة البحث في Tool. وعندئذٍ يمكن للوكيل استدعاؤها مثل أي أداة أخرى، استنادًا إلى الوصف الذي تقدّمه.
from langchain.tools import Tool
from tavily import TavilyClient
import os
tavily = TavilyClient(api_key=os.getenv('TAVILY_API_KEY'))
def tavily_search(query: str) -> str:
results = tavily.search(query=query, max_results=3, search_depth='basic')
output = []
for r in results['results']:
output.append(f"Title: {r['title']}\nURL: {r['url']}\nContent: {r['content'][:500]}")
return '\n\n'.join(output)
web_search_tool = Tool(
name='web_search',
func=tavily_search,
description='Search the web for current information. Input: a search query string. Returns top results with title, URL, and content.'
)تصفية النطاقات للتحكم في الجودة
ليست كل نتائج البحث موثوقة. تتيح لك تصفية النطاقات تقييد عمليات البحث بمصادر موثوقة (لأغراض البحث) أو استبعاد النطاقات المليئة بالمحتوى المزعج (للاستعلامات العامة).
TRUSTED_DOMAINS = {
'medical': ['nih.gov', 'who.int', 'mayoclinic.org', 'pubmed.ncbi.nlm.nih.gov'],
'legal': ['law.cornell.edu', 'supreme.justia.com', 'congress.gov'],
'tech': ['docs.python.org', 'developer.mozilla.org', 'stackoverflow.com'],
'finance': ['sec.gov', 'federalreserve.gov', 'bloomberg.com']
}
SPAM_DOMAINS = ['pinterest.com', 'quora.com', 'answers.yahoo.com', 'wikihow.com']
def domain_aware_search(query, domain_category=None):
kwargs = {'query': query, 'max_results': 5, 'exclude_domains': SPAM_DOMAINS}
if domain_category and domain_category in TRUSTED_DOMAINS:
kwargs['include_domains'] = TRUSTED_DOMAINS[domain_category]
return client.search(**kwargs)معالجة أخطاء البحث وحدود المعدل
يفرض كل من Tavily وSerpApi حدودًا للمعدل. نفّذ منطق إعادة المحاولة مع تراجع أُسّي، وتعامل بسلاسة مع الحالة التي لا يعيد فيها البحث أي نتائج.
import time
def robust_search(query, max_retries=3):
for attempt in range(max_retries):
try:
results = client.search(query=query, max_results=5)
if results and results.get('results'):
return results['results']
print(f'No results for: {query}')
return []
except Exception as e:
if '429' in str(e) or 'rate' in str(e).lower():
wait = 2 ** attempt # 1s, 2s, 4s
print(f'Rate limited. Waiting {wait}s...')
time.sleep(wait)
else:
print(f'Search error: {e}')
return []
return []توحيد طول المقتطفات
يتفاوت طول مقتطفات النتائج تفاوتًا كبيرًا: فبعضها يتكون من 50 حرفًا، بينما يصل بعضها الآخر إلى 2000 حرف. ويضمن توحيد طول المقتطفات حصول كل مصدر على تمثيل متساوٍ في سياق نموذج LLM.
MAX_SNIPPET_CHARS = 600
MIN_SNIPPET_CHARS = 100
def normalize_snippets(results):
normalized = []
for r in results:
content = r.get('content') or r.get('snippet', '')
# Truncate long snippets at sentence boundary
if len(content) > MAX_SNIPPET_CHARS:
# Find last sentence end before limit
cutoff = content.rfind('. ', 0, MAX_SNIPPET_CHARS)
content = content[:cutoff + 1] if cutoff > 0 else content[:MAX_SNIPPET_CHARS]
# Skip very short snippets
if len(content) < MIN_SNIPPET_CHARS:
continue
normalized.append({**r, 'content': content})
return normalized
if __name__ == '__main__':
demo_results = [
{'content': 'Short.'},
{'content': 'A' * 200 + '. ' + 'B' * 500},
]
for r in normalize_snippets(demo_results):
print(f"Length {len(r['content'])}: {r['content'][:60]}...")
اختبار المعرفة
ما الميزة الأساسية التي يقدمها Tavily مقارنةً بنهج استخراج بيانات الويب العام لوكلاء الذكاء الاصطناعي؟
مراجعة: Tavily وSerpApi لبحث الوكلاء
تمنح واجهات بحث الويب الوكلاء وصولًا إلى المعلومات الحالية التي تتجاوز تاريخ توقف تدريبهم. صُمم Tavily خصيصًا لوكلاء الذكاء الاصطناعي، مع استخراج نظيف للمحتوى؛ بينما يوفر SerpApi بيانات Google منظّمة وأكثر ثراءً، بما في ذلك المقتطفات المميزة ولوحات المعرفة.
الممارسات الأساسية: استخدم تصفية النطاقات للتحكم في الجودة، وطبّق فلاتر الحداثة على الاستعلامات الحساسة زمنيًا، ووحّد أطوال المقتطفات، ونفّذ منطق إعادة المحاولة مع التراجع للتعامل مع حدود المعدل.
تعلم AI Agents مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 60
- الدروس
- 239
الأسئلة الشائعة
هل درس «Tavily وSerpAPI للبحث باستخدام الوكلاء» مجاني؟
نعم — نص درس «Tavily وSerpAPI للبحث باستخدام الوكلاء» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة AI Agents، انتقل إلى CoddyKit PRO. تتضمن دورة AI Agents 4 دروس في المجموع.
ماذا ستتعلم في «Tavily وSerpAPI للبحث باستخدام الوكلاء»؟
إعداد API، وبناء الاستعلامات، وتحليل النتائج لأدوات البحث على الويب تتمرن على AI Agents مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ AI Agents؟
لا تُشترط خبرة سابقة. AI Agents على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «Tavily وSerpAPI للبحث باستخدام الوكلاء»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس AI Agents هذا؟
نعم. كل درس في AI Agents يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- Tavily وSerpAPI للبحث باستخدام الوكلاء
- ترتيب نتائج البحث وتصفيتها
- نمط حلقة البحث المتعمق
- دمج البحث على الويب مع RAG