Serverloze code-interpretersessies in Azure Container Apps
Dynamische sessies van Azure Container Apps bieden snelle en schaalbare toegang tot een code-interpreter. Elke code-interpretersessie is volledig geïsoleerd door een Hyper-V-grens en is ontworpen om niet-vertrouwde code uit te voeren.
Wordt gebruikt voor code-interpretersessies
Code-interpretersessies zijn ideaal voor scenario's waarin u code moet uitvoeren die mogelijk schadelijk is of schadelijk kan zijn voor het hostsysteem of andere gebruikers, zoals:
- Code gegenereerd door een groot taalmodel (LLM).
- Code die is ingediend door een eindgebruiker in een web- of SaaS-toepassing.
Voor populaire LLM-frameworks zoals LangChain, LlamaIndex of Semantic Kernel kunt u hulpprogramma's en invoegtoepassingen gebruiken om AI-apps te integreren met code-interpretersessies.
Uw toepassingen kunnen ook worden geïntegreerd met een code-interpretersessie met behulp van een REST API. Met de API kunt u code uitvoeren in een sessie en resultaten ophalen. U kunt ook bestanden uploaden en downloaden van en naar de sessie. U kunt uitvoerbare codebestanden uploaden en downloaden, of gegevensbestanden die door uw code kunnen worden verwerkt.
De ingebouwde code-interpretersessies ondersteunen de meest voorkomende scenario's voor het uitvoeren van code zonder dat u infrastructuur of containers hoeft te beheren. Als u volledige controle nodig hebt over de omgeving voor het uitvoeren van code of een ander scenario hebt waarvoor geïsoleerde sandboxes zijn vereist, kunt u aangepaste code-interpretersessies gebruiken.
Sessiegroep code-interpreter
Als u code-interpretersessies wilt gebruiken, hebt u een Azure-resource nodig met de naam een sessiegroep die de configuratie voor code-interpretersessies definieert. In de sessiegroep kunt u instellingen opgeven, zoals het maximum aantal gelijktijdige sessies en hoe lang een sessie inactief kan zijn voordat de sessie wordt beëindigd.
U kunt een sessiegroep maken met behulp van De Azure-portal, Azure CLI of Azure Resource Manager-sjablonen. Nadat u een sessiegroep hebt gemaakt, kunt u de api-eindpunten voor beheer van de pool gebruiken om code binnen een sessie te beheren en uit te voeren.
Een sessiegroep maken met Azure CLI
Als u een sessiegroep voor code-interpreters wilt maken met behulp van de Azure CLI, moet u ervoor zorgen dat u de nieuwste versies van de Azure CLI en de Azure Container Apps-extensie hebt met de volgende opdrachten:
# Upgrade the Azure CLI
az upgrade
# Install or upgrade the Azure Container Apps extension
az extension add --name containerapp --upgrade --allow-preview true -y
Gebruik de az containerapps sessionpool create
opdracht om de pool te maken. In het volgende voorbeeld wordt een python-code-interpretersessiegroep gemaakt met de naam my-session-pool
. Zorg ervoor dat u vervangt door <RESOURCE_GROUP>
de naam van de resourcegroep voordat u de opdracht uitvoert.
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
U kunt de volgende instellingen definiëren wanneer u een sessiegroep maakt:
Instelling | Beschrijving |
---|---|
--container-type |
Het type code-interpreter dat moet worden gebruikt. De enige ondersteunde waarde is PythonLTS . |
--max-sessions |
Het maximum aantal toegewezen sessies dat gelijktijdig is toegestaan. De maximumwaarde is 600 . |
--cooldown-period |
Het aantal toegestane seconden voor inactiviteit vóór beëindiging. De niet-actieve periode wordt opnieuw ingesteld telkens wanneer de API van de sessie wordt aangeroepen. Het toegestane bereik ligt tussen 300 en 3600 . |
--network-status |
Hiermee wordt aangegeven of uitgaand netwerkverkeer vanaf de sessie is toegestaan. Geldige waarden zijn EgressDisabled (standaard) en EgressEnabled . |
Belangrijk
Als u uitgaand verkeer inschakelt, heeft code die wordt uitgevoerd in de sessie toegang tot internet. Wees voorzichtig wanneer de code niet wordt vertrouwd omdat deze kan worden gebruikt voor het uitvoeren van schadelijke activiteiten, zoals Denial of Service-aanvallen.
Het EINDPUNT van de poolbeheer-API ophalen met Azure CLI
Als u code-interpretersessies wilt gebruiken met LLM-frameworkintegraties of door de beheer-API-eindpunten rechtstreeks aan te roepen, hebt u het beheer-API-eindpunt van de pool nodig. Het eindpunt heeft de indeling https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>
.
Gebruik de az containerapps sessionpool show
opdracht om het beheer-API-eindpunt voor een sessiegroep op te halen. Zorg ervoor dat u vervangt door <RESOURCE_GROUP>
de naam van de resourcegroep voordat u de opdracht uitvoert.
az containerapp sessionpool show \
--name my-session-pool \
--resource-group <RESOURCE_GROUP> \
--query 'properties.poolManagementEndpoint' -o tsv
Code-uitvoering in een sessie
Nadat u een sessiegroep hebt gemaakt, kan uw toepassing communiceren met sessies in de pool met behulp van een integratie met een LLM-framework of door de beheer-API-eindpunten van de pool rechtstreeks te gebruiken.
Sessie-id's
Belangrijk
De sessie-id is gevoelige informatie waarvoor u een beveiligd proces moet gebruiken om de waarde ervan te beheren. Voor een deel van dit proces is vereist dat uw toepassing ervoor zorgt dat elke gebruiker of tenant alleen toegang heeft tot hun eigen sessies. Als u de toegang tot sessies niet kunt beveiligen, kan dit leiden tot misbruik of onbevoegde toegang tot gegevens die zijn opgeslagen in de sessies van uw gebruikers. Zie Sessie-id's voor meer informatie
Wanneer u communiceert met sessies in een pool, gebruikt u een sessie-id om naar elke sessie te verwijzen. Een sessie-id is een tekenreeks die u definieert die uniek is binnen de sessiegroep. Als u een webtoepassing bouwt, kunt u de gebruikers-id gebruiken. Als u een chatbot bouwt, kunt u de gespreks-id gebruiken.
Als er een actieve sessie met de id is, wordt de sessie opnieuw gebruikt. Als er geen actieve sessie met de id is, wordt er automatisch een nieuwe sessie gemaakt.
Zie het overzicht van sessies voor meer informatie over sessie-id's.
Verificatie
Verificatie wordt verwerkt met behulp van Microsoft Entra-tokens (voorheen Azure Active Directory). Geldige Microsoft Entra-tokens worden gegenereerd door een identiteit die deel uitmaakt van de rollen Azure ContainerApps Session Executor en Inzender in de sessiegroep.
Als u een LLM-frameworkintegratie gebruikt, verwerkt het framework het genereren en beheren van tokens voor u. Zorg ervoor dat de toepassing is geconfigureerd met een beheerde identiteit met de benodigde roltoewijzingen in de sessiegroep.
Als u rechtstreeks de beheer-API-eindpunten van de pool gebruikt, moet u een token genereren en opnemen in de Authorization
header van uw HTTP-aanvragen. Naast de eerder genoemde roltoewijzingen moet het token een doelgroep (aud
) claim met de waarde https://dynamicsessions.io
bevatten.
Zie Verificatie voor meer informatie.
Integraties van LLM-framework
In plaats van de beheer-API voor sessiegroepen rechtstreeks te gebruiken, bieden de volgende LLM-frameworks integraties met code-interpretersessies:
Framework | Pakket | Zelfstudie |
---|---|---|
LangChain | Python: langchain-azure-dynamic-sessions |
Tutorial |
LlamaIndex | Python: llama-index-tools-azure-code-interpreter |
Tutorial |
Semantic Kernel | Python: semantic-kernel (versie 0.9.8-b1 of hoger) |
Tutorial |
Beheer-API-eindpunten
Als u geen LLM-frameworkintegratie gebruikt, kunt u rechtstreeks met de beheer-API-eindpunten communiceren met de sessiegroep.
De volgende eindpunten zijn beschikbaar voor het beheren van sessies in een pool:
Eindpuntpad | Wijze | Description |
---|---|---|
code/execute |
POST |
Voer code uit in een sessie. |
files/upload |
POST |
Upload een bestand naar een sessie. |
files/content/{filename} |
GET |
Een bestand downloaden van een sessie. |
files |
GET |
De bestanden in een sessie weergeven. |
Bouw de volledige URL voor elk eindpunt door het beheer-API-eindpunt van de pool samen te voegen met het eindpuntpad. De queryreeks moet een identifier
parameter bevatten die de sessie-id bevat en een api-version
parameter met de waarde 2024-02-02-preview
.
Bijvoorbeeld: https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/code/execute?api-version=2024-02-02-preview&identifier=<IDENTIFIER>
Code uitvoeren in een sessie
Als u code in een sessie wilt uitvoeren, verzendt u een POST
aanvraag naar het code/execute
eindpunt met de code die moet worden uitgevoerd in de hoofdtekst van de aanvraag. In dit voorbeeld wordt 'Hallo wereld!' afgedrukt in Python.
Voordat u de aanvraag verzendt, vervangt u de tijdelijke aanduidingen tussen de <>
haken door de juiste waarden voor uw sessiegroep en sessie-id.
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!')"
}
}
Als u een sessie opnieuw wilt gebruiken, geeft u dezelfde sessie-id op in volgende aanvragen.
Een bestand uploaden naar een sessie
Als u een bestand naar een sessie wilt uploaden, verzendt u een POST
aanvraag naar het uploadFile
eindpunt in een gegevensaanvraag voor meerdere delen. Neem de bestandsgegevens op in de aanvraagbody. Het bestand moet een bestandsnaam bevatten.
Geüploade bestanden worden opgeslagen in het bestandssysteem van de sessie onder de /mnt/data
map.
Voordat u de aanvraag verzendt, vervangt u de tijdelijke aanduidingen tussen de <>
vierkante haken door waarden die specifiek zijn voor uw aanvraag.
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--
Een bestand downloaden van een sessie
Als u een bestand wilt downloaden uit de map van /mnt/data
een sessie, verzendt u een GET
aanvraag naar het file/content/{filename}
eindpunt. Het antwoord bevat de bestandsgegevens.
Voordat u de aanvraag verzendt, vervangt u de tijdelijke aanduidingen tussen de <>
vierkante haken door waarden die specifiek zijn voor uw aanvraag.
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>
De bestanden in een sessie weergeven
Als u de bestanden in de map van /mnt/data
een sessie wilt weergeven, verzendt u een GET
aanvraag naar het files
eindpunt.
Voordat u de aanvraag verzendt, vervangt u de tijdelijke aanduidingen tussen de <>
vierkante haken door waarden die specifiek zijn voor uw aanvraag.
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>
Het antwoord bevat een lijst met bestanden in de sessie.
In de volgende lijst ziet u een voorbeeld van het type antwoord dat u kunt verwachten van het aanvragen van sessie-inhoud.
{
"$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"
}
}
]
}
Vooraf geïnstalleerde pakketten
Python-code-interpretersessies bevatten populaire Python-pakketten zoals NumPy, pandas en scikit-learn.
Als u de lijst met vooraf geïnstalleerde pakketten wilt uitvoeren, roept u het code/execute
eindpunt aan met de volgende code.
Voordat u de aanvraag verzendt, vervangt u de tijdelijke aanduidingen tussen de <>
vierkante haken door waarden die specifiek zijn voor uw aanvraag.
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]"
}
}
Logboekregistratie
Code-interpretersessies ondersteunen logboekregistratie niet rechtstreeks. Uw toepassing die communiceert met de sessies, kan aanvragen registreren bij de API voor sessiegroepbeheer en de bijbehorende antwoorden.
Billing
Code-interpretersessies worden gefactureerd op basis van de duur van elke sessie. Zie Facturering voor meer informatie.