مشاركة عبر


البرنامج التعليمي: استخدام جلسات مترجم التعليمات البرمجية في AutoGen مع Azure Container Apps

AutoGen هو إطار عمل لتطوير تطبيقات نموذج اللغة الكبيرة (LLM) باستخدام عوامل متعددة تحدث مع بعضها البعض لحل المهام. يمكن للوكلاء الذين تم إنشاؤهم باستخدام AutoGen العمل في أوضاع مختلفة تستخدم مجموعات من LLMs والمدخلات البشرية والأدوات. أحد الأدوات المهمة لعوامل AutoGen هو منفذو التعليمات البرمجية. وهي تمكن الوكلاء من تنفيذ مهام معقدة عن طريق كتابة التعليمات البرمجية وتنفيذها. من خلال دمج جلسات عمل Azure Container Apps الديناميكية مع AutoGen، يمكنك منح العامل مترجم تعليمة برمجية لاستخدامه لإجراء حسابات مفيدة واتخاذ إجراءات.

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

المتطلبات الأساسية

  • حساب Azure مع اشتراك نشط.
  • قم بتثبيت Azure CLI.
  • Git.
  • Python 3.10 أو أحدث.

إنشاء موارد Azure

يستخدم نموذج التطبيق في هذا التشغيل السريع LLM من Azure OpenAI. كما يستخدم جلسات عمل Azure Container Apps لتشغيل التعليمات البرمجية التي تم إنشاؤها بواسطة LLM.

  1. تحديث Azure CLI إلى أحدث إصدار.

     az upgrade
    
  2. قم بإزالة ملحق Azure Container Apps إذا كان مثبتا بالفعل وقم بتثبيت إصدار معاينة ملحق Azure Container Apps الذي يحتوي على أوامر للجلسات:

    az extension remove --name containerapp
    az extension add \
        --name containerapp \
        --allow-preview true -y
    
  3. تسجيل الدخول إلى Azure:

    az login
    
  4. تعيين المتغيرات المستخدمة في هذا التشغيل السريع:

    RESOURCE_GROUP_NAME=aca-sessions-tutorial
    AZURE_OPENAI_LOCATION=swedencentral
    AZURE_OPENAI_NAME=<UNIQUE_OPEN_AI_NAME>
    SESSION_POOL_LOCATION=eastasia
    SESSION_POOL_NAME=code-interpreter-pool
    

    استبدل <UNIQUE_OPEN_AI_NAME> باسم فريد لإنشاء حساب Azure OpenAI الخاص بك.

  5. أنشئ مجموعة موارد:

    az group create --name $RESOURCE_GROUP_NAME --location $SESSION_POOL_LOCATION
    
  6. إنشاء حساب Azure OpenAI:

    az cognitiveservices account create \
        --name $AZURE_OPENAI_NAME \
        --resource-group $RESOURCE_GROUP_NAME \
        --location $AZURE_OPENAI_LOCATION \
        --kind OpenAI \
        --sku s0 \
        --custom-domain $AZURE_OPENAI_NAME
    
  7. إنشاء نشر نموذج GPT 3.5 Turbo المسمى gpt-35-turbo في حساب Azure OpenAI:

    az cognitiveservices account deployment create \
        --resource-group $RESOURCE_GROUP_NAME \
        --name $AZURE_OPENAI_NAME \
        --deployment-name gpt-35-turbo \
        --model-name gpt-35-turbo \
        --model-version "1106" \
        --model-format OpenAI \
        --sku-capacity "100" \
        --sku-name "Standard"
    
  8. إنشاء تجمع جلسة مترجم التعليمات البرمجية:

    az containerapp sessionpool create \
        --name $SESSION_POOL_NAME \
        --resource-group $RESOURCE_GROUP_NAME \
        --location $SESSION_POOL_LOCATION \
        --max-sessions 100 \
        --container-type PythonLTS \
        --cooldown-period 300
    

تشغيل نموذج التطبيق محليًا

قبل نشر التطبيق إلى Azure Container Apps، يمكنك تشغيله محليا لاختباره.

استنساخ التطبيق

  1. استنساخ مستودع نماذج جلسات عمل Azure Container Apps.

    git clone https://github.com/Azure-Samples/container-apps-dynamic-sessions-samples.git
    
  2. قم بالتغيير إلى الدليل الذي يحتوي على نموذج التطبيق:

    cd container-apps-dynamic-sessions-samples/autogen-python-webapi
    

تكوين التطبيق

  1. إنشاء بيئة Python الظاهرية وتنشيطها:

    python3.11 -m venv .venv
    source .venv/bin/activate
    

    قم بتغيير إصدار Python في الأمر إذا كنت تستخدم إصدارا مختلفا. يوصى باستخدام Python 3.10 أو أحدث.

    إشعار

    إذا كنت تستخدم Windows، فاستبدل .venv/bin/activate ب .venv\Scripts\activate.

  2. تثبيت حزم Python المطلوبة:

    python -m pip install -r requirements.txt
    
  3. لتشغيل التطبيق، تحتاج إلى تكوين متغيرات البيئة.

    1. استرداد نقطة نهاية حساب Azure OpenAI:

      az cognitiveservices account show \
          --name $AZURE_OPENAI_NAME \
          --resource-group $RESOURCE_GROUP_NAME \
          --query properties.endpoint \
          --output tsv
      
    2. استرداد مفتاح Azure OpenAI API:

      az cognitiveservices account keys list \
          --name $AZURE_OPENAI_NAME \
          --resource-group $RESOURCE_GROUP_NAME \
          --query key1 \
          --output tsv
      
    3. استرداد نقطة نهاية إدارة تجمع جلسة عمل Azure Container Apps:

      az containerapp sessionpool show \
          --name $SESSION_POOL_NAME \
          --resource-group $RESOURCE_GROUP_NAME \
          --query properties.poolManagementEndpoint \
          --output tsv
      
    4. .env إنشاء ملف في جذر نموذج دليل التطبيق (نفس موقع main.py). أضف المحتوى التالي إلى الملف:

      OAI_CONFIG_LIST=[{"model": "gpt-4", "api_key": "<AZURE_OPENAI_KEY>", "api_type": "azure", "base_url": "<AZURE_OPENAI_ENDPOINT>", "api_version": "2023-12-01-preview"}]
      POOL_MANAGEMENT_ENDPOINT=<SESSION_POOL_MANAGEMENT_ENDPOINT>
      

      استبدل <AZURE_OPENAI_ENDPOINT> بنقطة نهاية حساب Azure OpenAI، <AZURE_OPENAI_KEY> ومفتاح Azure OpenAI API، ونقطة <SESSION_POOL_MANAGEMENT_ENDPOINT> نهاية إدارة تجمع الجلسة.

  4. يستخدم DefaultAzureCredential التطبيق للمصادقة مع خدمات Azure. على جهازك المحلي، يستخدم بيانات اعتماد تسجيل الدخول الحالية ل Azure CLI. يجب أن تمنح نفسك دور Azure ContainerApps Session Executor في تجمع الجلسة للتطبيق للوصول إلى تجمع الجلسة.

    1. استرداد اسم مستخدم Azure CLI الخاص بك:

      az account show --query user.name --output tsv
      
    2. قم بتشغيل الأوامر التالية لاسترداد معرف مورد تجمع جلسة العمل:

      az containerapp sessionpool show --name $SESSION_POOL_NAME --resource-group $RESOURCE_GROUP_NAME --query id --output tsv
      
    3. تعيين دور منفذ جلسة عمل Azure ContainerApps إلى مستخدم Azure CLI في تجمع الجلسة:

      az role assignment create \
          --role "Azure ContainerApps Session Executor" \
          --assignee <CLI_USERNAME> \
          --scope <SESSION_POOL_RESOURCE_ID>
      

      استبدل <CLI_USERNAME> باسم مستخدم Azure CLI الخاص بك و <SESSION_POOL_RESOURCE_ID> بمعرف مورد تجمع جلسة العمل.

تشغيل التطبيق

قبل تشغيل نموذج التطبيق، افتح main.py في محرر وراجع التعليمات البرمجية. يستخدم التطبيق FastAPI لإنشاء واجهة برمجة تطبيقات ويب تقبل رسالة مستخدم في سلسلة الاستعلام.

تنشئ الأسطر التالية من التعليمات البرمجية مثيل ACASessionsExecutor وتوفره إلى عامل autogen:

aca_sessions_executor = ACASessionsExecutor(aca_pool_management_endpoint)
code_executor_agent = ConversableAgent(
    name="CodeExecutor",
    llm_config=False,
    code_execution_config={"executor": aca_sessions_executor},
    human_input_mode="NEVER",
    is_termination_msg=lambda msg: "TERMINATE" in msg.get("content", "").strip().upper()
)

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

يتم تنفيذ ACASessionsExecutor في aca_sessions_executor.py.

  1. تشغيل نموذج التطبيق:

    fastapi dev main.py
    
  2. افتح مستعرض ويب وانتقل إلى http://localhost:8000/docs. ترى واجهة مستخدم Swagger لنموذج التطبيق.

  3. قم بتوسيع /chat نقطة النهاية وحدد Try it out.

  4. أدخل What time is it right now? في message الحقل وحدد Execute.

    يستجيب العامل بالوقت الحالي. في المحطة الطرفية، ترى السجلات التي تعرض تعليمة Python البرمجية التي أنشأها العامل للحصول على الوقت الحالي وتشغيله في جلسة مترجم التعليمات البرمجية.

  5. لإيقاف التطبيق، أدخل Ctrl+C في المحطة الطرفية.

اختياري: نشر نموذج التطبيق إلى Azure Container Apps

لنشر تطبيق FastAPI إلى Azure Container Apps، تحتاج إلى إنشاء صورة حاوية ودفعها إلى سجل حاوية. ثم يمكنك نشر الصورة إلى Azure Container Apps. يجمع az containerapp up الأمر بين هذه الخطوات في أمر واحد.

ثم تحتاج إلى تكوين الهوية المدارة للتطبيق وتعيين الأدوار المناسبة له للوصول إلى Azure OpenAI وتجمع الجلسة.

  1. تعيين المتغيرات لبيئة تطبيقات الحاوية واسم التطبيق:

    ENVIRONMENT_NAME=aca-sessions-tutorial-env
    CONTAINER_APP_NAME=chat-api
    
  2. إنشاء التطبيق ونشره في Azure Container Apps:

    az containerapp up \
        --name $CONTAINER_APP_NAME \
        --resource-group $RESOURCE_GROUP_NAME \
        --location $SESSION_POOL_LOCATION \
        --environment $ENVIRONMENT_NAME \
        --env-vars 'OAI_CONFIG_LIST=[{"model": "gpt-4", "api_key": "<AZURE_OPENAI_KEY>", "api_type": "azure", "base_url": "<AZURE_OPENAI_ENDPOINT>", "api_version": "2023-12-01-preview"}]' 'POOL_MANAGEMENT_ENDPOINT=<SESSION_POOL_MANAGEMENT_ENDPOINT>' \
        --source .
    

    استبدل <AZURE_OPENAI_ENDPOINT> بنقطة نهاية حساب Azure OpenAI، <AZURE_OPENAI_KEY> ومفتاح Azure OpenAI، ونقطة <SESSION_POOL_MANAGEMENT_ENDPOINT> نهاية إدارة تجمع الجلسة.

  3. تمكين الهوية المدارة المعينة من قبل النظام للتطبيق:

    az containerapp identity assign \
        --name $CONTAINER_APP_NAME \
        --resource-group $RESOURCE_GROUP_NAME \
        --system-assigned
    
  4. لكي يتمكن التطبيق من الوصول إلى تجمع الجلسة، تحتاج إلى تعيين الأدوار المناسبة للهوية المدارة.

    1. استرداد المعرف الأساسي للهوية المدارة:

      az containerapp show \
          --name $CONTAINER_APP_NAME \
          --resource-group $RESOURCE_GROUP_NAME \
          --query identity.principalId \
          --output tsv
      
    2. استرداد معرف مورد تجمع جلسة العمل:

      az containerapp sessionpool show \
          --name $SESSION_POOL_NAME \
          --resource-group $RESOURCE_GROUP_NAME \
          --query id \
          --output tsv
      
    3. تعيين الهوية المدارة Azure ContainerApps Session Executor للأدوار و Contributor في تجمع الجلسة:

      قبل تشغيل الأمر التالي، استبدل <PRINCIPAL_ID> و <SESSION_POOL_RESOURCE_ID> بالقيم التي قمت باستردادها في الخطوات السابقة.

      az role assignment create \
          --role "Azure ContainerApps Session Executor" \
          --assignee <PRINCIPAL_ID> \
          --scope <SESSION_POOL_RESOURCE_ID>
      
      az role assignment create \
          --role "Contributor" \
          --assignee <PRINCIPAL_ID> \
          --scope <SESSION_POOL_RESOURCE_ID>
      
  5. استرداد اسم المجال المؤهل بالكامل للتطبيق (FQDN):

    az containerapp show \
        --name $CONTAINER_APP_NAME \
        --resource-group $RESOURCE_GROUP_NAME \
        --query properties.configuration.ingress.fqdn \
        --output tsv
    
  6. افتح المستعرض https://<FQDN>/docs لاختبار التطبيق المنشور.

تنظيف الموارد

عند الانتهاء من الموارد، يمكنك حذفها لتجنب تكبد رسوم:

az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait

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