وكلاء الذكاء الاصطناعي واستدعاء الدوال: بناء أدوات لنماذج اللغة الكبيرة

AI2026-09-25TryQuickToolBox

أنت تبني وكيل ذكاء اصطناعي يحتاج إلى جلب بيانات في الوقت الفعلي، أو إجراء حسابات، أو التفاعل مع واجهات برمجة التطبيقات الخارجية. لكن كيف تسد الفجوة بين توليد النصوص من نموذج اللغة الكبير وتنفيذ الكود الفعلي؟ استدعاء الدوال (المعروف أيضًا باسم استخدام الأدوات) هو الإجابة. فهو يسمح لنماذج اللغة الكبيرة بطلب إجراءات محددة، ويقوم الكود الخاص بك بتنفيذها. يرشدك هذا الدليل خلال تصميم وتنفيذ وتصحيح استدعاء الدوال لوكلاء الذكاء الاصطناعي.

ما هو استدعاء الدوال؟

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

يدعم مقدمو نماذج اللغة الكبيرة الرئيسيون مثل OpenAI وAnthropic وGoogle استدعاء الدوال. الفكرة الأساسية متسقة: أنت تصف الأدوات المتاحة، ويقرر النموذج متى يستخدمها، وأنت تتعامل مع التنفيذ.

تصميم الأدوات لنماذج اللغة الكبيرة

الأدوات المصممة جيدًا ضرورية لسلوك الوكيل الموثوق. اتبع هذه المبادئ:

مثال: أداة الطقس

إليك تعريف أداة بسيطة بتنسيق JSON schema، شائع الاستخدام مع واجهة OpenAI API:

{
  "name": "get_weather",
  "description": "Get the current weather for a given city",
  "parameters": {
    "type": "object",
    "properties": {
      "city": {
        "type": "string",
        "description": "The city name, e.g., San Francisco"
      },
      "unit": {
        "type": "string",
        "enum": ["celsius", "fahrenheit"],
        "description": "Temperature unit"
      }
    },
    "required": ["city"]
  }
}

تنفيذ استدعاء الدوال: خطوة بخطوة

لنقم ببناء حلقة وكيل بسيطة باستخدام واجهة OpenAI API (ينطبق النمط على مزودين آخرين).

1. تعريف أدواتك

أنشئ قائمة بمخططات الأدوات وتعيينًا من أسماء الدوال إلى دوال Python الفعلية.

import json
import openai

# Tool schemas
tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "Get current weather for a city",
            "parameters": {
                "type": "object",
                "properties": {
                    "city": {"type": "string"},
                    "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}
                },
                "required": ["city"]
            }
        }
    }
]

# Actual functions
def get_weather(city: str, unit: str = "celsius") -> dict:
    # In reality, call a weather API
    return {"city": city, "temperature": 22, "unit": unit, "condition": "sunny"}

# Map names to functions
function_map = {
    "get_weather": get_weather
}

2. إنشاء حلقة الوكيل

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

def run_agent(user_message: str):
    messages = [{"role": "user", "content": user_message}]
    
    while True:
        response = openai.ChatCompletion.create(
            model="gpt-4",
            messages=messages,
            tools=tools,
            tool_choice="auto"
        )
        
        message = response.choices[0].message
        messages.append(message)
        
        # If no tool calls, return the content
        if not message.get("tool_calls"):
            return message["content"]
        
        # Execute each tool call
        for tool_call in message.tool_calls:
            function_name = tool_call.function.name
            arguments = json.loads(tool_call.function.arguments)
            
            if function_name in function_map:
                result = function_map[function_name](**arguments)
            else:
                result = {"error": f"Unknown function: {function_name}"}
            
            # Append tool result to messages
            messages.append({
                "role": "tool",
                "tool_call_id": tool_call.id,
                "content": json.dumps(result)
            })

تستمر هذه الحلقة حتى ينتج نموذج اللغة الكبير استجابة بدون استدعاءات أدوات، مما يشير إلى أنه يمتلك معلومات كافية.

3. التعامل مع الأخطاء والحالات الحدية

يجب على الوكلاء في العالم الحقيقي التعامل مع:

أفضل الممارسات للوكلاء الموثوقين

مقارنة دعم استدعاء الدوال

المزود اسم الميزة التنسيق
OpenAI Function Calling JSON Schema
Anthropic Tool Use JSON Schema
Google Function Calling OpenAPI Schema

أنماط متقدمة

مع نمو وكيلك، ضع في اعتبارك هذه الأنماط:

تصحيح استدعاء الدوال

عندما تسوء الأمور، تحقق من:

استخدم التسجيل لالتقاط سجل الرسائل الكامل واستدعاءات الأدوات. غالبًا ما تكون المشكلة عدم تطابق بين الوسائط المتوقعة والفعلية.

الأسئلة الشائعة

ما الفرق بين استدعاء الدوال واستخدام الأدوات؟

يشيران إلى نفس المفهوم. تسميه OpenAI "استدعاء الدوال"، بينما تستخدم Anthropic "استخدام الأدوات". كلاهما يسمح لنماذج اللغة الكبيرة بطلب تنفيذ دوال خارجية.

هل يمكنني استخدام استدعاء الدوال مع النماذج مفتوحة المصدر؟

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

كيف أمنع نموذج اللغة الكبير من استدعاء دوال خطيرة؟

لا تعرض أبدًا دوال خطيرة مباشرة. استخدم قوائم السماح، وتحقق من المدخلات، ونفذ فحوصات الأذونات. للعمليات الحساسة، اطلب تأكيدًا بشريًا قبل التنفيذ.

هل أنت مستعد لبناء وكيل الذكاء الاصطناعي الخاص بك؟ ابدأ بتعريف أداة بسيطة واختبار حلقة الوكيل. لمزيد من أدوات المطورين، تحقق من JSON Formatter لتصحيح حمولات استدعاء الأدوات.