Delen via


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 het volgende doen:

  • Code uitvoeren in een sessie en resultaten ophalen

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

Zie Sessiegroepen gebruiken voor meer informatie over het maken en configureren van een sessiegroep.

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.

Verificatie

Verificatie wordt verwerkt met behulp van Microsoft Entra-tokens. 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.iobevatten.

Zie verificatie en autorisatievoor meer informatie.

Werken met bestanden

U kunt bestanden uploaden en downloaden en alle bestanden in een code-interpretersessie weergeven.

Een bestand uploaden

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.

In het volgende voorbeeld ziet u hoe u een bestand uploadt naar een sessie.

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

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.

In het volgende voorbeeld ziet u hoe u een GET aanvraag kunt opmaken om een bestand te downloaden.

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 weergeven

Als u de bestanden in de map van /mnt/data een sessie wilt weergeven, verzendt u een GET aanvraag naar het files eindpunt.

In het volgende voorbeeld ziet u hoe u de bestanden in de map van een sessie weergeeft.

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

Veiligheid

Code-interpretersessies zijn ontworpen om niet-vertrouwde code uit te voeren in geïsoleerde omgevingen, zodat uw toepassingen en gegevens beveiligd blijven.

Integraties van LLM-framework

In plaats van de beheer-API voor sessiegroepen rechtstreeks te gebruiken, bieden de volgende LLM-frameworks integraties met code-interpretersessies:

Raamwerk Pakket Zelfstudie
LangChain Python: langchain-azure-dynamic-sessions Tutorial
LlamaIndex Python: llama-index-tools-azure-code-interpreter Tutorial
Semantische 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.

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 het volgende voorbeeld wordt Hello, world! 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--

Notitie

De limiet voor het uploaden van bestanden is 128MB. Als dit wordt overschreden, kan een HTTP 413 geretourneerde waarde worden geretourneerd.

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.

Facturatie

Code-interpretersessies worden gefactureerd op basis van de duur van elke sessie. Zie Facturering voor meer informatie.

Volgende stappen