Dela via


Serverlösa kodtolksessioner i Azure Container Apps

Dynamiska sessioner i Azure Container Apps ger snabb och skalbar åtkomst till en kodtolkare. Varje kodtolkarsession är helt isolerad av en Hyper-V-gräns och är utformad för att köra kod som inte är betrodd.

Används för kodtolkarsessioner

Kodtolkarsessioner är idealiska för scenarier där du behöver köra kod som är potentiellt skadlig eller kan orsaka skada för värdsystemet eller andra användare, till exempel:

  • Kod som genereras av en stor språkmodell (LLM).
  • Kod som skickas av en slutanvändare i ett webb- eller SaaS-program.

För populära LLM-ramverk som LangChain, LlamaIndex eller Semantic Kernel kan du använda verktyg och plugin-program för att integrera AI-appar med kodtolksessioner.

Dina program kan också integreras med kodtolkarsessionen med hjälp av ett REST-API. Med API:et kan du:

  • Köra kod i en session och hämta resultat

  • Ladda upp och ladda ned filer till och från sessionen.

    Du kan ladda upp och ladda ned körbara kodfiler eller datafiler som koden kan bearbeta.

De inbyggda kodtolkarsessionerna stöder de vanligaste scenarierna för kodkörning utan att behöva hantera infrastruktur eller containrar.

Om du behöver fullständig kontroll över kodkörningsmiljön eller har ett annat scenario som kräver isolerade sandbox-miljöer kan du använda anpassade kodtolkarsessioner.

Sessionspool för kodtolkar

Om du vill använda kodtolkarsessioner behöver du en Azure-resurs som kallas en sessionspool som definierar konfigurationen för kodtolkarsessioner.

I sessionspoolen kan du ange inställningar som maximalt antal samtidiga sessioner och hur länge en session kan vara inaktiv innan sessionen avslutas.

Du kan skapa en sessionspool med hjälp av mallarna Azure Portal, Azure CLI eller Azure Resource Manager. När du har skapat en sessionspool kan du använda poolens API-slutpunkter för hantering för att hantera och köra kod i en session.

Mer information om hur du skapar och konfigurerar en sessionspool finns i Använda sessionspooler.

Kodkörning i en session

När du har skapat en sessionspool kan ditt program interagera med sessioner i poolen med hjälp av en integrering med ett LLM-ramverk eller med hjälp av poolens hanterings-API-slutpunkter direkt.

Sessionsidentifierare

Viktigt!

Sessionsidentifieraren är känslig information som kräver att du använder en säker process för att hantera dess värde. En del av den här processen kräver att programmet ser till att varje användare eller klient endast har åtkomst till sina egna sessioner.

Om du inte kan skydda åtkomsten till sessioner kan det leda till missbruk eller obehörig åtkomst till data som lagras i användarnas sessioner. Mer information finns i Sessionsidentifierare.

När du interagerar med sessioner i en pool använder du en sessionsidentifierare för att referera till varje session En sessionsidentifierare är en sträng som du definierar som är unik i sessionspoolen. Om du skapar ett webbprogram kan du använda användarens ID. Om du skapar en chattrobot kan du använda konversations-ID:t.

Om det finns en session som körs med identifieraren återanvänds sessionen. Om det inte finns någon session som körs med identifieraren skapas en ny session automatiskt.

Autentisering

Autentisering hanteras med Hjälp av Microsoft Entra-token. Giltiga Microsoft Entra-token genereras av en identitet som tillhör Azure ContainerApps sessionskörnings- och deltagarroller i sessionspoolen.

Om du använder en LLM-ramverksintegrering hanterar ramverket tokengenereringen och hanteringen åt dig. Kontrollera att programmet har konfigurerats med en hanterad identitet med nödvändiga rolltilldelningar i sessionspoolen.

Om du använder poolens API-slutpunkter för hantering direkt måste du generera en token och inkludera den Authorization i rubriken för dina HTTP-begäranden. Utöver de rolltilldelningar som tidigare nämnts måste token innehålla ett målgruppsanspråk (aud) med värdet https://dynamicsessions.io.

Mer information finns i autentisering och auktorisering.

Arbeta med filer

Du kan ladda upp och ladda ned filer och visa en lista över alla filer i en kodtolkarsession.

Ladda upp en fil

Om du vill ladda upp en fil till en session skickar du en POST begäran till uploadFile slutpunkten i en databegäran i flera delar. Inkludera fildata i begärandetexten. Filen måste innehålla ett filnamn.

Uppladdade filer lagras i sessionens filsystem under /mnt/data katalogen.

I följande exempel visas hur du laddar upp en fil till en session.

Innan du skickar begäran ersätter du platshållarna mellan <> hakparenteserna med värden som är specifika för din begäran.

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

Ladda ned en fil

Om du vill ladda ned en fil från en sessions /mnt/data katalog skickar du en GET begäran till file/content/{filename} slutpunkten. Svaret innehåller fildata.

I följande exempel visas hur du formaterar en GET begäran om att ladda ned en fil.

Innan du skickar begäran ersätter du platshållarna mellan <> hakparenteserna med värden som är specifika för din begäran.

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>

Visa en lista över filerna

Om du vill visa en lista över filerna i en sessions /mnt/data katalog skickar du en GET begäran till files slutpunkten.

I följande exempel visas hur du listar filerna i en sessions katalog.

Innan du skickar begäran ersätter du platshållarna mellan <> hakparenteserna med värden som är specifika för din begäran.

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>

Svaret innehåller en lista över filer i sessionen.

I följande lista visas ett exempel på vilken typ av svar du kan förvänta dig av att begära sessionsinnehåll.

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

Säkerhet

Kodtolkarsessioner är utformade för att köra obetrodd kod i isolerade miljöer, vilket säkerställer att dina program och data förblir skyddade.

LLM-ramverksintegreringar

I stället för att använda API:et för hantering av sessionspooler direkt tillhandahåller följande LLM-ramverk integreringar med kodtolkarsessioner:

Ramverk Paket Självstudie
LangChain Pytonorm: langchain-azure-dynamic-sessions Handledning
LlamaIndex Pytonorm: llama-index-tools-azure-code-interpreter Handledning
Semantisk Kärna Python: semantic-kernel (version 0.9.8-b1 eller senare) Handledning

Hanterings-API-slutpunkter

Om du inte använder en LLM-ramverksintegrering kan du interagera med sessionspoolen direkt med hjälp av hanterings-API-slutpunkterna.

Köra kod i en session

Om du vill köra kod i en session skickar du en POST begäran till code/execute slutpunkten med koden som ska köras i begärandetexten.

Följande exempel skriver Hello, world! ut i Python.

Innan du skickar begäran ersätter du platshållarna mellan <> hakparenteserna med lämpliga värden för sessionspoolen och sessionsidentifieraren.

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

Om du vill återanvända en session anger du samma sessionsidentifierare i efterföljande begäranden.

Ladda upp en fil till en session

Om du vill ladda upp en fil till en session skickar du en POST begäran till uploadFile slutpunkten i en databegäran i flera delar. Inkludera fildata i begärandetexten. Filen måste innehålla ett filnamn.

Uppladdade filer lagras i sessionens filsystem under /mnt/data katalogen.

Innan du skickar begäran ersätter du platshållarna mellan <> hakparenteserna med värden som är specifika för din begäran.

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

Kommentar

Filuppladdningsgränsen är 128MB. Om detta överskrids kan en HTTP 413 returneras.

Ladda ned en fil från en session

Om du vill ladda ned en fil från en sessions /mnt/data katalog skickar du en GET begäran till file/content/{filename} slutpunkten. Svaret innehåller fildata.

Innan du skickar begäran ersätter du platshållarna mellan <> hakparenteserna med värden som är specifika för din begäran.

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>

Visa en lista över filerna i en session

Om du vill visa en lista över filerna i en sessions /mnt/data katalog skickar du en GET begäran till files slutpunkten.

Innan du skickar begäran ersätter du platshållarna mellan <> hakparenteserna med värden som är specifika för din begäran.

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>

Svaret innehåller en lista över filer i sessionen.

I följande lista visas ett exempel på vilken typ av svar du kan förvänta dig av att begära sessionsinnehåll.

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

Förinstallerade paket

Python-kodtolksessioner innehåller populära Python-paket som NumPy, Pandas och scikit-learn.

Om du vill mata ut listan över förinstallerade paket anropar du code/execute slutpunkten med följande kod.

Innan du skickar begäran ersätter du platshållarna mellan <> hakparenteserna med värden som är specifika för din begäran.

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

Loggning

Kodtolkarsessioner stöder inte loggning direkt. Ditt program som interagerar med sessionerna kan logga begäranden till API:et för hantering av sessionspooler och dess svar.

Fakturering

Kodtolkarsessioner faktureras baserat på varaktigheten för varje session. Mer information finns i Fakturering.

Nästa steg