Megosztás a következőn keresztül:


Kiszolgáló nélküli kódértelmező-munkamenetek az Azure Container Appsben

Az Azure Container Apps dinamikus munkamenetei gyors és méretezhető hozzáférést biztosítanak egy kódértelmezőhöz. Minden kódértelmező munkamenetet egy Hyper-V-határ különít el teljesen, és nem megbízható kód futtatására lett tervezve.

Kódértelmező-munkamenetek használata

A kódértelmező munkamenetek ideálisak olyan helyzetekben, amikor olyan kódot kell futtatnia, amely potenciálisan rosszindulatú, vagy kárt okozhat a gazdarendszerben vagy más felhasználókban, például:

  • Nagy nyelvi modell (LLM) által létrehozott kód.
  • Egy web- vagy SaaS-alkalmazás végfelhasználója által küldött kód.

Az olyan népszerű LLM-keretrendszerek esetében, mint a LangChain, a LlamaIndex vagy a Szemantic Kernel, az AI-alkalmazások kódértelmezők munkameneteivel való integrálásához eszközöket és beépülő modulokat használhat.

Az alkalmazások rest API-val is integrálhatók a kódértelmezéssel. Az API-val kódot futtathat egy munkamenetben, és lekérheti az eredményeket. Fájlokat is feltölthet és letölthet a munkamenetből. Feltölthet és letölthet végrehajtható kódfájlokat, illetve olyan adatfájlokat, amelyeket a kód feldolgozhat.

A beépített kódértelmező-munkamenetek támogatják a leggyakoribb kódvégrehajtási forgatókönyveket anélkül, hogy infrastruktúrát vagy tárolókat kellene kezelni. Ha teljes körű vezérlésre van szüksége a kódvégrehajtási környezet felett, vagy egy másik, elkülönített tesztkörnyezetet igénylő forgatókönyvvel rendelkezik, használhat egyéni kódértelmező-munkameneteket.

Kódértelmező munkamenetkészlete

A kódértelmező-munkamenetek használatához szükség van egy Azure-erőforrásra, egy munkamenetkészletre, amely meghatározza a kódértelmező-munkamenetek konfigurációját. A munkamenet-készletben megadhatja a beállításokat, például az egyidejű munkamenetek maximális számát és azt, hogy egy munkamenet mennyi ideig tétlen lehet a munkamenet leállása előtt.

Munkamenetkészletet az Azure Portal, az Azure CLI vagy az Azure Resource Manager sablonjaival hozhat létre. A munkamenetkészlet létrehozása után a készlet felügyeleti API-végpontjaival kezelheti és végrehajthatja a kódot egy munkameneten belül.

Munkamenetkészlet létrehozása az Azure CLI-vel

Ha kódértelmező munkamenetkészletet szeretne létrehozni az Azure CLI használatával, győződjön meg arról, hogy rendelkezik az Azure CLI és az Azure Container Apps bővítmény legújabb verzióival az alábbi parancsokkal:

# Upgrade the Azure CLI
az upgrade

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

A készlet létrehozásához használja a az containerapps sessionpool create parancsot. Az alábbi példa létrehoz egy Python-kódértelmező munkamenetkészletet .my-session-pool A parancs futtatása előtt mindenképpen cserélje le <RESOURCE_GROUP> az erőforráscsoport nevét.

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

Munkamenetkészlet létrehozásakor a következő beállításokat határozhatja meg:

Beállítás Leírás
--container-type A használni kívánt kódértelmező típusa. Az egyetlen támogatott érték az PythonLTS.
--max-sessions Az egyidejűleg engedélyezett lefoglalt munkamenetek maximális száma. A maximális érték: 600.
--cooldown-period Az engedélyezett tétlen másodpercek száma a befejezés előtt. A tétlenségi időszak minden alkalommal alaphelyzetbe áll, amikor a munkamenet API-ját meghívják. Az engedélyezett tartomány az és 3600a közötti 300 tartomány.
--network-status Meghatározza, hogy engedélyezett-e a kimenő hálózati forgalom a munkamenetből. Az érvényes értékek az (alapértelmezett) és a EgressDisabledEgressEnabled.

Fontos

Ha engedélyezi a kimenő forgalmat, a munkamenetben futó kód hozzáférhet az internethez. Körültekintően járjon el, ha a kód nem megbízható, mivel rosszindulatú tevékenységek, például szolgáltatásmegtagadásos támadások végrehajtására használható.

A készletkezelési API-végpont lekérése az Azure CLI-vel

A kódértelmező-munkamenetek LLM-keretrendszer-integrációkkal való használatához vagy a felügyeleti API-végpontok közvetlen meghívásához szüksége van a készlet felügyeleti API-végpontjára. A végpont formátuma https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>.

A munkamenetkészlet felügyeleti API-végpontjának lekéréséhez használja a az containerapps sessionpool show parancsot. A parancs futtatása előtt mindenképpen cserélje le <RESOURCE_GROUP> az erőforráscsoport nevét.

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

Kódvégrehajtás munkamenetben

A munkamenet-készlet létrehozása után az alkalmazás az LLM-keretrendszerrel való integráció vagy a készlet felügyeleti API-végpontjaival közvetlenül kommunikálhat a készlet munkameneteivel.

Munkamenet-azonosítók

Fontos

A munkamenet-azonosító bizalmas információ, amely megköveteli, hogy biztonságos folyamatot használjon az értékének kezeléséhez. A folyamat egy része megköveteli, hogy az alkalmazás biztosítsa, hogy minden felhasználó vagy bérlő csak a saját munkameneteihez férhessen hozzá. A munkamenetekhez való hozzáférés biztonságossá tételének elmulasztása a felhasználói munkamenetekben tárolt adatokkal való visszaélést vagy jogosulatlan hozzáférést eredményezhet. További információ: Munkamenet-azonosítók

Amikor egy készlet munkameneteit használja, egy munkamenet-azonosítóval hivatkozik az egyes munkamenetekre. A munkamenet-azonosító egy olyan sztring, amelyet a munkamenetkészleten belül egyediként határoz meg. Ha webalkalmazást készít, használhatja a felhasználó azonosítóját. Ha csevegőrobotot készít, használhatja a beszélgetés azonosítóját.

Ha van egy futó munkamenet az azonosítóval, a rendszer újra felhasználja a munkamenetet. Ha nincs futó munkamenet az azonosítóval, a rendszer automatikusan létrehoz egy új munkamenetet.

A munkamenet-azonosítókkal kapcsolatos további információkért tekintse meg a munkamenetek áttekintését.

Hitelesítés

A hitelesítés a Microsoft Entra (korábbi nevén Azure Active Directory) jogkivonatokkal történik. Az érvényes Microsoft Entra-jogkivonatokat a munkamenetkészlet Azure ContainerApps-munkamenet-végrehajtói és közreműködői szerepköreihez tartozó identitás hozza létre.

Ha LLM-keretrendszer-integrációt használ, a keretrendszer kezeli a jogkivonatok létrehozását és kezelését. Győződjön meg arról, hogy az alkalmazás olyan felügyelt identitással van konfigurálva, amely rendelkezik a munkamenetkészlet szükséges szerepkör-hozzárendeléseivel.

Ha közvetlenül a készlet felügyeleti API-végpontjait használja, létre kell hoznia egy jogkivonatot, és bele kell foglalnia a Authorization HTTP-kérések fejlécében. A korábban említett szerepkör-hozzárendeléseken kívül a jogkivonatnak tartalmaznia kell egy célközönségi (aud) jogcímet az értékkel https://dynamicsessions.io.

További információ: Hitelesítés.

LLM-keretrendszer-integrációk

A munkamenetkészlet-felügyeleti API közvetlen használata helyett a következő LLM-keretrendszerek integrációt biztosítanak a kódértelmező-munkamenetekkel:

Váz Csomag Oktatóanyag
LangChain Python: langchain-azure-dynamic-sessions Bemutató
LlamaIndex Python: llama-index-tools-azure-code-interpreter Bemutató
Szemantikus kernel Python: semantic-kernel (0.9.8-b1-es vagy újabb verzió) Bemutató

Felügyeleti API-végpontok

Ha nem LLM-keretrendszer-integrációt használ, közvetlenül a felügyeleti API-végpontok használatával kezelheti a munkamenetkészletet.

A következő végpontok érhetők el egy készlet munkameneteinek kezeléséhez:

Végpont elérési útja Metódus Leírás
code/execute POST Kód végrehajtása munkamenetben.
files/upload POST Fájl feltöltése munkamenetbe.
files/content/{filename} GET Fájl letöltése munkamenetből.
files GET A munkamenetben lévő fájlok listázása.

Az egyes végpontok teljes URL-címét úgy hozhatja létre, hogy összefűzi a készlet felügyeleti API-végpontját a végpont elérési útjával. A lekérdezési sztringnek tartalmaznia kell egy identifier , a munkamenet-azonosítót tartalmazó paramétert és egy api-version értéket 2024-02-02-previewtartalmazó paramétert.

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

Kód végrehajtása munkamenetben

Ha egy munkamenetben szeretné végrehajtani a kódot, küldjön egy kérést POST a code/execute végpontnak a kóddal együtt, amely a kérés törzsében fut. Ez a példa a "Hello, world!" szöveget nyomtatja a Pythonban.

A kérés elküldése előtt cserélje le a zárójelek közötti <> helyőrzőket a munkamenetkészlet és a munkamenet-azonosító megfelelő értékeire.

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!')"
    }
}

A munkamenet újbóli felhasználásához adja meg ugyanazt a munkamenet-azonosítót a későbbi kérésekben.

Fájl feltöltése munkamenetbe

Ha egy fájlt fel szeretne tölteni egy munkamenetbe, küldjön egy kérést POST a uploadFile végpontnak egy többrészes űrlapadat-kérelemben. Adja meg a fájladatokat a kérelem törzsében. A fájlnak tartalmaznia kell egy fájlnevet.

A feltöltött fájlokat a munkamenet fájlrendszere tárolja a /mnt/data könyvtár alatt.

A kérés elküldése előtt cserélje le a zárójelek közötti helyőrzőket a <> kérelemre jellemző értékekre.

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--

Feljegyzés

A fájlfeltöltés korlátja .128MB Ha ezt túllépi HTTP 413 , a rendszer visszaadhatja a hibát.

Fájl letöltése munkamenetből

Ha le szeretne tölteni egy fájlt egy munkamenet könyvtárából /mnt/data , küldjön egy kérést GET a file/content/{filename} végpontnak. A válasz tartalmazza a fájladatokat.

A kérés elküldése előtt cserélje le a zárójelek közötti helyőrzőket a <> kérelemre jellemző értékekre.

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>

Fájlok listázása munkamenetben

A munkamenet /mnt/data könyvtárában lévő fájlok listázásához küldjön egy kérést GET a files végpontnak.

A kérés elküldése előtt cserélje le a zárójelek közötti helyőrzőket a <> kérelemre jellemző értékekre.

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>

A válasz a munkamenetben lévő fájlok listáját tartalmazza.

Az alábbi lista a munkamenet tartalmának lekérésétől várható válasz típusát mutatja be.

{
    "$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"
            }
        }
    ]
}

Előre telepített csomagok

A Python-kódértelmező-munkamenetek olyan népszerű Python-csomagokat tartalmaznak, mint a NumPy, a pandas és a scikit-learn.

Az előre telepített csomagok listájának kimenetéhez hívja meg a code/execute végpontot az alábbi kóddal.

A kérés elküldése előtt cserélje le a zárójelek közötti helyőrzőket a <> kérelemre jellemző értékekre.

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]"
    }
}

Naplózás

A kódértelmező-munkamenetek nem támogatják közvetlenül a naplózást. A munkameneteket kezelő alkalmazás naplózhatja a kéréseket a munkamenetkészlet-kezelési API-ba és annak válaszaiba.

Számlázás

A kódértelmező-munkamenetek számlázása az egyes munkamenetek időtartama alapján kerül számlázásra. További információt a Számlázás című témakörben talál.

Következő lépések