أضف بحث ويب فوري إلى وكيل OpenAI أو Claude في 4 خطوات

تريد أن تستند إجابات وكيلك إلى معلومات حديثة؟ تحتاج فقط شيئين: API بحث يُرجع قصاصات ملائمة لنماذج اللغة، وتعريف أداة يستطيع النموذج استدعاءه. هذا الدليل يفعل الاثنين في 4 خطوات.
الخلاصة
- •الخطوة 1: أنشئ مفتاح API مجانيًا وجرّب نقطة النهاية بـ curl.
- •الخطوة 2: اجلب tool schema لـ OpenAI / Claude من API مباشرة — دون كتابة JSON يدويًا.
- •الخطوة 3: سجِّل الأداة في الوكيل (OpenAI Assistants، Anthropic Messages، LangChain، n8n).
- •الخطوة 4: نفّذ المعالج الذي يستدعي /api/search/web ويُعيد النتائج للنموذج.
لماذا هذا المقال قصير
معظم دروس 'أضف بحث ويب لنموذج اللغة' طويلة لأنها فعلاً تشرح SDK بحث أو إطار عمل وكلاء ثقيل. هذا الدليل ليس كذلك. العمل بسيط: اختر نقطة نهاية، سجّلها كأداة، اكتب معالجًا من 5 سطور.
1أنشئ مفتاح API مجانيًا واستدعِ نقطة النهاية
سجّل على apipick.com/dashboard/api-keys. الحسابات الجديدة تحصل على 100 رصيد مجاني — بدون بطاقة. أنشئ مفتاحًا وجرّب:
curl -X POST https://www.apipick.com/api/search/web \
-H "x-api-key: pk_yourkey" \
-H "Content-Type: application/json" \
-d '{"query": "what is retrieval augmented generation"}'ستحصل على قائمة مرتّبة موجزة بـ title وURL وقصاصة. التأكّد من العمل في curl يوفّر الكثير من تصحيح الأخطاء لاحقًا.
2اجلب tool schema (لا تكتبه يدويًا)
API Pick يعرض tool schemas جاهزة للنسخ على GET /api/search/web/tool-schema. الردّ يحوي تعريف OpenAI function وClaude tool use.
curl https://www.apipick.com/api/search/web/tool-schemaخزّن النتيجة — لا تتغيّر كثيرًا. كتابة function schema يدويًا أكثر مصدر شائع للأخطاء في كود الوكلاء (نوع خاطئ، required ناقص، وصف مفقود).
3سجِّل الأداة في الوكيل
OpenAI Assistants
from openai import OpenAI
import requests
client = OpenAI()
schema = requests.get("https://www.apipick.com/api/search/web/tool-schema").json()
assistant = client.beta.assistants.create(
name="Research Agent",
model="gpt-4o",
instructions="Use web_search whenever the user asks about current events or anything that changes after your training cutoff.",
tools=[{"type": "function", "function": schema["openai"]}],
)Anthropic Claude
import anthropic
import requests
schema = requests.get("https://www.apipick.com/api/search/web/tool-schema").json()
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
tools=[schema["claude"]],
messages=[{"role": "user", "content": "Summarise this week's RAG research."}],
)LangChain
from langchain.tools import tool
import requests
@tool
def web_search(query: str) -> dict:
"""Real-time web search. Use for any question that needs current information."""
return requests.post(
"https://www.apipick.com/api/search/web",
headers={"x-api-key": "pk_yourkey"},
json={"query": query},
).json()n8n
أضِف عقدة HTTP Request: الأسلوب POST، الرابط https://www.apipick.com/api/search/web، العنوان x-api-key: pk_yourkey، body JSON {"query": "{{ $json.query }}"}. اربطها بعقدة الوكيل أو LLM Chain. لا حاجة إلى SDK.
4عالج استدعاء الأداة
في OpenAI Assistants، حين يتوقّف الـ run بـ requires_action، شغّل البحث وسلّم الناتج:
import json, time, requests
from openai import OpenAI
client = OpenAI()
KEY = "pk_yourkey"
def run_with_tool(thread_id: str, assistant_id: str):
run = client.beta.threads.runs.create(thread_id=thread_id, assistant_id=assistant_id)
while True:
run = client.beta.threads.runs.retrieve(thread_id=thread_id, run_id=run.id)
if run.status == "requires_action":
outputs = []
for call in run.required_action.submit_tool_outputs.tool_calls:
if call.function.name == "web_search":
args = json.loads(call.function.arguments)
result = requests.post(
"https://www.apipick.com/api/search/web",
headers={"x-api-key": KEY},
json=args,
).json()
outputs.append({"tool_call_id": call.id, "output": json.dumps(result)})
client.beta.threads.runs.submit_tool_outputs(
thread_id=thread_id, run_id=run.id, tool_outputs=outputs,
)
elif run.status in ("completed", "failed", "cancelled", "expired"):
return run
time.sleep(0.5)حلقة Anthropic Messages مماثلة — حين يحتوي الردّ كتلة tool_use، استدعِ الـ API ثم أعِد النتيجة كتلةَ tool_result في الدور التالي.
إحكام الحلقة
- اكتب وصف الأداة من زاوية النموذج: 'Use this when the user asks about current events, breaking news, or anything that may have changed after your training cutoff.' لا تقل 'هذه API بحث ويب'.
- خزِّن في المعالج الاستعلامات المتكرّرة في الجلسة نفسها. النتائج مستقرّة على مستوى الدقائق؛ لا داعي لدفع 15 رصيدًا مرّتين في المحادثة ذاتها.
- أضِف
start_dateحين تهمّ الحداثة. 'أخبار هذا الأسبوع' بلا فلتر تواريخ كثيرًا ما تُعيد عناوين العام الماضي.
الخطوة التالية
حين يصبح وكيلك قادرًا على البحث، الخطوة الطبيعية هي قراءة الصفحات المرتبطة. سجِّل URL Content Extract API أداةً ثانية — نفس المصادقة، نفس JSON، حتى 25 رابطًا في النداء. 'ابحث + استخرج' هو الحدّ الأدنى المفيد لوكيل بحث.
الأسئلة الشائعة
هل يعمل مع OpenAI Responses API بدلًا من Assistants؟
نعم. نفس tool schema يعمل في client.responses.create() عبر tools=[{...}]. شكل المعالج مطابق: تحليل tool_calls، استدعاء POST /api/search/web، وإرجاع JSON.
هل أحتاج تنسيق النتائج قبل إعادتها للنموذج؟
لا. POST /api/search/web يُرجع title + URL + قصاصة LLM-ودودة مرتّبة. أعِد JSON الخام كنتيجة أداة، وسيقتبس النموذج القصاصات ويربط الروابط.
كم يكلّف دور وكيل واحد؟
كل نداء بحث ويب يكلّف 15 رصيدًا (≈ $0.015 بسعر $5 / 5000). دور نموذجي باستدعاء أداة واحد يبقى تحت سنت أمريكي بكثير — رموز LLM هي السائدة.
ماذا لو لم يستدعِ النموذج الأداة أبدًا؟
اجعل وصف الأداة دقيقًا. 'Use this for any question that requires current or post-training information' أفضل بكثير من 'web search'. النماذج تستخدم الأدوات التي تفهم غرضها.
هل يمكنني التقييد بدولة أو نطاق تواريخ؟
نعم. مرّر country_code (ISO 3166-1 alpha-2) و/أو start_date / end_date (YYYY-MM-DD). لتركها للنموذج أضِفها معاملاتٍ في schema، أو ثبّتها في المعالج إذا كان لوكيلك locale أو حداثة محدّدتان.
الواجهات البرمجية المستخدمة في هذا المقال
سارة تشوي هي الرئيسة التنفيذية لشركة API Pick. تكتب عن بناء واجهات برمجية جاهزة للإنتاج لوكلاء الذكاء الاصطناعي وسير عمل نماذج اللغة.