AI Agents

إتقان استدعاء الأدوات: المحرك وراء وكلاء الذكاء الاصطناعي المستقلين

تعتمد عملية الانتقال من روبوتات الدردشة البسيطة القائمة على نماذج اللغة الكبيرة (LLM) إلى وكلاء مستقلين وقادرين على آلية حاسمة واحدة: استدعاء الأدوات. في حين كانت الإصدارات المبكرة من الذكاء الاصطناعي التوليدي محصورة في توليد النصوص، يجب على الوكلاء الحديثين التفاعل مع الأنظمة الخارجية، واستعلام قواعد البيانات، وتنفيذ الأكواد، والتلاعب بالعالم المادي أو الرقمي. يُعد استدعاء الأدوات الجسر الذي يربط بين الاستدلال الاحتمالي لنموذج اللغة وتنفيذ البرمجيات الحتمي.

تعريف الآلية

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

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

تعريف الأدوات والمخططات

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

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

التنفيذ: مثال بلغة بايثون

فيما يلي مثال مفاهيمي باستخدام مكتبة OpenAI بلغة بايثون لإظهار كيفية تعريف أداة واستدعائها. لاحظ أنه في الإنتاج، ستتعامل مع حالات الأخطاء وإعادة المحاولة.

import json
import openai

# 1. Define the function the LLM can use
def get_current_weather(location: str) -> str:
    """
    Get the current weather in a given location.
    """
    # In a real app, this would call an external API
    return f"The weather in {location} is sunny, 72F."

# 2. Define the tool schema for the LLM
tools = [
    {
        "type": "function",
        "function": {
            "name": "get_current_weather",
            "description": "Get the current weather in a given location",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "The city and state, e.g. San Francisco, CA"
                    }
                },
                "required": ["location"]
            }
        }
    }
]

# 3. Send the user request to the LLM
response = openai.chat.completions.create(
    model="gpt-4o",
    messages=[
        {"role": "user", "content": "What's the weather like in Paris?"}
    ],
    tools=tools,
)

# 4. Process the tool call
message = response.choices[0].message
if message.tool_calls:
    for tool_call in message.tool_calls:
        function_name = tool_call.function.name
        function_args = json.loads(tool_call.function.arguments)
        
        # Execute the local function
        if function_name == "get_current_weather":
            result = get_current_weather(**function_args)
        
        # Send the result back to the LLM
        messages = [
            {"role": "user", "content": "What's the weather like in Paris?"},
            message,
            {"role": "tool", "tool_call_id": tool_call.id, "content": result}
        ]
        
        # Get the final answer
        final_response = openai.chat.completions.create(
            model="gpt-4o",
            messages=messages,
        )
        print(final_response.choices[0].message.content)

التحديات وأفضل الممارسات

يتطلب تنفيذ استدعاء الأدوات بفعالية معالجة عدة تحديات:

  • زمن الاستجابة (Latency): تتضمن استدعاءات الأدوات عدة رحلات ذهاباً وإياباً إلى واجهة برمجة التطبيقات (API). صمّم للتنفيذ غير المتزامن حيثما أمكن.
  • معالجة الأخطاء: إذا فشلت الأداة، يجب إرجاع رسالة الخطأ إلى نموذج اللغة بطريقة تتيح له إعادة المحاولة بحجج مصححة أو إخطار المستخدم.
  • الأمان: لا تسمح أبداً لنموذج اللغة بتنفيذ أكواد عشوائية مباشرة. يجب أن تكون جميع الأدوات معزولة (Sandboxed) ومعرّفة بشكل صارم.
  • إدارة نافذة السياق: يمكن أن تتسبب السلاسل الطويلة من استدعاءات الأدوات في تجاوز نافذة السياق. نفّذ استراتيجيات اقتطاع أو تلخيص للخطوات الوسيطة.

الخلاصة

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

Share: