Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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.