الانتقال إلى المحتوى الرئيسي
Exa هو محرك بحث على الويب مصمَّم لوكلاء الذكاء الاصطناعي. يمكن لـنقطة نهاية البحث في الويب في Venice تنفيذ استعلاماتك على Exa: اضبط search_provider على "exa" وستنفّذ Venice البحث عبر Exa مع عدم الاحتفاظ بالبيانات. تتم المصادقة باستخدام مفتاح Venice API الخاص بك، وتتولى Venice فوترة البحث، ولا تحتاج إلى حساب Exa. تُعاد النتائج بالبنية نفسها لكل مزوّد، لذا يندمج Exa في أي شيء بنيته على بحث Brave الافتراضي في Venice، ويقتصر تبديل المزوّد على تغيير حقل واحد. يغطي هذا الدليل استدعاء نقطة النهاية، ومنح نموذج Venice إمكانية البحث عبر Exa كأداة، وتأسيس المطالبة على نتائج Exa بنفسك، ومتى يُفضَّل استدعاء واجهة Exa API مباشرة.

المتطلبات الأساسية

الإعداد

ثبّت OpenAI SDK، بالإضافة إلى requests في Python. يتضمن Node.js الدالة fetch بشكل مدمج:
أضف مفتاح Venice API إلى متغيرات البيئة:

البحث باستخدام Exa

أرسل استعلامًا إلى /augment/search مع ضبط search_provider على "exa":
تحتوي الاستجابة على الاستعلام وقائمة بالنتائج، لكل منها أربعة حقول:
القيمة الافتراضية لـ limit هي 10 ويقبل من 1 إلى 20، ويقبل query من 1 إلى 400 حرف. القيم خارج هذه النطاقات تُعيد 400 بدلًا من تقليصها إلى الحدود. تعامل مع date على أنه اختياري، لأن كثيرًا من الصفحات لا تنشر تاريخًا.

منح نموذج Venice إمكانية البحث عبر Exa

للسماح للنموذج بتحديد متى يبحث وعمّا يبحث، صِف دالة web_search في مصفوفة tools ضمن طلب الدردشة، ونفّذ البحث بنفسك كلما استدعاها النموذج. يغلّف هذا البرنامج الطلب السابق في دالة مساعدة للبحث، ويُعيد النتائج إلى النموذج كرسالة tool، ويكرر ذلك حتى يجيب النموذج نصيًا:
يكتب النموذج الاستعلام فقط. أما الكود الخاص بك فيقرر كل ما عدا ذلك: المزوّد، وعدد النتائج، وما يحدث عند فشل البحث. هناك ثلاث تفاصيل تستحق الإبقاء عليها عند تكييف الحلقة:
  • اقتطع الاستعلامات التي يكتبها النموذج. ترفض نقطة النهاية الاستعلامات التي تتجاوز 400 حرف بدلًا من تقصيرها، والنماذج تكتب أحيانًا استعلامات طويلة.
  • أعِد الأخطاء كنتائج أداة. يتحول البحث الفاشل إلى رسالة أداة تبدأ بـ Error:، فيتمكن النموذج من تجربة استعلام مختلف أو شرح سبب الفشل بدلًا من توقف الحلقة.
  • أضف رسالة المساعد قبل نتائج أدواتها. يجب أن تأتي كل رسالة tool بعد دور المساعد الذي طلبها. كما أن إضافة كائن الرسالة نفسه يحافظ على reasoning_content الذي تُعيده نماذج الاستدلال مثل GLM 5.3 Flash، فيحتفظ النموذج باستدلاله عبر الجولات.
يحتوي content في كل نتيجة على نص الصفحة، بما يصل إلى نحو 10,000 حرف، لذا يستطيع النموذج عادةً الإجابة من نتائج البحث وحدها. وعندما يحتاج إلى صفحة كاملة، أضف أداة ثانية تستدعي /augment/scrape، التي تُعيد الصفحة بصيغة Markdown.

البحث ثم التوليد

يتيح استدعاء الدوال للنموذج أن يقرر متى يبحث وعمّا يبحث. أما عندما يعرف الكود الخاص بك مسبقًا ما يجب البحث عنه، فيمكنك تجاوز حلقة الأدوات: نفّذ بحثًا واحدًا عبر Exa، ورقّم النتائج، واطلب من Venice الإجابة استنادًا إليها. يعمل هذا مع أي نموذج نصي في Venice، ولأنك تحتفظ بقائمة المصادر التي دخلت في المطالبة، فإن كل استشهاد في الإجابة يرتبط بعنوان URL. باستخدام دالة البحث المساعدة والعميل والنموذج من المثال السابق:
يوسّع دليل الإجابات المدعومة بالاستشهادات عبر البحث في الويب هذا النمط ليشمل اختيار المصادر، واستخراج الصفحات، والتعامل مع الصفحات التي يفشل تحميلها. تأخذ دالة البحث المساعدة فيه وسيطًا للمزوّد، فمرّر "exa" لتشغيلها على Exa.

استخدام Exa API مباشرة

تأخذ نقطة نهاية البحث في Venice استعلامًا وعدد النتائج. أما واجهة Exa API نفسها فتوفر عناصر تحكم أكثر: فئات للأخبار والأوراق البحثية والشركات والأشخاص والتقارير المالية، وفلاتر للنطاقات والتواريخ، ومقتطفات مركّزة على الاستعلام ونص الصفحة الكامل، وبحثًا عميقًا متعدد الخطوات. لاستخدامها، استدعِ Exa مباشرة بمفتاح API من لوحة تحكم Exa. تنتقل هذه الطلبات من تطبيقك إلى Exa مباشرة، وتخضع لشروط Exa بدلًا من شروط Venice، وتُفوتَر على حسابك في Exa. يوفر Exa عدم الاحتفاظ بالبيانات في خطط Enterprise. تتضمن حزم Exa SDK، أي exa-py وexa-js الإصدار 2.24.0 أو أحدث، أدوات بتنسيق Chat Completions يمكن إدراجها مباشرة في الحلقة السابقة. استبدل قائمة الأدوات بأدوات Exa:
ثم مرّر كل رسالة تستدعي أدوات إلى SDK بدلًا من منفّذ الأدوات الخاص بك: messages += exa.openai.handle_tool_calls(message) في Python، أو messages.push(...(await exa.openai.handleToolCalls(message))) في Node.js. ينفّذ ذلك كل استدعاء لـ Exa ويُعيد رسائل tool المطابقة، مع الإبلاغ عن حالات الفشل كنتائج Error:. أبقِ على الحد الأقصى لنص الصفحة، لأن exa-js يُعيد الصفحات كاملة دون حد. تُمرَّر الوسائط المسمّاة مثل category وinclude_domains وstart_published_date إلى بحث Exa. راجع دليل استدعاء الأدوات من Exa للاطلاع على جميع الخيارات.

النماذج الموصى بها

تتغير معرّفات النماذج بمرور الوقت. حدّد النموذج الافتراضي الحالي لاستدعاء الدوال وقت التشغيل باستخدام GET /models/traits، أو تصفّح النماذج النصية للعثور على نماذج أخرى تدعم استدعاء الدوال.

الخصوصية

مع search_provider: "exa"، يتواصل تطبيقك مع Venice فقط، وتنفّذ Venice كل عملية بحث عبر Exa مع عدم الاحتفاظ بالبيانات. لا تخزّن Venice محتوى المطالبات أو الاستجابات، ويحدد مستوى الخصوصية الخاص بالنموذج ما يحدث في طبقة الاستدلال. تعمل النماذج الخاصة على بنية تحتية لا تحتفظ بالبيانات. الجانب الذي يسهل إغفاله هو أن النموذج يكتب استعلامات البحث انطلاقًا من المحادثة، لذا قد تنتهي تفاصيل من المطالبة داخل استعلام يُرسَل إلى Exa. إذا كانت المطالبات قد تحتوي على معلومات شخصية أو سرية، فاطلب من النموذج في مطالبة النظام إبقاء تلك التفاصيل خارج عمليات البحث، أو استخدم نمط البحث أولًا بحيث يكتب الكود الخاص بك كل استعلام. إذا استدعيت Exa API مباشرة، فإن تلك الطلبات تذهب إلى Exa وتخضع لشروط Exa بدلًا من ذلك.

التكاليف

تكلّف كل عملية بحث $0.01، أي $10 لكل 1,000 عملية، وهو السعر نفسه لبحث Brave أو Google. تُفوتِر Venice ذلك على حسابك في Venice إلى جانب الرموز التي تستخدمها طلبات الدردشة، فلا توجد فاتورة منفصلة من Exa. لا تُحتسب عمليات البحث التي تفشل بخطأ، لكن البحث الذي يعود فارغًا يُحتسب. تعود نتائج البحث إلى النموذج كمدخلات في الجولة التالية، ولأنها تحمل نص الصفحات، فإن بحثًا بخمس نتائج يضيف غالبًا ما بين 5,000 و10,000 رمز إدخال. بعض العادات تساعد على خفض الأمرين:
  • خفّض limit عندما تكفي مصادر قليلة. تكلفة البحث واحدة مهما كانت قيمة limit، لكن النتائج الأقل تعني رموز إدخال أقل في الجولة التالية.
  • أبقِ max_rounds منخفضًا. كل جولة إضافية قد تضيف عمليات بحث ورموزًا.
  • استخدم نمط البحث أولًا عندما يعرف الكود الخاص بك ما يجب البحث عنه. فهو ينفّذ بحثًا واحدًا وطلب دردشة واحدًا بالضبط.
يمكن للوكلاء الذين يمتلكون محفظة عملات مشفرة الاستغناء عن مفتاح API. تقبل كل من /augment/search و/chat/completions مصادقة محفظة x402، فيستطيع الوكيل الدفع مقابل عمليات بحث Exa والاستدلال من رصيد USDC مدفوع مسبقًا واحد.

استكشاف الأخطاء وإصلاحها

تأكد من ضبط VENICE_API_KEY في العملية التي تشغّل الكود الخاص بك. بدونه، يُطلق Python الخطأ KeyError: 'VENICE_API_KEY'، ويلجأ OpenAI SDK في Node.js إلى OPENAI_API_KEY. وإذا لم يكن هذا مضبوطًا أيضًا، فستحصل على الخطأ Missing credentials. أما إذا كان مضبوطًا، فسيرسل SDK مفتاح OpenAI الخاص بك إلى Venice، التي ترفضه بـ 401. ظهور 401 مع ضبط VENICE_API_KEY يعني أن Venice رفضت المفتاح نفسه، لذا تحقق من عدم وجود أخطاء إملائية فيه أو أنشئ مفتاحًا جديدًا.
يجب أن يكون query من 1 إلى 400 حرف، وlimit من 1 إلى 20، ويجب أن تكون قيمة search_provider هي brave أو google أو exa. تُرفض القيم خارج هذه النطاقات بدلًا من تقليصها إلى الحدود. في حلقة الأدوات، يصل البحث المرفوض إلى النموذج كنتيجة أداة Error: بدلًا من إطلاق استثناء.
رصيدك في Venice لا يغطي الطلب. الطلبات المُرسَلة بمفتاح API تُعيد INSUFFICIENT_BALANCE، لذا اشحن رصيدك في Venice. أما الطلبات المُرسَلة بمصادقة محفظة x402 فتُعيد تعليمات الشحن في الاستجابة.
بعض النماذج، ومنها نماذج Claude وGPT، تُعيد 400 عندما لا يتبع استدعاءَ الأداة رسالةُ tool تحمل tool_call_id الخاص به. تقبل نماذج GLM المحادثة على أي حال، لذا قد يظهر هذا لأول مرة عند تبديل النماذج. تجيب الحلقة على كل استدعاء مباشرة بعد رسالة المساعد التي أنشأته، فحافظ على هذه البنية إذا أضفت أدوات.
تحقق من أن النموذج يدعم استدعاء الدوال، وحدّد في مطالبة النظام متى يجب البحث. غالبًا ما تتجاوز النماذج الأداة عندما تعتقد أنها تستطيع الإجابة من ذاكرتها، ما لم تطلب منها البحث عن الحقائق الحديثة أو المحددة.

الموارد

Web Search API

المعاملات، ومزوّدو البحث، ومخطط الاستجابة

الإجابات المدعومة بالاستشهادات

خط أنابيب كامل للبحث والاستخراج والاستشهاد على Venice

استدعاء الدوال

كيف تعمل استدعاءات الأدوات على Venice

وثائق Exa

واجهة Exa API نفسها، وحزم SDK، وخيارات البحث