لقد تطورت نماذج اللغة الكبيرة (LLMs) من مولدات نصوص ثابتة إلى محركات ديناميكية قادرة على أداء مهام معقدة. ومع ذلك، يتم إطلاق قوتها الحقيقية في بناء وكلاء ذكاء اصطناعي متينين من خلال آلية تُعرف بـاستدعاء الوظائف (المعروفة أيضاً باستخدام الأدوات أو استدعاء الإجراءات). تتيح هذه الميزة للنماذج التفاعل مع العالم الخارجي، مما يحولها من رواد ردود فعل سلبيين إلى حلالي مشاكل نشطين.
ما هو استدعاء الوظائف؟
في جوهره، يعد استدعاء الوظائف واجهة منظمة بين نموذج اللغة الكبير (LLM) ومنطق الخلفية الخاص بتطبيقك. بدلاً من إجبار النموذج على تخيل الإجابات أو مطالبتك بتحليل النصوص غير المهيكلة، فإنك تزود النموذج بمخطط يصف الوظائف المتاحة. يقوم النموذج بعد ذلك بقرار الوظيفة التي سيتم استدعاؤها واستخراج الحجج اللازمة من موجه المستخدم.
على سبيل المثال، إذا سأل المستخدم: "ما هو الطقس في لندن؟"، يمكن للنموذج أن يحدد أنه يفتقر إلى البيانات في الوقت الفعلي. بدلاً من التخمين، يمكنه إنشاء طلب منظم لاستدعاء وظيفة get_weather. يقوم تطبيقك بعد ذلك بتنفيذ هذه الوظيفة، ويستقبل استجابة JSON في الوقت الفعلي، ويعيد تغذيتها إلى النموذج للحصول على ملخص باللغة الطبيعية.
تعريف المخطط
يعتمد استدعاء الوظائف الفعال على تعريف دقيق لمخطط JSON. يعمل هذا المخطط كعقد، مما يضمن فهم النموذج لمدخلات وأنواع المخرجات المطلوبة. يعد الدقة هنا أمراً بالغ الأهمية؛ فالمخططات الغامضة تؤدي إلى فشل المكالمات أو استخراج غير صحيح للحجج.
خذ بعين الاعتبار مخططاً بسيطاً لمحول العملات:
{
"name": "convert_currency",
"description": "يحول مبلغاً من عملة إلى أخرى.",
"parameters": {
"type": "object",
"properties": {
"amount": {
"type": "number",
"description": "القيمة الرقمية للتحويل."
},
"from_currency": {
"type": "string",
"description": "رمز العملة المصدر (مثل USD، EUR)."
},
"to_currency": {
"type": "string",
"description": "رمز العملة المستهدفة."
}
},
"required": ["amount", "from_currency", "to_currency"]
}
}
حلقة المحادثة
يتطلب تنفيذ استدعاء الوظائف تدفق محادثة محدداً. لا يمكنك ببساطة إرسال موجه المستخدم وتوقع إجابة نهائية في خطوة واحدة. تتضمن العملية عادةً ثلاث مراحل متميزة:
- الطلب الأولي: يرسل المستخدم موجهًا. يقوم نموذج اللغة الكبير (LLM) بتحليله ويحدد ما إذا كان يجب استدعاء وظيفة. إذا كان الأمر كذلك، فإنه يعيد استجابة منظمة تشير إلى اسم الوظيفة والحجج.
- التنفيذ: يكتشف كود الخلفية الخاص بك استدعاء الوظيفة، وينفذ المنطق الفعلي (مثل استعلام قاعدة بيانات أو واجهة برمجة تطبيقات خارجية)، ويلتقط النتيجة.
- تغذية السياق: تقوم بإضافة نتيجة تنفيذ الوظيفة مرة أخرى إلى سجل المحادثة كرسالة "إخراج الأداة" وإرسالها إلى نموذج اللغة الكبير (LLM).
إليك مقتطف كود مفاهيمي يوضح هذه الحلقة باستخدام هيكل مكتبة وهمي:
def handle_llm_interaction(user_prompt, history):
# الخطوة 1: إرسال الموجه إلى نموذج اللغة الكبير مع تعريفات الوظائف
response = llm.chat(messages=history, functions=weather_functions)
if response.has_function_calls():
for call in response.function_calls:
# الخطوة 2: تنفيذ الوظيفة على الخلفية
result = execute_function(call.name, call.arguments)
# الخطوة 3: إضافة نتيجة الوظيفة إلى السجل
history.append({
"role": "function",
"name": call.name,
"content": str(result)
})
# الخطوة 4: إرسال السجل المحدث مرة أخرى إلى نموذج اللغة الكبير للحصول على الإجابة النهائية
final_response = llm.chat(messages=history)
return final_response.text
return response.text
أفضل الممارسات للإنتاج
بينما يسهل استدعاء الوظائف تطوير الوكلاء، فإنه يقدم تعقيدات جديدة. أولاً، تعامل دائماً مع الأخطاء بسلاسة. إذا فشلت وظيفة بسبب مشكلات في الشبكة أو بيانات غير صالحة، فقم بإرسال رسالة خطأ في حقل "المحتوى" حتى يتمكن نموذج اللغة الكبير من إعلام المستخدم بشكل مناسب. ثانياً، تجنب تعريض عدد كبير جداً من الوظائف. يزيد كل أداة إضافية من الحمل المعرفي على النموذج، مما قد يؤدي إلى إبطاء أوقات الاستجابة أو "تخفيف الانتباه". أخيراً، قم بتحقق من الحجج على جانب الخادم. لا تثق أبداً في استخراج نموذج اللغة الكبير بشكل ضمني؛ تأكد من مطابقة أنواع البيانات لمخططك بدقة.
الخاتمة
يُعد استدعاء الوظائف الجسر بين المعرفة الثابتة المضمنة في أوزان نماذج اللغة الكبيرة والبيانات الديناميكية في العالم الحقيقي المتاحة عبر واجهات برمجة التطبيقات (APIs). من خلال إتقان هذا النمط، يمكن للمطورين بناء وكلاء لا يفهمون النية فحسب، بل يمكنهم أيضاً التصرف بناءً عليها. مع نضج النظام البيئي، ستستمر أدوات مثل LangChain وLlamaIndex في تجريد الكثير من الكود النمطي، مما يسمح للمهندسين بالتركيز على تصميم سير عمل ذكي وموثوق يحل مشاكل المستخدمين الحقيقية.