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 3600 a 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 EgressDisabled EgressEnabled . |
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-preview
tartalmazó 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.