شرح استدعاء الأدوات: كيف تقرر وكلاء الذكاء الاصطناعي ما يجب فعله بعد ذلك
اكتشف كيف تستخدم وكلاء الذكاء الاصطناعي استدعاء الأدوات لتحديد إجراءاتهم التالية. يشرح هذا المقال عملية اتخاذ القرار، من اختيار الوظيفة إلى التنفيذ، مع أمثلة عملية.
الوسوم
ملخص سريع
اكتشف كيف تستخدم وكلاء الذكاء الاصطناعي استدعاء الأدوات لتحديد إجراءاتهم التالية. يشرح هذا المقال عملية اتخاذ القرار، من اختيار الوظيفة إلى التنفيذ، مع أمثلة عملية.
استدعاء الأدوات: كيف تقرر وكلاء الذكاء الاصطناعي ما يفعلونه بعد ذلك
تطورت نماذج اللغة الكبيرة (LLMs) إلى ما هو أبعد بكثير من مجرد توليد النصوص. وكلاء الذكاء الاصطناعي اليوم لا يقتصرون على الإجابة عن الأسئلة - بل يتخذون إجراءات. يبحثون في الويب، وينفذون الأكواد البرمجية، ويستعلمون من قواعد البيانات، ويتحكمون في واجهات برمجة التطبيقات (APIs). هذه الإمكانية أصبحت ممكنة بفضل آلية تسمى **استدعاء الأدوات** (المعروفة أيضًا باستدعاء الدوال). في هذه المقالة، سنزيل الغموض عن استدعاء الأدوات: ما هو، وكيف يعمل تحت الغطاء، وكيف يمكنك تنفيذه في وكلاء الذكاء الاصطناعي الخاصين بك مع تعليمات خطوة بخطوة وملموسة.
ما هو استدعاء الأدوات؟
استدعاء الأدوات هو العملية التي يقرر من خلالها نموذج اللغة الكبير استدعاء دالة خارجية أو واجهة برمجة تطبيقات، بدلاً من توليد استجابة نصية بحتة. يخرج النموذج طلبًا منظمًا (عادةً بصيغة JSON) يحدد الأداة التي سيتم استخدامها وبأي معاملات. ثم يقوم التطبيق المستدعي بتنفيذ الأداة، ويعيد النتيجة إلى النموذج، ويدمج النموذج تلك النتيجة في إجابته النهائية.
تحول هذه الآلية نماذج اللغة الكبيرة من مولدات نصوص سلبية إلى حلول مشكلات نشطة. على سبيل المثال، عندما تسأل وكيل ذكاء اصطناعي "ما هو الطقس في لندن؟"، قد يستدعي النموذج أداة `get_weather` مع المعامل `location="London"`، ويتلقى بيانات الطقس الحالية، ثم يقوم بتكوين استجابة قابلة للقراءة مثل "الطقس في لندن 15 درجة مئوية وغائم."
لماذا يعتبر استدعاء الأدوات مهمًا
بدون استدعاء الأدوات، يمكن لنموذج اللغة الكبير الاعتماد فقط على بيانات التدريب الخاصة به، والتي تصبح قديمة بمرور الوقت. مع استدعاء الأدوات، يمكن للوكلاء:
- الوصول إلى المعلومات في الوقت الفعلي (أسعار الأسهم، الأخبار، الطقس)
- إجراء العمليات الحسابية أو تشغيل الأكواد البرمجية
- التفاعل مع قواعد البيانات والأنظمة الداخلية
- تشغيل سير العمل وإرسال الإشعارات
- استرداد البيانات الخاصة أو الخاصة بمجال معين
كما أشار قادة الصناعة مثل OpenAI وAnthropic، فإن استدعاء الأدوات هو قدرة أساسية لبناء وكلاء ذكاء اصطناعي موثوقين ومستقلين. إنه يسد الفجوة بين فهم اللغة والإجراء في العالم الحقيقي.
كيف يعمل استدعاء الأدوات: عملية اتخاذ القرار
تتضمن عملية اتخاذ القرار الأساسية ثلاث خطوات:
1. **يتلقى النموذج استعلام المستخدم وقائمة بالأدوات المتاحة** (كل منها محدد بالاسم والوصف ومخطط المعاملات). 2. **يحلل النموذج الاستعلام ويقرر ما إذا كانت هناك حاجة إلى أداة.** إذا كانت الإجابة بنعم، فإنه يخرج طلبًا منظمًا (مثل `{"tool": "search_web", "args": {"query": "أحدث أخبار الذكاء الاصطناعي"}}`). 3. **ينفذ التطبيق الأداة، ويعيد النتيجة إلى النموذج، ويولد النموذج استجابة نهائية** تتضمن مخرجات الأداة.
هذا القرار ليس مشفرًا بشكل ثابت - إنه ينبثق من تدريب نموذج اللغة الكبير. تعلم النموذج التعرف على متى يتطلب السؤال بيانات خارجية وإخراج استدعاء الأداة المناسب. المفتاح هو أن النموذج *يختار* استدعاء أداة؛ المطور يقدم فقط تعريفات الأدوات.
المتطلبات
قبل أن نتعمق في التنفيذ، تأكد من أن لديك ما يلي:
- **Python 3.9+** مثبتة على نظامك
- **مفتاح API** من OpenAI أو Anthropic أو مزود آخر يدعم استدعاء الدوال
- **إلمام أساسي** بسطر الأوامر وPython
- **pip** (مدير حزم Python) محدث
سنستخدم API من OpenAI كمثال رئيسي لدينا، حيث أنه يوفر دعمًا ناضجًا لاستدعاء الأدوات. تنطبق المفاهيم بالتساوي على Claude من Anthropic ونماذج أخرى.
التثبيت خطوة بخطوة
1. إعداد بيئة Python افتراضية
اعزل تبعيات مشروعك لتجنب التعارضات.
python -m venv tool-calling-envقم بتفعيل البيئة:
- على macOS/Linux: `source tool-calling-env/bin/activate`
- على Windows: `tool-calling-env\Scripts\activate`
2. تثبيت مكتبة OpenAI الخاصة بـ Python
توفر هذه المكتبة العميل للتفاعل مع API من OpenAI.
pip install openai3. تثبيت التبعيات الإضافية
سنحتاج إلى `requests` لإجراء استدعاءات HTTP و `python-dotenv` لإدارة مفتاح API الخاص بنا بشكل آمن.
pip install requests python-dotenv4. إعداد مفتاح API الخاص بك
قم بإنشاء ملف `.env` في جذر مشروعك:
OPENAI_API_KEY=your-api-key-hereاستبدل `your-api-key-here` بمفتاح API الفعلي من OpenAI. لا تقم أبدًا بتضمين المفاتيح في الكود المصدري الخاص بك.
5. التحقق من التثبيت
قم بتشغيل فحص سريع للتأكد من أن كل شيء يعمل.
# test_import.py
import openai
import requests
from dotenv import load_dotenv
import os
load_dotenv()
print("تمت جميع عمليات الاستيراد بنجاح.")
print(f"تم تحميل مفتاح API: {os.getenv('OPENAI_API_KEY')[:8]}...")نفذ: `python test_import.py`
أمثلة الاستخدام
الآن سنبني وكيل ذكاء اصطناعي عملي يستخدم استدعاء الأدوات لجلب الوقت الحالي وبيانات الطقس. سيوضح هذا الوكيل عملية اتخاذ القرار الكاملة.
مثال 1: وكيل بسيط للوقت والطقس
قم بإنشاء ملف `agent.py`:
import json
import os
from datetime import datetime
from dotenv import load_dotenv
from openai import OpenAI
load_dotenv()
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
# تعريف أدواتنا
tools = [
{
"type": "function",
"function": {
"name": "get_current_time",
"description": "الحصول على التاريخ والوقت الحاليين",
"parameters": {"type": "object", "properties": {}}
}
},
{
"type": "function",
"function": {
"name": "get_weather",
"description": "الحصول على الطقس الحالي لموقع معين",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "اسم المدينة، مثل 'London'"
}
},
"required": ["location"]
}
}
}
]
# تنفيذات الأدوات
def get_current_time():
return datetime.now().strftime("%Y-%m-%d %H:%M:%S")
def get_weather(location):
# بيانات طقس محاكاة - في الإنتاج، استخدم API حقيقي
weather_data = {
"London": "15°C، غائم",
"New York": "22°C، مشمس",
"Tokyo": "18°C، ممطر"
}
return weather_data.get(location, "بيانات الطقس غير متوفرة")
def run_agent(user_query):
messages = [{"role": "user", "content": user_query}]
# استدعاء API الأول: يقرر النموذج ما إذا كان سيدعو أداة
response = client.chat.completions.create(
model="gpt-4o-mini", # نموذج فعال من حيث التكلفة مع استدعاء الأدوات
messages=messages,
tools=tools,
tool_choice="auto" # دع النموذج يقرر
)
assistant_message = response.choices[0].message
# التحقق مما إذا كان النموذج يريد استدعاء أداة
if assistant_message.tool_calls:
for tool_call in assistant_message.tool_calls:
function_name = tool_call.function.name
arguments = json.loads(tool_call.function.arguments)
print(f"الوكيل استدعى: {function_name} مع المعاملات: {arguments}")
# تنفيذ الأداة المناسبة
if function_name == "get_current_time":
result = get_current_time()
elif function_name == "get_weather":
result = get_weather(arguments["location"])
else:
result = "أداة غير معروفة"
# إضافة نتيجة الأداة إلى المحادثة
messages.append(assistant_message)
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": str(result)
})
# استدعاء API الثاني: يولد النموذج الاستجابة النهائية مع نتائج الأدوات
final_response = client.chat.completions.create(
model="gpt-4o-mini",
messages=messages,
tools=tools
)
return final_response.choices[0].message.content
# إذا لم يكن هناك استدعاء أداة، أعد الاستجابة المباشرة
return assistant_message.content
# اختبار الوكيل
if __name__ == "__main__":
print(run_agent("ما هو الوقت الحالي؟"))
print("---")
print(run_agent("ما هو الطقس في لندن؟"))
print("---")
print(run_agent("ما هو الطقس في طوكيو وما هو الوقت؟"))قم بتشغيل الوكيل:
python agent.pyيجب أن ترى مخرجات مثل:
الوكيل استدعى: get_current_time مع المعاملات: {}
الوقت الحالي هو 2025-03-25 14:32:18.
---
الوكيل استدعى: get_weather مع المعاملات: {'location': 'London'}
الطقس في لندن هو 15°C، غائم.
---
الوكيل استدعى: get_weather مع المعاملات: {'location': 'Tokyo'}
الوكيل استدعى: get_current_time مع المعاملات: {}
في طوكيو، الطقس هو 18°C وممطر. الوقت الحالي هو 2025-03-25 14:32:18.لاحظ كيف قرر النموذج بذكاء استدعاء أداتين للاستعلام الثالث. هذا هو جوهر استدعاء الأدوات: يختار النموذج بشكل مستقل الأدوات التي سيدعوها وبأي ترتيب.
مثال 2: وكيل بحث على الويب مع معالجة الأخطاء
دعونا نبني وكيلًا أكثر قوة يبحث في الويب (باستخدام بحث محاكى) ويتعامل مع الأخطاء بشكل أنيق.
قم بإنشاء `search_agent.py`:
import json
import os
from dotenv import load_dotenv
from openai import OpenAI
load_dotenv()
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
tools = [
{
"type": "function",
"function": {
"name": "web_search",
"description": "البحث في الويب عن معلومات حالية",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "استعلام البحث"
}
},
"required": ["query"]
}
}
},
{
"type": "function",
"function": {
"name": "calculate",
"description": "إجراء عملية حسابية رياضية",
"parameters": {
"type": "object",
"properties": {
"expression": {
"type": "string",
"description": "تعبير رياضي، مثل '2 + 2'"
}
},
"required": ["expression"]
}
}
}
]
def web_search(query):
# بحث محاكى - في الإنتاج، استخدم API بحث حقيقي
results = {
"أحدث أخبار الذكاء الاصطناعي": "وكلاء الذكاء الاصطناعي يصبحون أكثر استقلالية مع قدرات استدعاء الأدوات.",
"أخبار OpenAI": "أصدرت OpenAI مؤخرًا GPT-4o مع تحسين استدعاء الدوال.",
"مدونة Microsoft AI": "أعلنت Microsoft عن أدوات ذكاء اصطناعي جديدة لعملاء المؤسسات."
}
return results.get(query.lower(), f"لم يتم العثور على نتائج لـ '{query}'")
def calculate(expression):
try:
result = eval(expression)
return str(result)
except Exception as e:
return f"خطأ: {str(e)}"
def run_agent_with_error_handling(user_query):
messages = [{"role": "user", "content": user_query}]
max_iterations = 3 # منع الحلقات اللانهائية
for _ in range(max_iterations):
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=messages,
tools=tools,
tool_choice="auto"
)
assistant_message = response.choices[0].message
if not assistant_message.tool_calls:
# لا حاجة لمزيد من الأدوات، أعد الاستجابة النهائية
return assistant_message.content
for tool_call in assistant_message.tool_calls:
function_name = tool_call.function.name
arguments = json.loads(tool_call.function.arguments)
print(f"جارٍ الاستدعاء: {function_name}({arguments})")
if function_name == "web_search":
result = web_search(arguments["query"])
elif function_name == "calculate":
result = calculate(arguments["expression"])
else:
result = "أداة غير معروفة"
messages.append(assistant_message)
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": result
})
return "تم الوصول إلى الحد الأقصى من التكرارات. يرجى تجربة استعلام أبسط."
if __name__ == "__main__":
print(run_agent_with_error_handling("ابحث عن أحدث أخبار الذكاء الاصطناعي"))
print("---")
print(run_agent_with_error_handling("ما هو ناتج 1234 * 5678؟"))
print("---")
print(run_agent_with_error_handling("ابحث عن أخبار OpenAI واحسب 100/3"))قم بتشغيله:
python search_agent.pyسترى الوكيل يستدعي بنجاح أدوات متعددة بالتسلسل، ويتعامل مع الأخطاء مثل التعبيرات غير الصالحة بشكل أنيق.
اعتبارات متقدمة
أوصاف الأدوات مهمة
يعتمد النموذج بشكل كبير على أوصاف الأدوات ليقرر متى يدعو أداة. وصف غامض مثل "احصل على بيانات" سيربك النموذج. كن محددًا: "احصل على الطقس الحالي لمدينة معينة. يعيد درجة الحرارة بالدرجة المئوية والظروف الجوية."
مخططات المعاملات
استخدم أسماء معاملات واضحة ووصفية وقم بتضمين حقول `required`. النموذج يفهم JSON Schema، لذا استفد من ميزات مثل `enum` للقيم المقيدة و `minimum`/`maximum` للنطاقات الرقمية.
الأمان والتحقق
لا تثق أبدًا في وسائط استدعاء الأداة بشكل أعمى. تحقق دائمًا من صحة المدخلات قبل تنفيذ الأداة. على سبيل المثال، إذا كانت الأداة تشغل أوامر shell، قم بتنظيف المدخلات لمنع هجمات الحقن.
إدارة التكلفة
يزيد استدعاء الأدوات من تكاليف API لأن كل استدعاء أداة يتطلب رحلة ذهاب وإياب إضافية. استخدم نماذج أرخص (مثل `gpt-4o-mini`) للقرارات البسيطة وقم بتجميع استدعاءات الأدوات المتعددة عندما يكون ذلك ممكنًا.
الخلاصة
استدعاء الأدوات هو المحرك الذي يغذي وكلاء الذكاء الاصطناعي الحديثين. من خلال السماح لنماذج اللغة الكبيرة باتخاذ قرارات مستقلة حول متى وكيف يتم استدعاء الدوال الخارجية، نفتح إمكانيات تتجاوز بكثير توليد النصوص: الوصول إلى البيانات في الوقت الفعلي، الحوسبة، الأتمتة، والتكامل مع الأنظمة الحالية.
في هذه المقالة، مررنا بالعملية الكاملة: من فهم آلية اتخاذ القرار إلى بناء وكلاء Python عاملين يستدعون أدوات للوقت والطقس والبحث. النقطة الرئيسية هي أن النموذج *يختار* الأداة التي سيستخدمها بناءً على أوصافك - وظيفتك هي تعريف الأدوات بوضوح والتعامل مع النتائج بأمان.
أثناء بناء وكلائك الخاصين، تذكر هذه المبادئ:
- **صِف الأدوات بدقة** حتى يفهم النموذج الغرض منها.
- **تحقق من صحة جميع المدخلات** قبل تنفيذ الأدوات.
- **تعامل مع الأخطاء بشكل أنيق** - يمكن أن تفشل الأدوات.
- **كرر واختبر** - استدعاء الأدوات يتحسن مع تعريفات أفضل وهندسة مطالبات محسنة.
مستقبل وكلاء الذكاء الاصطناعي هو مستقل، مدعوم بالأدوات، وقادر بشكل متزايد. مع الخطوات والأمثلة المقدمة هنا، أنت الآن مجهز لبناء وكلاء لا يتحدثون فقط - بل يتصرفون.
المصادر
أسئلة شائعة
عن ماذا يتحدث هذا المقال؟
يتناول هذا المقال موضوع "شرح استدعاء الأدوات: كيف تقرر وكلاء الذكاء الاصطناعي ما يجب فعله بعد ذلك" ضمن تصنيف وكلاء الذكاء الاصطناعي. اكتشف كيف تستخدم وكلاء الذكاء الاصطناعي استدعاء الأدوات لتحديد إجراءاتهم التالية. يشرح هذا المقال عملية اتخاذ القرار، من اختيار الوظيفة إلى التنفيذ، مع أمثلة عملية.
لمن يفيد هذا المقال؟
يفيد القراء المهتمين بفهم أدوات وتقنيات الذكاء الاصطناعي بطريقة عملية وواضحة.
ما الخطوة التالية؟
اقرأ المقال كاملاً، راجع المصادر المرفقة، ثم جرّب الأفكار المناسبة لاحتياجك بحذر.



