تقنية

tool_choice: هل توفر الأدوات يلزم النموذج باستخدامها؟

مخطط لقائمة أداتين واحدة تدخل بطاقتي طلب، تلقائية ومحددة لدالة العد، ثم مراجعة الإعداد والاستجابة.
رسم بطاقات إعداد من إعداد بحر العلوم؛ لا يمثل طلبات أرسلناها.

إعداد اختيار الأداة في الطلب يجيب عن سؤال مختلف عن سؤال «ما الأدوات المتاحة؟». قد تبقى القائمة نفسها بينما يتغير التحكم في الاستدعاء. نقرأ أوضاعا موثقة ونضع بطاقتي إعداد مؤلفتين، دون إرسال طلب أو اعتبار إلزام الاختيار ضمانا أن الأداة مناسبة للمهمة.

الخلاصة السريعة

لا؛ توفر الأدوات لا يحدد وحده سلوك هذا الطلب. نميز الإعداد المختار عن قائمة التعريفات، ثم نراجع ما صدر وما نفذ وما يدعم الإجابة.

  • يوثق الدليل auto لصفر أو أكثر، وrequired لواحد أو أكثر، وتحديد دالة لاستدعاء واحد بعينه، وnone لمحاكاة غياب الدوال. [1] الأوضاع ليست مترادفة.
  • في ورقتنا القائمة ثابتة: read_card وcount_cards؛ اختلاف إعداد الطلب لا يعني أننا سجلنا أداة ثالثة، ولا يمنح الأسماء كودا أو نتيجة صحيحة.
  • نثبت في بطاقة إعداد اختيار count_cards، ونترك الأخرى للتلقائي؛ الأولى تسمي الدالة المطلوبة، والثانية لا تعلن مسبقا اسم ما سيصدر، ولم ننفذ أي بطاقة.
  • احتفظ بإعداد كل طلب وقائمته ومخرجه الفعلي؛ لا تستنتج مناسبة الأداة أو صلاحية التنفيذ أو صحة الناتج من إلزام الاستدعاء، ولا تنقل إعداد طلب إلى جميع الأدوار اللاحقة.

ما الفرق بين أوضاع الاختيار؟

في الدليل: auto يسمح بصفر أو أكثر؛ required بواحد أو أكثر؛ تحديد دالة يلزم واحدا معينا؛ وnone يحاكي غياب الدوال. [1]

نقتصر على هذه المعاني الموثقة للاستدعاء، دون تعميم كل إعداد على كل خدمة أو نموذج. نكتب الاسم كما يرد في بطاقة الإعداد كي لا تحول ترجمة «مطلوب» معنى واحد أو أكثر إلى دالة محددة لم تسم.

وجود هذا الحقل لا يغني عن قراءة المهمة والمدخلات. وسنفرق في ورقة توضيحية بين تعريف أدوات موجودة وبين اختيار تحكم لهذا الطلب. لا نعطي القارئ كودا يرسل عملية أو حكما على توافق إعدادات لم نوثقها.

لماذا نثبت القائمة قبل المقارنة؟

نؤلف قائمتين متطابقتين في بطاقتي طلب: read_card لقراءة بطاقة، وcount_cards لعد بطاقات. نفرض أنهما معرفتان في المثال، ونترك الكود الفعلي خارج الورقة؛ أسماء الوظائف للتمييز فقط.

يتعلق الاختلاف الذي سنعلنه بخانة الاختيار، لا بإضافة أداة. لو وصف المساعد البطاقة الثانية بأنها «سجلت وظيفة أخرى» لمجرد تغير هذه الخانة، فقد خلط التعريف مع التحكم في طلب يملك القائمة نفسها.

كما لا نستخرج من الاسمين أن هناك ملفا حقيقيا يمكن قراءته أو أن التنفيذ جاهز. تثبيت القائمة يسمح لنا بتحديد موضع الاختلاف في المثال، دون الادعاء أن تعريف الدالة ينشئ الكود أو يراجع صحة مصدرها.

ماذا تسمي كل بطاقة وما الذي لا تسميه؟

في البطاقة ت نثبت الإعداد التلقائي، وفي البطاقة ح نثبت اختيار count_cards تحديدا. الأولى لا تسمي لنا مسبقا دالة بعينها، والثانية تصرح باسم الدالة المقصودة. لا ندعي أن ت قرأت أو عدت شيئا؛ لم نحصل على استجابة.

إذا صيغ ملخص ح بأنه «اختيار أي واحدة من الأداتين»، فقد حذف التعيين الذي كتبناه. وإذا زعم أن ت استدعت read_card لأنه أول اسم في القائمة، فقد أضاف واقعة لم يقدمها مثالنا.

المقارنة قراءة لإعدادين مؤلفين تحت المعاني الموثقة، وليست نتيجة تشغيل. لم نعلن مدخلات عد أو نتيجة عددية أو زمنا. نحتاج الاستجابة الفعلية إن أردنا وصف ما صدر، وسجل التنفيذ إن أردنا وصف ما حدث بعدها.

ماذا لا يضمنه إلزام الاستدعاء؟

لنفترض أن المهمة التي طلبها القارئ في ورقتنا هي معرفة لون بطاقة، بينما جعلنا اختيار ح count_cards. اسم العد لا يجيب عن اللون في التصميم الذي وصفناه. اختيار دالة بعينها لا يصلح وحده دليلا على أن اختيارنا مناسب للسؤال.

ونقترح حفظ القائمة والإعداد لكل طلب على حدة، ثم مراجعة المعاملات ومصدر الناتج وارتباطه بالسؤال. لا ننقل إعداد بطاقة ح تلقائيا إلى طلب تال لم يذكر سجلها، ولا نستخرج منه إذنا للعمل على بيانات لم تقدم.

يبقى طلب الأداة وتنفيذها ومراجعة الجواب مراحل مختلفة. لم نجرب الخدمة أو نفحص أداء نموذجي ت وح؛ المثال يوضح معنى ما صرحنا به في بطاقة التحكم وما نحتاجه قبل وصف نتيجة فعلية.

المصادر ومتابعة القراءة

  1. OpenAI: Function calling (يفتح في نافذة جديدة)developers.openai.com

أُعدّ هذا المقال بصياغة عربية أصلية بالاستناد إلى المصادر أعلاه، وهو مدخل تمهيدي إلى الموضوع. اقرأ منهجية المحتوى وحدوده.