استدعاء الأدوات والدوال عبر API في كل صيغة
اجعل النموذج يستدعي دوالك في كل صيغة، عرّف الأداة، واقرأ الاستدعاء، وأرسل النتيجة، واعرف ما تدعمه كل عائلة نماذج.
في هذه الصفحة
يتيح استدعاء الأدوات للنموذج أن يطلب من برنامجك تشغيل دالة، مثل جلب حالة الطقس أو البحث في قاعدة بياناتك، ثم يجيب بالنتيجة. النموذج لا يشغّل شيئًا بنفسه: يعيد اسم الدالة ووسائطها، فيشغّلها برنامجك، ثم ترسل النتيجة في الطلب التالي.
الدورة#
صِف أدواتك#
أرسل قائمة أدوات في الطلب، لكل أداة اسم ووصف ومخطط JSON Schema لوسائطها. الوصف الواضح هو ما يجعل النموذج يختار الأداة الصحيحة.
اقرأ الاستدعاء#
حين يحتاج النموذج أداة يحمل الرد استدعاءً فيه اسم الأداة ووسائطها بدلًا من إجابة نهائية، ويدل سبب التوقف على ذلك.
شغّلها وأرسل النتيجة#
شغّل الدالة في برنامجك، ثم أرسل طلبًا جديدًا بالمحادثة كاملة: استدعاء النموذج، ثم نتيجتك مربوطة بمعرّف الاستدعاء. بعدها يجيب النموذج، أو يستدعي أداة أخرى.
الأداة نفسها في كل صيغة#
- Chat Completions: الأدوات في
toolsمعtype: "function"وfunction.parameters. يصل الاستدعاء فيmessage.tool_callsمعfinish_reason: "tool_calls". أرسل النتيجة رسالةً بالدورrole: "tool"ومعهاtool_call_id. - Responses: الأدوات في
toolsمعtype: "function"وparameters. الاستدعاء عنصر فيoutputمن نوعfunction_callومعهcall_id. أرسل النتيجة عنصرًا فيinputمن نوعfunction_call_outputبالقيمة نفسها لـcall_id. - Messages: الأدوات في
toolsمعinput_schema. الاستدعاء كتلةtool_useمعstop_reason: "tool_use". أرسل النتيجة كتلةtool_resultفي رسالةuserومعهاtool_use_id. - Gemini: الأدوات في
toolsمعfunctionDeclarations. الاستدعاء جزءfunctionCall. أرسل النتيجة جزءfunctionResponseفي دورuser.
طلبات كاملة مع ردودها المسجّلة: Chat Completions وResponses وMessages وGemini.
إرسال النتيجة#
في Chat Completions يكرر الطلب الثاني المحادثة، ويضيف استدعاء النموذج كما وصل، ثم نتيجتك:
[
{ "role": "user", "content": "What is the weather in Cairo?" },
{ "role": "assistant", "content": null, "tool_calls": [
{ "id": "call_1", "type": "function", "function": { "name": "get_weather", "arguments": "{\"city\":\"Cairo\"}" } }
] },
{ "role": "tool", "tool_call_id": "call_1", "content": "{\"temp_c\": 31, \"sky\": \"clear\"}" }
]وفي Messages يكون الاستدعاء والنتيجة كتلًا:
[
{ "role": "user", "content": "What is the weather in Cairo?" },
{ "role": "assistant", "content": [
{ "type": "tool_use", "id": "toolu_1", "name": "get_weather", "input": { "city": "Cairo" } }
] },
{ "role": "user", "content": [
{ "type": "tool_result", "tool_use_id": "toolu_1", "content": "{\"temp_c\": 31, \"sky\": \"clear\"}" }
] }
]ما تدعمه كل عائلة#
- كل العائلات تقبل
toolsفي Chat Completions وMessages، ونماذج Claude وGPT تقبلها في Responses. - فرض أداة بعينها عبر
tool_choiceيعمل مع Claude وGPT. أما نماذج Gemini فتختار بنفسها في Chat Completions وMessages، ومع generateContent استخدمtoolConfig. - للحقل
parallel_tool_callsأثر مع نماذج GPT فقط. قد تستدعي نماذج Claude عدة أدوات في رد واحد، فعالج كل الاستدعاءات قبل أن تجيب. - للحصول على إجابة JSON من Claude عرّف أداة واحدة مخططها هو الشكل الذي تريده، وافرضها عبر
tool_choice، فتكون الوسائط هي بيانات JSON التي تريدها.
نصائح#
- تحقق من الوسائط قبل أن تشغّل أي شيء، فقد يرسل النموذج قيمة غير صحيحة.
- اجعل نتائج الأدوات قصيرة ومحددة، فالنتائج الطويلة تكلّف توكنات إدخال في كل طلب لاحق.
- أعد الأخطاء نتائجَ، مثل
{"error": "city not found"}، ليتمكن النموذج من التصرف.
هل كانت هذه الصفحة مفيدة؟