دمج استدعاء الأداة مع استدلال LLM مع الوظيفة الإضافية لمشغل سلسلة أدوات الذكاء الاصطناعي على Azure Kubernetes Service (AKS)

في هذه المقالة، يمكنك تكوين مساحة عمل استدلال مشغل سلسلة أدوات الذكاء الاصطناعي (KAITO) ونشرها على خدمة Azure Kubernetes (AKS) مع دعم استدعاء أداة على غرار OpenAI. يمكنك أيضا تعلم كيفية التحقق من صحة وظيفة استدعاء الأداة باستخدام مقاييس vLLM ونماذج الدالة المحلية.

ما المقصود باستدعاء الأداة؟

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

  • "أحتاج إلى الاتصال بواجهة برمجة تطبيقات الطقس."
  • "أحتاج إلى استخدام آلة حاسبة."
  • "يجب أن أبحث في قاعدة بيانات."

يقوم بذلك عن طريق استدعاء "أداة" محددة بمعايير يختارها بناء على طلب المستخدم. استدعاء الأداة مفيد من أجل:

  • روبوتات الدردشة التي تحجز أو تلخص أو تحسب.
  • تطبيقات LLM للمؤسسات حيث يجب تقليل الهلوسة.
  • أطر عمل الوكيل (AutoGen و LangGraph و LangChain و AgentOps وما إلى ذلك).

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

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

نتيجة لذلك ، أصبحت أداة استدعاء AKS الآن نمطا أساسيا لبناء تطبيقات الذكاء الاصطناعي الحديثة التي تدرك السياق وقادرة على العمل وجاهزة للمؤسسة.

أداة الاتصال باستخدام KAITO

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

المتطلبات

تأكد من تشغيل مساحة عمل استدلال KAITO

  • راقب نشر مساحة العمل الخاصة بك باستخدام kubectl get الأمر.

    kubectl get workspace workspace‑phi‑4‑mini-toolcall -w
    

    في الإخراج، تريد التحقق من أن المورد (ResourceReady) والاستدلال (InferenceReady) جاهزان ونجحت مساحة العمل (WorkspaceSucceeded being true).

تأكد من أن واجهة برمجة تطبيقات الاستدلال جاهزة للخدمة

  1. بمجرد أن تصبح مساحة العمل جاهزة، ابحث عن نقطة نهاية الخدمة باستخدام الأمر kubectl get .

    kubectl get svc workspace‑phi‑4-mini-toolcall
    

    إشعار

    قد يكون الإخراج عنوانا ClusterIP أو عنوانا داخليا. تحقق من المنفذ (المنفذات) التي تستمع إليها الخدمة. واجهة برمجة تطبيقات استدلال KAITO الافتراضية موجودة على منفذ 80 HTTP. إذا كان داخليا فقط، فيمكنك إعادة التوجيه محليا.

  2. قم بإعادة توجيه خدمة الاستدلال للاختبار باستخدام الأمر kubectl port-forward .

    kubectl port-forward svc/workspace‑phi‑4‑mini-toolcall 8000:80
    
  3. تحقق من نقطة النهاية /v1/models للتأكد من توفر LLM باستخدام curl.

    curl http://localhost:8000/v1/models
    

    لضمان نشر LLM ، وعمل واجهة برمجة التطبيقات ، يجب أن يكون الإخراج مشابها لما يلي:

    ...
    {
      "object": "list",
      "data": [
        {
          "id": "phi‑4‑mini‑instruct",
          ...
          ...
        }
      ]
    }
    ...
    

اختبار أداة استدعاء الدالة المسماة

في هذا المثال، تدعم مساحة workspace‑phi‑4‑mini-toolcall العمل استدعاء أدوات الدالة المسماة بشكل افتراضي، لذا يمكننا التأكد من قبول نموذج اللغة الكبيرة لمواصفات "الأداة" في طلبات على نمط OpenAI ويعيد هيكل "استدعاء الدالة".

مقتطف Python الذي نستخدمه في هذا القسم مأخوذ من وثائق KAITO ويستخدم عميلا متوافقا مع OpenAI.

  • تأكد من أن نموذج اللغة الكبيرة يقبل مواصفة "أداة" في طلبات على غرار OpenAI ويعيد هيكل "استدعاء الدالة". هذا المثال:

    • تهيئة العميل المتوافق مع OpenAI للتحدث إلى خادم استدلال محلي. من المفترض أن يكون الخادم يعمل في http://localhost:8000/v1 استدعاءات واجهة برمجة التطبيقات على غرار OpenAI ويقبلها.
    • يحاكي منطق الواجهة الخلفية لأداة تسمى get_weather. (في سيناريو حقيقي ، قد يستدعي هذا واجهة برمجة تطبيقات الطقس.)
    • يصف واجهة الأداة. Phi-4-mini سيرى LLM هذه الأداة ويقرر ما إذا كان سيتم استخدامها بناء على مدخلات المستخدم.
    • يرسل عينة رسالة دردشة إلى النموذج ويوفر مواصفات الأداة. يسمح الإعداد tool_choice="auto" ل LLM بتحديد ما إذا كان يجب عليه استدعاء أداة بناء على المطالبة.
    • في هذه الحالة ، كان طلب المستخدم ذا صلة بالأداة get_weather ، لذلك نقوم بمحاكاة تنفيذ الأداة ، واستدعاء الوظيفة المحلية مع الوسيطات المختارة للنموذج.
    from openai import OpenAI
    import json
    
    # local server
    client = OpenAI(base_url="http://localhost:8000/v1", api_key="dummy")
    
    def get_weather(location: str, unit: str) -> str:
        return f"Getting the weather for {location} in {unit}..."
    
    tool_functions = {"get_weather": get_weather}
    
    tools = [{
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "Get the current weather in a given location",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {"type": "string"},
                    "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}
                },
                "required": ["location", "unit"]
            }
        }
    }]
    
    response = client.chat.completions.create(
        model="phi‑4‑mini‑instruct",   # or client.models.list().data[0].id
        messages=[{"role": "user", "content": "What's the weather like in San Francisco?"}],
        tools=tools,
        tool_choice="auto"
    )
    
    # Inspect response
    tool_call = response.choices[0].message.tool_calls[0].function
    args = json.loads(tool_call.arguments)
    print("Function called:", tool_call.name)
    print("Arguments:", args)
    print("Result:", tool_functions[tool_call.name](**args))
    

    يجب أن يبدو الإخراج مشابها للآتي:

    Function called: get_weather
    Arguments: {"location": "San Francisco, CA", "unit": "fahrenheit"}
    Result: Getting the weather for San Francisco, CA in fahrenheit...
    

    يعود حقل "tool_calls"، مما يعني أن Phi-4-mini نموذج اللغة الكبير قرر استدعاء الدالة. الآن، تم تحليل وتنفيذ استدعاء أداة عينة بنجاح بناء على قرار النموذج بتأكيد سلوك استدعاء الأدوات من طرف إلى طرف باستخدام نشر استنتاج KAITO.

Troubleshooting

إعداد النموذج لا يدعم استدعاء الأدوات

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

وقت تشغيل غير محاذاة

يجب أن يستخدم استنتاج KAITO وقت تشغيل vLLM لاستدعاء الأدوات (عادة لا يدعم وقت تشغيل HuggingFace Transformer استدعاء الأدوات في KAITO).

مشكلات الشبكة / نقطة النهاية

في حالة إعادة توجيه المنفذ، تأكد من إعادة توجيه منافذ الخدمة بشكل صحيح. إذا تعذر الوصول إلى خادم MCP الخارجي، فسوف يخرج خطأ.

المهل

قد تستغرق مكالمات خادم MCP الخارجية وقتا. تأكد من أن مهلة المحول أو العميل عالية بما فيه الكفاية.

المصادقة

إذا كان خادم MCP الخارجي يتطلب المصادقة (مفتاح واجهة برمجة التطبيقات ، الرأس ، إلخ) ، فتأكد من توفير بيانات الاعتماد الصحيحة.

الخطوات التالية