Bagikan melalui


Sesi penerjemah kode tanpa server di Azure Container Apps (pratinjau)

Sesi dinamis Azure Container Apps menyediakan akses yang cepat dan dapat diskalakan ke penerjemah kode. Setiap sesi penerjemah kode sepenuhnya diisolasi oleh batas Hyper-V dan dirancang untuk menjalankan kode yang tidak tepercaya.

Catatan

Fitur sesi dinamis Azure Container Apps saat ini dalam pratinjau. Lihat batasan pratinjau untuk informasi selengkapnya.

Menggunakan untuk sesi penerjemah kode

Sesi penerjemah kode sangat ideal untuk skenario di mana Anda perlu menjalankan kode yang berpotensi berbahaya atau dapat membahayakan sistem host atau pengguna lain, seperti:

  • Kode yang dihasilkan oleh model bahasa besar (LLM).
  • Kode yang dikirimkan oleh pengguna akhir di aplikasi web atau SaaS.

Untuk kerangka kerja LLM populer seperti LangChain, LlamaIndex, atau Semantic Kernel, Anda dapat menggunakan alat dan plugin untuk mengintegrasikan aplikasi AI dengan sesi penerjemah kode.

Aplikasi Anda juga dapat diintegrasikan dengan sesi penerjemah kode menggunakan REST API. API memungkinkan Anda untuk menjalankan kode dalam sesi dan mengambil hasil. Anda juga dapat mengunggah dan mengunduh file ke dan dari sesi. Anda dapat mengunggah dan mengunduh file kode yang dapat dieksekusi, atau file data yang dapat diproses kode Anda.

Sesi penerjemah kode bawaan mendukung skenario eksekusi kode yang paling umum tanpa perlu mengelola infrastruktur atau kontainer. Jika Anda memerlukan kontrol penuh atas lingkungan eksekusi kode atau memiliki skenario berbeda yang memerlukan kotak pasir terisolasi, Anda dapat menggunakan sesi penerjemah kode kustom.

Kumpulan sesi penerjemah kode

Untuk menggunakan sesi penerjemah kode, Anda memerlukan sumber daya Azure yang disebut kumpulan sesi yang menentukan konfigurasi untuk sesi penerjemah kode. Di kumpulan sesi, Anda dapat menentukan pengaturan seperti jumlah maksimum sesi bersamaan dan berapa lama sesi dapat diam sebelum sesi dihentikan.

Anda dapat membuat kumpulan sesi menggunakan templat portal Azure, Azure CLI, atau Azure Resource Manager. Setelah membuat kumpulan sesi, Anda dapat menggunakan titik akhir API manajemen kumpulan untuk mengelola dan menjalankan kode di dalam sesi.

Membuat kumpulan sesi dengan Azure CLI

Untuk membuat kumpulan sesi penerjemah kode menggunakan Azure CLI, pastikan Anda memiliki versi terbaru Azure CLI dan ekstensi Azure Container Apps dengan perintah berikut:

# Upgrade the Azure CLI
az upgrade

# Install or upgrade the Azure Container Apps extension
az extension add --name containerapp --upgrade --allow-preview true -y

az containerapps sessionpool create Gunakan perintah untuk membuat kumpulan. Contoh berikut membuat kumpulan sesi penerjemah kode Python bernama my-session-pool. Pastikan untuk mengganti <RESOURCE_GROUP> dengan nama grup sumber daya anda sebelum menjalankan perintah.

az containerapp sessionpool create \
    --name my-session-pool \
    --resource-group <RESOURCE_GROUP> \
    --location westus2 \
    --container-type PythonLTS \
    --max-sessions 100 \
    --cooldown-period 300 \
    --network-status EgressDisabled

Anda dapat menentukan pengaturan berikut saat membuat kumpulan sesi:

Pengaturan Deskripsi
--container-type Jenis penerjemah kode yang akan digunakan. Satu-satunya nilai yang didukung adalah PythonLTS.
--max-sessions Jumlah maksimum sesi yang dialokasikan yang diizinkan secara bersamaan. Nilai maksimumnya adalah 600.
--cooldown-period Jumlah detik diam yang diizinkan sebelum penghentian. Periode diam diatur ulang setiap kali API sesi dipanggil. Rentang yang diizinkan adalah antara 300 dan 3600.
--network-status Menunjuk apakah lalu lintas jaringan keluar diizinkan dari sesi. Nilai yang valid adalah EgressDisabled (default) dan EgressEnabled.

Penting

Jika Anda mengaktifkan egress, kode yang berjalan dalam sesi dapat mengakses internet. Berhati-hatilah saat kode tidak tepercaya karena dapat digunakan untuk melakukan aktivitas berbahaya seperti serangan penolakan layanan.

Mendapatkan titik akhir API manajemen kumpulan dengan Azure CLI

Untuk menggunakan sesi penerjemah kode dengan integrasi kerangka kerja LLM atau dengan memanggil titik akhir API manajemen secara langsung, Anda memerlukan titik akhir API manajemen kumpulan. Titik akhir dalam format https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>.

Untuk mengambil titik akhir API manajemen untuk kumpulan sesi, gunakan az containerapps sessionpool show perintah . Pastikan untuk mengganti <RESOURCE_GROUP> dengan nama grup sumber daya anda sebelum menjalankan perintah.

az containerapp sessionpool show \
    --name my-session-pool \
    --resource-group <RESOURCE_GROUP> \
    --query 'properties.poolManagementEndpoint' -o tsv

Eksekusi kode dalam sesi

Setelah Anda membuat kumpulan sesi, aplikasi Anda dapat berinteraksi dengan sesi di kumpulan menggunakan integrasi dengan kerangka kerja LLM atau dengan menggunakan titik akhir API manajemen kumpulan secara langsung.

Pengidentifikasi sesi

Saat berinteraksi dengan sesi di kumpulan, Anda menggunakan pengidentifikasi sesi untuk mereferensikan setiap sesi Pengidentifikasi sesi A adalah string yang Anda tentukan unik dalam kumpulan sesi. Jika Anda membuat aplikasi web, Anda dapat menggunakan ID pengguna. Jika Anda membuat chatbot, Anda dapat menggunakan ID percakapan.

Jika ada sesi yang sedang berjalan dengan pengidentifikasi, sesi akan digunakan kembali. Jika tidak ada sesi yang berjalan dengan pengidentifikasi, sesi baru akan dibuat secara otomatis.

Untuk mempelajari selengkapnya tentang pengidentifikasi sesi, lihat Gambaran umum sesi.

Autentikasi

Autentikasi ditangani menggunakan token Microsoft Entra (sebelumnya Azure Active Directory). Token Microsoft Entra yang valid dihasilkan oleh identitas milik peran Pelaksana Sesi dan Kontributor Azure ContainerApps pada kumpulan sesi.

Jika Anda menggunakan integrasi kerangka kerja LLM, kerangka kerja menangani pembuatan dan manajemen token untuk Anda. Pastikan bahwa aplikasi dikonfigurasi dengan identitas terkelola dengan penetapan peran yang diperlukan pada kumpulan sesi.

Jika Anda menggunakan titik akhir API manajemen kumpulan secara langsung, Anda harus membuat token dan menyertakannya di Authorization header permintaan HTTP Anda. Selain penetapan peran yang disebutkan sebelumnya, token perlu berisi klaim audiens (aud) dengan nilai https://dynamicsessions.io.

Untuk mempelajari selengkapnya, lihat Autentikasi.

Integrasi kerangka kerja LLM

Alih-alih menggunakan API manajemen kumpulan sesi secara langsung, kerangka kerja LLM berikut menyediakan integrasi dengan sesi penerjemah kode:

Kerangka Paket Tutorial
LangChain Python: langchain-azure-dynamic-sessions Tutorial
LlamaIndex Python: llama-index-tools-azure-code-interpreter Tutorial
Kernel Semantik Python: semantic-kernel (versi 0.9.8-b1 atau yang lebih baru) Tutorial

Titik akhir API Manajemen

Jika Anda tidak menggunakan integrasi kerangka kerja LLM, Anda dapat berinteraksi dengan kumpulan sesi secara langsung menggunakan titik akhir API manajemen.

Titik akhir berikut tersedia untuk mengelola sesi dalam kumpulan:

Jalur titik akhir Metode Deskripsi
code/execute POST Jalankan kode dalam sesi.
files/upload POST Unggah file ke sesi.
files/content/{filename} GET Mengunduh file dari sesi.
files GET Mencantumkan file dalam sesi.

Buat URL lengkap untuk setiap titik akhir dengan menggabungkan titik akhir API manajemen kumpulan dengan jalur titik akhir. String kueri harus menyertakan parameter yang identifier berisi pengidentifikasi sesi, dan api-version parameter dengan nilai 2024-02-02-preview.

Misalnya: https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/code/execute?api-version=2024-02-02-preview&identifier=<IDENTIFIER>

Menjalankan kode dalam sesi

Untuk menjalankan kode dalam sesi, kirim POST permintaan ke code/execute titik akhir dengan kode untuk dijalankan di isi permintaan. Contoh ini mencetak "Hello, world!" di Python.

Sebelum Anda mengirim permintaan, ganti tempat penampung antara tanda <> kurung dengan nilai yang sesuai untuk kumpulan sesi dan pengidentifikasi sesi Anda.

POST https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/code/execute?api-version=2024-02-02-preview&identifier=<SESSION_ID>
Content-Type: application/json
Authorization: Bearer <token>

{
    "properties": {
        "codeInputType": "inline",
        "executionType": "synchronous",
        "code": "print('Hello, world!')"
    }
}

Untuk menggunakan kembali sesi, tentukan pengidentifikasi sesi yang sama dalam permintaan berikutnya.

Mengunggah file ke sesi

Untuk mengunggah file ke sesi, kirim POST permintaan ke uploadFile titik akhir dalam permintaan data formulir multipihak. Sertakan data file dalam isi permintaan. File harus menyertakan nama file.

File yang diunggah disimpan dalam sistem file sesi di /mnt/data bawah direktori.

Sebelum Anda mengirim permintaan, ganti tempat penampung antara tanda <> kurung dengan nilai khusus untuk permintaan Anda.

POST https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/files/upload?api-version=2024-02-02-preview&identifier=<SESSION_ID>
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
Authorization: Bearer <token>

------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file"; filename="<FILE_NAME_AND_EXTENSION>"
Content-Type: application/octet-stream

(data)
------WebKitFormBoundary7MA4YWxkTrZu0gW--

Mengunduh file dari sesi

Untuk mengunduh file dari direktori sesi /mnt/data , kirim GET permintaan ke file/content/{filename} titik akhir. Respons mencakup data file.

Sebelum Anda mengirim permintaan, ganti tempat penampung antara tanda <> kurung dengan nilai khusus untuk permintaan Anda.

GET https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/files/content/<FILE_NAME_AND_EXTENSION>?api-version=2024-02-02-preview&identifier=<SESSION_ID>
Authorization: Bearer <TOKEN>

Mencantumkan file dalam sesi

Untuk mencantumkan file dalam direktori sesi /mnt/data , kirim GET permintaan ke files titik akhir.

Sebelum Anda mengirim permintaan, ganti tempat penampung antara tanda <> kurung dengan nilai khusus untuk permintaan Anda.

GET https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/files?api-version=2024-02-02-preview&identifier=<SESSION_ID>
Authorization: Bearer <TOKEN>

Respons berisi daftar file dalam sesi.

Daftar berikut menunjukkan sampel jenis respons yang dapat Anda harapkan dari meminta konten sesi.

{
    "$id": "1",
    "value": [
        {
            "$id": "2",
            "properties": {
                "$id": "3",
                "filename": "test1.txt",
                "size": 16,
                "lastModifiedTime": "2024-05-02T07:21:07.9922617Z"
            }
        },
        {
            "$id": "4",
            "properties": {
                "$id": "5",
                "filename": "test2.txt",
                "size": 17,
                "lastModifiedTime": "2024-05-02T07:21:08.8802793Z"
            }
        }
    ]
}

Paket yang telah diinstal sebelumnya

Sesi penerjemah kode Python mencakup paket Python populer seperti NumPy, panda, dan scikit-learn.

Untuk menghasilkan daftar paket yang telah diinstal sebelumnya, panggil code/execute titik akhir dengan kode berikut.

Sebelum Anda mengirim permintaan, ganti tempat penampung antara tanda <> kurung dengan nilai khusus untuk permintaan Anda.

POST https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/identifier/<SESSION_ID>/code/execute?api-version=2024-02-02-preview&identifier=<SESSION_ID>
Content-Type: application/json
Authorization: Bearer <TOKEN>

{
    "properties": {
        "codeInputType": "inline",
        "executionType": "synchronous",
        "code": "import pkg_resources\n[(d.project_name, d.version) for d in pkg_resources.working_set]"
    }
}

Langkah berikutnya