Bagikan melalui


Tutorial: Menggunakan sesi penerjemah kode di AutoGen dengan Azure Container Apps

AutoGen adalah kerangka kerja untuk mengembangkan aplikasi model bahasa besar (LLM) menggunakan beberapa agen yang saling berkonversi untuk menyelesaikan tugas. Agen yang dibangun dengan AutoGen dapat beroperasi dalam berbagai mode yang menggunakan kombinasi LLM, input manusia, dan alat. Salah satu jenis alat penting untuk agen AutoGen adalah pelaksana kode. Mereka memungkinkan agen untuk melakukan tugas yang kompleks dengan menulis dan mengeksekusi kode. Dengan mengintegrasikan sesi dinamis Azure Container Apps dengan AutoGen, Anda memberi agen penerjemah kode untuk digunakan untuk melakukan komputasi yang berguna dan mengambil tindakan.

Dalam tutorial ini, Anda mempelajari cara menjalankan agen AI yang ditulis di AutoGen dalam API web. API menerima input pengguna dan mengembalikan respons yang dihasilkan oleh agen AI. Agen menggunakan penerjemah kode dalam sesi dinamis untuk melakukan penghitungan.

Prasyarat

Membuat sumber daya Azure

Aplikasi sampel dalam mulai cepat ini menggunakan LLM dari Azure OpenAI. Ini juga menggunakan sesi Azure Container Apps untuk menjalankan kode yang dihasilkan oleh LLM.

  1. Perbarui Azure CLI ke versi terbaru.

     az upgrade
    
  2. Hapus ekstensi Azure Container Apps jika sudah diinstal dan instal versi pratinjau ekstensi Azure Container Apps yang berisi perintah untuk sesi:

    az extension remove --name containerapp
    az extension add \
        --name containerapp \
        --allow-preview true -y
    
  3. Masuk ke Azure:

    az login
    
  4. Atur variabel yang digunakan dalam mulai cepat ini:

    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
    

    Ganti <UNIQUE_OPEN_AI_NAME> dengan nama unik untuk membuat akun Azure OpenAI Anda.

  5. Membuat grup sumber daya:

    az group create --name $RESOURCE_GROUP_NAME --location $SESSION_POOL_LOCATION
    
  6. Buat akun 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. Buat penyebaran model GPT 3.5 Turbo bernama gpt-35-turbo di akun 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. Buat kumpulan sesi penerjemah kode:

    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
    

Menjalankan sampel aplikasi secara lokal

Sebelum menyebarkan aplikasi ke Azure Container Apps, Anda dapat menjalankannya secara lokal untuk mengujinya.

Mengkloning aplikasi

  1. Kloning repositori sampel sesi Azure Container Apps.

    git clone https://github.com/Azure-Samples/container-apps-dynamic-sessions-samples.git
    
  2. Ubah ke direktori yang berisi aplikasi sampel:

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

Mengonfigurasikan aplikasi

  1. Buat lingkungan virtual Python dan aktifkan:

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

    Ubah versi Python dalam perintah jika Anda menggunakan versi yang berbeda. Disarankan untuk menggunakan Python 3.10 atau yang lebih baru.

    Catatan

    Jika Anda menggunakan Windows, ganti .venv/bin/activate dengan .venv\Scripts\activate.

  2. Instal paket Python yang diperlukan:

    python -m pip install -r requirements.txt
    
  3. Untuk menjalankan aplikasi, Anda perlu mengonfigurasi variabel lingkungan.

    1. Ambil titik akhir akun Azure OpenAI:

      az cognitiveservices account show \
          --name $AZURE_OPENAI_NAME \
          --resource-group $RESOURCE_GROUP_NAME \
          --query properties.endpoint \
          --output tsv
      
    2. Ambil kunci Azure OpenAI API:

      az cognitiveservices account keys list \
          --name $AZURE_OPENAI_NAME \
          --resource-group $RESOURCE_GROUP_NAME \
          --query key1 \
          --output tsv
      
    3. Ambil titik akhir manajemen kumpulan sesi Azure Container Apps:

      az containerapp sessionpool show \
          --name $SESSION_POOL_NAME \
          --resource-group $RESOURCE_GROUP_NAME \
          --query properties.poolManagementEndpoint \
          --output tsv
      
    4. Buat .env file di akar direktori aplikasi sampel (lokasi yang sama dengan main.py). Tambahkan konten berikut ke file:

      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>
      

      Ganti <AZURE_OPENAI_ENDPOINT> dengan titik akhir akun Azure OpenAI, <AZURE_OPENAI_KEY> dengan kunci AZURE OpenAI API, dan <SESSION_POOL_MANAGEMENT_ENDPOINT> dengan titik akhir manajemen kumpulan sesi.

  4. Aplikasi ini menggunakan DefaultAzureCredential untuk mengautentikasi dengan layanan Azure. Di komputer lokal Anda, komputer tersebut menggunakan kredensial masuk Azure CLI Anda saat ini. Anda harus memberi diri Anda peran Pelaksana Sesi Azure ContainerApps pada kumpulan sesi agar aplikasi dapat mengakses kumpulan sesi.

    1. Ambil nama pengguna Azure CLI Anda:

      az account show --query user.name --output tsv
      
    2. Jalankan perintah berikut untuk mengambil ID sumber daya kumpulan sesi:

      az containerapp sessionpool show --name $SESSION_POOL_NAME --resource-group $RESOURCE_GROUP_NAME --query id --output tsv
      
    3. Tetapkan peran Pelaksana Sesi Azure ContainerApps ke pengguna Azure CLI Anda di kumpulan sesi:

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

      Ganti <CLI_USERNAME> dengan nama pengguna Azure CLI Anda dan <SESSION_POOL_RESOURCE_ID> dengan ID sumber daya kumpulan sesi.

Menjalankan aplikasi

Sebelum menjalankan aplikasi sampel, buka main.py di editor dan tinjau kode. Aplikasi ini menggunakan FastAPI untuk membuat API web yang menerima pesan pengguna dalam string kueri.

Baris kode berikut membuat instans ACASessionsExecutor dan menyediakannya ke agen 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()
)

Ketika perlu melakukan penghitungan dan tugas, agen menggunakan penerjemah kode di ACASessionsExecutor untuk menjalankan kode. Kode dijalankan dalam sesi di kumpulan sesi. Secara default, pengidentifikasi sesi acak dihasilkan saat Anda membuat instans alat. Jika agen menggunakan alat yang sama untuk menjalankan beberapa cuplikan kode Python, agen menggunakan sesi yang sama. Untuk memastikan setiap pengguna akhir memiliki sesi unik, gunakan agen dan alat terpisah untuk setiap pengguna.

ACASessionsExecutor diimplementasikan dalam aca_sessions_executor.py.

  1. Jalankan aplikasi sampel:

    fastapi dev main.py
    
  2. Buka browser dan navigasikan ke http://localhost:8000/docs. Anda melihat antarmuka pengguna Swagger untuk aplikasi sampel.

  3. /chat Perluas titik akhir dan pilih Cobalah.

  4. Masukkan What time is it right now? di message bidang dan pilih Jalankan.

    Agen merespons dengan waktu saat ini. Di terminal, Anda melihat log yang menunjukkan kode Python yang dihasilkan agen untuk mendapatkan waktu saat ini dan menjalankannya dalam sesi penerjemah kode.

  5. Untuk menghentikan aplikasi, masukkan Ctrl+C di terminal.

Opsional: Menyebarkan aplikasi sampel ke Azure Container Apps

Untuk menyebarkan aplikasi FastAPI ke Azure Container Apps, Anda perlu membuat gambar kontainer dan mendorongnya ke registri kontainer. Kemudian Anda dapat menyebarkan gambar ke Azure Container Apps. Perintah az containerapp up menggabungkan langkah-langkah ini ke dalam satu perintah.

Anda kemudian perlu mengonfigurasi identitas terkelola untuk aplikasi dan menetapkan peran yang tepat untuk mengakses Azure OpenAI dan kumpulan sesi.

  1. Atur variabel untuk lingkungan Dan nama aplikasi Container Apps:

    ENVIRONMENT_NAME=aca-sessions-tutorial-env
    CONTAINER_APP_NAME=chat-api
    
  2. Bangun dan sebarkan aplikasi ke 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 .
    

    Ganti <AZURE_OPENAI_ENDPOINT> dengan titik akhir akun Azure OpenAI, <AZURE_OPENAI_KEY> dengan kunci Azure OpenAI, dan <SESSION_POOL_MANAGEMENT_ENDPOINT> dengan titik akhir manajemen kumpulan sesi.

  3. Aktifkan identitas terkelola yang ditetapkan sistem untuk aplikasi:

    az containerapp identity assign \
        --name $CONTAINER_APP_NAME \
        --resource-group $RESOURCE_GROUP_NAME \
        --system-assigned
    
  4. Agar aplikasi mengakses kumpulan sesi, Anda perlu menetapkan identitas terkelola peran yang tepat.

    1. Ambil ID utama identitas terkelola:

      az containerapp show \
          --name $CONTAINER_APP_NAME \
          --resource-group $RESOURCE_GROUP_NAME \
          --query identity.principalId \
          --output tsv
      
    2. Ambil ID sumber daya kumpulan sesi:

      az containerapp sessionpool show \
          --name $SESSION_POOL_NAME \
          --resource-group $RESOURCE_GROUP_NAME \
          --query id \
          --output tsv
      
    3. Tetapkan identitas terkelola Azure ContainerApps Session ExecutorContributor dan peran pada kumpulan sesi:

      Sebelum Anda menjalankan perintah berikut, ganti <PRINCIPAL_ID> dan <SESSION_POOL_RESOURCE_ID> dengan nilai yang Anda ambil di langkah-langkah sebelumnya.

      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. Ambil nama domain aplikasi yang sepenuhnya memenuhi syarat (FQDN):

    az containerapp show \
        --name $CONTAINER_APP_NAME \
        --resource-group $RESOURCE_GROUP_NAME \
        --query properties.configuration.ingress.fqdn \
        --output tsv
    
  6. Buka browser untuk https://<FQDN>/docs menguji aplikasi yang disebarkan.

Membersihkan sumber daya

Setelah selesai dengan sumber daya, Anda dapat menghapusnya untuk menghindari dikenakan biaya:

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

Langkah berikutnya