Sdílet prostřednictvím


Relace interpretu bez serveru v Azure Container Apps (Preview)

Dynamické relace Azure Container Apps poskytují rychlý a škálovatelný přístup ke interpretu kódu. Každá relace interpretu kódu je plně izolovaná hranici Technologie Hyper-V a je navržená tak, aby spouštěla nedůvěryhodný kód.

Poznámka:

Funkce dynamických relací Azure Container Apps je aktuálně ve verzi Preview. Další informace najdete v omezeních preview.

Používá se pro relace interpretu kódu.

Relace interpreta kódu jsou ideální pro scénáře, kdy potřebujete spustit kód, který je potenciálně škodlivý nebo může poškodit hostitelský systém nebo jiné uživatele, například:

  • Kód vygenerovaný velkým jazykovým modelem (LLM).
  • Kód odeslaný koncovým uživatelem ve webové nebo saaS aplikaci

Pro oblíbené architektury LLM, jako jsou LangChain, LlamaIndex nebo Sémantic Kernel, můžete použít nástroje a moduly plug-in k integraci aplikací AI s relacemi interpretu kódu.

Vaše aplikace se také můžou integrovat s relací interpretu kódu pomocí rozhraní REST API. Rozhraní API umožňuje spouštět kód v relaci a načítat výsledky. Můžete také nahrát a stáhnout soubory do a z relace. Můžete nahrát a stáhnout spustitelné soubory kódu nebo datové soubory, které může váš kód zpracovat.

Předdefinované relace interpreta kódu podporují nejběžnější scénáře spouštění kódu bez nutnosti spravovat infrastrukturu nebo kontejnery. Pokud potřebujete úplnou kontrolu nad prostředím spouštění kódu nebo máte jiný scénář, který vyžaduje izolované sandboxy, můžete použít vlastní relace interpretu kódu.

Fond relací interpretu kódu

Pokud chcete použít relace interpreta kódu, potřebujete prostředek Azure s názvem fond relací, který definuje konfiguraci relací interpretu kódu. Ve fondu relací můžete zadat nastavení, jako je maximální počet souběžných relací a doba nečinnosti relace před ukončením relace.

Fond relací můžete vytvořit pomocí webu Azure Portal, Azure CLI nebo šablon Azure Resource Manageru. Po vytvoření fondu relací můžete pomocí koncových bodů rozhraní API pro správu fondu spravovat a spouštět kód v rámci relace.

Vytvoření fondu relací pomocí Azure CLI

Pokud chcete vytvořit fond relací interpretu kódu pomocí Azure CLI, ujistěte se, že máte nejnovější verze Azure CLI a rozšíření Azure Container Apps pomocí následujících příkazů:

# Upgrade the Azure CLI
az upgrade

# Install or upgrade the Azure Container Apps extension
az extension add --name containerapp --upgrade --allow-preview true -y

az containerapps sessionpool create Pomocí příkazu vytvořte fond. Následující příklad vytvoří fond relací interpreta kódu Python s názvem my-session-pool. Před spuštěním příkazu nezapomeňte nahradit <RESOURCE_GROUP> názvem vaší skupiny prostředků.

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

Při vytváření fondu relací můžete definovat následující nastavení:

Nastavení Popis
--container-type Typ interpretu kódu, který se má použít. Jediná podporovaná hodnota je PythonLTS.
--max-sessions Maximální povolený počet přidělených relací současně. Maximální hodnota je 600.
--cooldown-period Počet povolených nečinných sekund před ukončením. Období nečinnosti se resetuje při každém volání rozhraní API relace. Povolený rozsah je mezi 300 a 3600.
--network-status Určuje, jestli je odchozí síťový provoz z relace povolený. Platné hodnoty jsou EgressDisabled (výchozí) a EgressEnabled.

Důležité

Pokud povolíte výchozí přenos dat, bude mít kód spuštěný v relaci přístup k internetu. Buďte opatrní, pokud je kód nedůvěryhodný, protože se dá použít k provádění škodlivých aktivit, jako jsou útoky na dostupnost služby.

Získání koncového bodu rozhraní API pro správu fondů pomocí Azure CLI

Pokud chcete použít relace interpretu kódu s integracemi architektury LLM nebo voláním koncových bodů rozhraní API pro správu přímo, potřebujete koncový bod rozhraní API pro správu fondu. Koncový bod je ve formátu https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>.

Pokud chcete načíst koncový bod rozhraní API pro správu pro fond relací, použijte az containerapps sessionpool show příkaz. Před spuštěním příkazu nezapomeňte nahradit <RESOURCE_GROUP> názvem vaší skupiny prostředků.

az containerapp sessionpool show \
    --name my-session-pool \
    --resource-group <RESOURCE_GROUP> \
    --query 'properties.poolManagementEndpoint' -o tsv

Provádění kódu v relaci

Po vytvoření fondu relací může vaše aplikace interagovat s relacemi ve fondu pomocí integrace s architekturou LLM nebo přímo pomocí koncových bodů rozhraní API pro správu fondu.

Identifikátory relací

Důležité

Identifikátor relace je citlivé informace, které vyžadují, abyste ke správě jeho hodnoty použili zabezpečený proces. Část tohoto procesu vyžaduje, aby vaše aplikace zajistila, že každý uživatel nebo tenant má přístup jenom k vlastním relacím. Selhání zabezpečeného přístupu k relacím může mít za následek zneužití nebo neoprávněný přístup k datům uloženým v relacích uživatelů. Další informace najdete v tématu Identifikátory relací.

Při interakci s relacemi ve fondu použijete identifikátor relace k odkazování na každý identifikátor relace A je řetězec, který definujete, který je jedinečný v rámci fondu relací. Pokud vytváříte webovou aplikaci, můžete použít ID uživatele. Pokud vytváříte chatovacího robota, můžete použít ID konverzace.

Pokud existuje spuštěná relace s identifikátorem, relace se znovu použije. Pokud neexistuje žádná spuštěná relace s identifikátorem, vytvoří se nová relace automaticky.

Další informace o identifikátorech relací najdete v tématu Přehled relací.

Ověřování

Ověřování se zpracovává pomocí tokenů Microsoft Entra (dříve Azure Active Directory). Platné tokeny Microsoft Entra se generují identitou, která patří do rolí exekutoru relací Azure ContainerApps a přispěvatele ve fondu relací.

Pokud používáte integraci architektury LLM, rozhraní za vás zpracovává generování a správu tokenů. Ujistěte se, že je aplikace nakonfigurovaná se spravovanou identitou s potřebnými přiřazeními rolí ve fondu relací.

Pokud používáte koncové body rozhraní API pro správu fondu přímo, musíte vygenerovat token a zahrnout ho do Authorization hlavičky požadavků HTTP. Kromě dříve zmíněných přiřazení rolí musí token obsahovat deklaraci identity cílové skupiny (aud) s hodnotou https://dynamicsessions.io.

Další informace najdete v tématu Ověřování.

Integrace architektury LLM

Místo přímého použití rozhraní API pro správu fondu relací poskytují následující architektury LLM integraci s relacemi interpretu kódu:

Framework Balíček Kurz
LangChain Python: langchain-azure-dynamic-sessions Výuka
LlamaIndex Python: llama-index-tools-azure-code-interpreter Výuka
Sémantické jádro Python: semantic-kernel (verze 0.9.8-b1 nebo novější) Výuka

Koncové body rozhraní API pro správu

Pokud nepoužíváte integraci architektury LLM, můžete s fondem relací pracovat přímo pomocí koncových bodů rozhraní API pro správu.

Pro správu relací ve fondu jsou k dispozici následující koncové body:

Cesta ke koncovému bodu metoda Popis
code/execute POST Spusťte kód v relaci.
files/upload POST Nahrajte soubor do relace.
files/content/{filename} GET Stáhněte si soubor z relace.
files GET Vypíše soubory v relaci.

Vytvořte úplnou adresu URL pro každý koncový bod zřetězením koncového bodu rozhraní API pro správu fondu s cestou ke koncovému bodu. Řetězec dotazu musí obsahovat identifier parametr obsahující identifikátor relace a api-version parametr s hodnotou 2024-02-02-preview.

Příklad: https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/code/execute?api-version=2024-02-02-preview&identifier=<IDENTIFIER>

Spuštění kódu v relaci

Pokud chcete spustit kód v relaci, odešlete POST do koncového code/execute bodu požadavek s kódem, který se má spustit v textu požadavku. Tento příklad vytiskne "Hello, world!" v Pythonu.

Před odesláním požadavku nahraďte zástupné symboly mezi <> hranatými závorkami příslušnými hodnotami pro váš fond relací a identifikátor relace.

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

Pokud chcete relaci znovu použít, zadejte stejný identifikátor relace v následných požadavcích.

Nahrání souboru do relace

Pokud chcete nahrát soubor do relace, odešlete POST žádost do koncového uploadFile bodu v žádosti o data formuláře s více částmi. Zahrňte data souboru do textu požadavku. Soubor musí obsahovat název souboru.

Nahrané soubory se ukládají do systému souborů relace v /mnt/data adresáři.

Před odesláním požadavku nahraďte zástupné symboly mezi <> hranatými závorkami hodnotami specifickými pro váš požadavek.

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

Stažení souboru z relace

Pokud chcete stáhnout soubor z adresáře relace /mnt/data , odešlete GET do koncového file/content/{filename} bodu požadavek. Odpověď obsahuje data souboru.

Před odesláním požadavku nahraďte zástupné symboly mezi <> hranatými závorkami hodnotami specifickými pro váš požadavek.

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>

Výpis souborů v relaci

Pokud chcete zobrazit seznam souborů v adresáři relace /mnt/data , odešlete GET do koncového files bodu požadavek.

Před odesláním požadavku nahraďte zástupné symboly mezi <> hranatými závorkami hodnotami specifickými pro váš požadavek.

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>

Odpověď obsahuje seznam souborů v relaci.

Následující výpis ukazuje ukázku typu odpovědi, kterou můžete očekávat od žádosti o obsah relace.

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

Předinstalované balíčky

Relace interpretu kódu Pythonu zahrnují oblíbené balíčky Pythonu, jako jsou NumPy, pandas a scikit-learn.

Pokud chcete vypsat seznam předinstalovaných balíčků, zavolejte code/execute koncový bod následujícím kódem.

Před odesláním požadavku nahraďte zástupné symboly mezi <> hranatými závorkami hodnotami specifickými pro váš požadavek.

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

Další kroky