Freigeben über


Serverlose Code-Interpreter-Sitzungen in Azure Container Apps

Dynamische Sitzungen in Azure Container Apps bieten schnellen und skalierbaren Zugriff auf einen Codeinterpreter. Jede Codeinterpretersitzung ist durch eine Hyper-V-Grenze vollständig isoliert und für das Ausführen von nicht vertrauenswürdigem Code konzipiert.

Anwendungsfälle für Codeinterpretersitzungen

Codeinterpretersitzungen eignen sich ideal für Szenarien, in denen Sie Code ausführen müssen, der potenziell schädlich ist oder dem Hostsystem oder anderen Benutzern schaden könnte, z. B.:

  • Code, der von einem großen Sprachmodell (LLM) generiert wird.
  • Code, der von einem Endbenutzer in einer Web- oder SaaS-Anwendung übermittelt wird.

Für beliebte LLM-Frameworks wie LangChain, LlamaIndex oder Semantic Kernel können Sie Tools und Plug-Ins verwenden, um KI-Apps in Codeinterpretersitzungen zu integrieren.

Ihre Anwendungen können auch mithilfe einer REST-API in Codeinterpretersitzungen integriert werden. Die API ermöglicht Folgendes:

  • Ausführen von Code in einer Sitzung und Abrufen von Ergebnissen

  • Laden Sie Dateien in und aus der Sitzung hoch und laden Sie sie herunter.

    Sie können ausführbare Codedateien oder Datendateien hochladen und herunterladen, die Ihr Code verarbeiten kann.

Die integrierten Codeinterpretersitzungen unterstützen die häufigsten Codeausführungsszenarien, ohne dass Infrastruktur oder Container verwaltet werden müssen.

Wenn Sie die vollständige Kontrolle über die Codeausführungsumgebung benötigen oder über ein anderes Szenario verfügen, das isolierte Sandboxes erfordert, können Sie benutzerdefinierte Codeinterpretersitzungenverwenden.

Codeinterpreter-Sitzungspool

Um Codedolmetschersitzungen zu verwenden, benötigen Sie eine Azure-Ressource, die als Sitzungspool bezeichnet wird, der die Konfiguration für Codedolmetschersitzungen definiert.

Im Sitzungspool können Sie Einstellungen angeben, z. B. die maximale Anzahl gleichzeitiger Sitzungen und wie lange eine Sitzung im Leerlauf sein kann, bevor sie beendet wird.

Sie können einen Sitzungspool über das Azure-Portal, die Azure CLI oder mithilfe von Azure Resource Manager-Vorlagen erstellen. Nachdem Sie einen Sitzungspool erstellt haben, können Sie die API-Verwaltungsendpunkte des Pools verwenden, um Code innerhalb einer Sitzung zu verwalten und auszuführen.

Weitere Informationen zum Erstellen und Konfigurieren eines Sitzungspools finden Sie unter Verwenden von Sitzungspools.

Codeausführung in einer Sitzung

Nachdem Sie einen Sitzungspool erstellt haben, kann Ihre Anwendung mit Sitzungen im Pool interagieren, indem sie eine Integration mit einem LLM-Framework oder direkt die API-Verwaltungsendpunkte des Pools verwendet.

Sitzungs-IDs

Wichtig

Der Sitzungsbezeichner ist eine vertrauliche Angabe. Sie benötigen einen sicheren Prozess zum Verwalten seines Werts. Im Rahmen dieses Prozesses muss Ihre Anwendung sicherstellen, dass jeder Benutzer oder Mandant nur Zugriff auf seine eigenen Sitzungen hat.

Wenn sie den Zugriff auf Sitzungen nicht sichern, kann es zu Missbrauch oder unbefugtem Zugriff auf daten führen, die in den Sitzungen Ihrer Benutzer gespeichert sind. Weitere Informationen finden Sie unter Sitzungs-IDs.

Wenn Sie mit Sitzungen in einem Pool interagieren, verwenden Sie einen Sitzungsbezeichner, um auf jede Sitzung zu verweisen. Ein Sitzungsbezeichner ist eine von Ihnen definierte Zeichenfolge, die innerhalb des Sitzungspools einzigartig ist. Wenn Sie eine Webanwendung erstellen, können Sie die ID des Benutzers verwenden. Wenn Sie einen Chatbot erstellen, können Sie die Unterhaltungs-ID verwenden.

Wenn eine laufende Sitzung mit der ID vorhanden ist, wird die Sitzung wiederverwendet. Wenn keine laufende Sitzung mit der ID vorhanden ist, wird automatisch eine neue Sitzung erstellt.

Authentifizierung

Die Authentifizierung wird mit Microsoft Entra-Token verarbeitet. Gültige Microsoft Entra-Token werden durch eine Identität generiert, die zu den Rollen Azure ContainerApps Session Executor und Mitwirkender im Sitzungspool gehört.

Wenn Sie eine LLM-Frameworkintegration verwenden, verarbeitet das Framework die Tokengenerierung und -verwaltung für Sie. Stellen Sie sicher, dass die Anwendung mit einer verwalteten Identität mit den erforderlichen Rollenzuweisungen im Sitzungspool konfiguriert ist.

Wenn Sie die API-Verwaltungsendpunkte des Pools direkt verwenden, müssen Sie ein Token generieren und in den Authorization-Header Ihrer HTTP-Anforderungen einschließen. Zusätzlich zu den zuvor erwähnten Rollenzuweisungen muss das Token einen Zielgruppenanspruch (aud) mit dem Wert https://dynamicsessions.io enthalten.

Weitere Informationen finden Sie unter Authentifizierung und Autorisierung.

Arbeiten mit Dateien

Sie können Dateien hochladen und herunterladen und alle Dateien in einer Codedolmetschersitzung auflisten.

Hochladen einer Datei

Um eine Datei in eine Sitzung hochzuladen, senden Sie eine POST-Anforderung an den uploadFile-Endpunkt in einer „multipart form data“-Anforderung. Fügen Sie die Dateidaten in den Anforderungstext ein. Die Datei muss einen Dateinamen enthalten.

Hochgeladene Dateien werden im Dateisystem der Sitzung unter dem Verzeichnis /mnt/data gespeichert.

Das folgende Beispiel zeigt, wie Sie eine Datei in eine Sitzung hochladen.

Ersetzen Sie vor dem Senden der Anforderung die Platzhalter zwischen den Klammern (<>) durch Werte, die für Ihre Anforderung spezifisch sind.

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

Herunterladen einer Datei

Um eine Datei aus dem /mnt/data-Verzeichnis einer Sitzung herunterzuladen, senden Sie eine GET-Anforderung an den file/content/{filename}-Endpunkt. Die Antwort enthält die Dateidaten.

Im folgenden Beispiel wird veranschaulicht, wie eine Anforderung zum Herunterladen einer GET Datei formatiert wird.

Ersetzen Sie vor dem Senden der Anforderung die Platzhalter zwischen den Klammern (<>) durch Werte, die für Ihre Anforderung spezifisch sind.

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>

Auflisten der Dateien

Um die Dateien im /mnt/data-Verzeichnis einer Sitzung aufzulisten, senden Sie eine GET-Anforderung an den files-Endpunkt.

Das folgende Beispiel zeigt, wie Sie die Dateien im Verzeichnis einer Sitzung auflisten.

Ersetzen Sie vor dem Senden der Anforderung die Platzhalter zwischen den Klammern (<>) durch Werte, die für Ihre Anforderung spezifisch sind.

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>

Die Antwort enthält eine Liste der Dateien in der Sitzung.

Die folgende Auflistung zeigt ein Beispiel für den Typ der Antwort, die Sie beim Anfordern von Sitzungsinhalten erwarten können.

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

Sicherheit

Codedolmetschersitzungen sind so konzipiert, dass nicht vertrauenswürdiger Code in isolierten Umgebungen ausgeführt wird, um sicherzustellen, dass Ihre Anwendungen und Daten geschützt bleiben.

LLM-Frameworkintegrationen

Anstatt die Sitzungspoolverwaltungs-API direkt zu verwenden, bieten die folgenden LLM-Frameworks Integrationen mit Codeinterpretersitzungen:

Rahmenwerk Paket Anleitung
LangChain Python: langchain-azure-dynamic-sessions Tutorium
LlamaIndex Python: llama-index-tools-azure-code-interpreter Tutorium
Semantischer Kernel Python: semantic-kernel (Version 0.9.8-b1 oder höher) Tutorium

API-Verwaltungsendpunkte

Wenn Sie keine LLM-Framework-Integration verwenden, können Sie direkt mithilfe der Verwaltungs-API-Endpunkte mit dem Sitzungspool interagieren.

Ausführen von Code in einer Sitzung

Um Code in einer Sitzung auszuführen, senden Sie eine POST-Anforderung an den code/execute-Endpunkt. Der auszuführende Code muss im Anforderungstext enthalten sein.

Im folgenden Beispiel wird Hello, world! in Python gedruckt.

Ersetzen Sie vor dem Senden der Anforderung die Platzhalter zwischen den Klammern (<>) durch die entsprechenden Werte für Ihren Sitzungspool und die Sitzungs-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!')"
    }
}

Wenn Sie eine Sitzung wiederverwenden möchten, geben Sie dieselbe Sitzungs-ID in nachfolgenden Anforderungen an.

Hochladen einer Datei in eine Sitzung

Um eine Datei in eine Sitzung hochzuladen, senden Sie eine POST-Anforderung an den uploadFile-Endpunkt in einer „multipart form data“-Anforderung. Fügen Sie die Dateidaten in den Anforderungstext ein. Die Datei muss einen Dateinamen enthalten.

Hochgeladene Dateien werden im Dateisystem der Sitzung unter dem Verzeichnis /mnt/data gespeichert.

Ersetzen Sie vor dem Senden der Anforderung die Platzhalter zwischen den Klammern (<>) durch Werte, die für Ihre Anforderung spezifisch sind.

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

Hinweis

Das Dateiuploadlimit lautet 128MB. Wenn dies überschritten wird, wird HTTP 413 zurückgegeben.

Herunterladen einer Datei aus einer Sitzung

Um eine Datei aus dem /mnt/data-Verzeichnis einer Sitzung herunterzuladen, senden Sie eine GET-Anforderung an den file/content/{filename}-Endpunkt. Die Antwort enthält die Dateidaten.

Ersetzen Sie vor dem Senden der Anforderung die Platzhalter zwischen den Klammern (<>) durch Werte, die für Ihre Anforderung spezifisch sind.

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>

Auflisten der Dateien in einer Sitzung

Um die Dateien im /mnt/data-Verzeichnis einer Sitzung aufzulisten, senden Sie eine GET-Anforderung an den files-Endpunkt.

Ersetzen Sie vor dem Senden der Anforderung die Platzhalter zwischen den Klammern (<>) durch Werte, die für Ihre Anforderung spezifisch sind.

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>

Die Antwort enthält eine Liste der Dateien in der Sitzung.

Die folgende Auflistung zeigt ein Beispiel für den Typ der Antwort, die Sie beim Anfordern von Sitzungsinhalten erwarten können.

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

Vorinstallierte Pakete

Python-Codedolmetschersitzungen umfassen beliebte Python-Pakete wie NumPy, Pandas und Scikit-Learn.

Rufen Sie zum Ausgeben der Liste der vorinstallierten Pakete den code/execute-Endpunkt mit dem folgenden Code auf.

Ersetzen Sie vor dem Senden der Anforderung die Platzhalter zwischen den Klammern (<>) durch Werte, die für Ihre Anforderung spezifisch sind.

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

Protokollierung

Codedolmetschersitzungen unterstützen die Protokollierung nicht direkt. Ihre Anwendung, die mit den Sitzungen interagiert, kann Anforderungen an die Sitzungspoolverwaltungs-API und deren Antworten protokollieren.

Abrechnung

Codedolmetschersitzungen werden basierend auf der Dauer jeder Sitzung abgerechnet. Weitere Informationen finden Sie unter Abrechnung.

Nächste Schritte