Udostępnij przez


Sesje interpretera kodu bezserwerowego w usłudze Azure Container Apps

Sesje dynamiczne usługi Azure Container Apps zapewniają szybki i skalowalny dostęp do interpretera kodu. Każda sesja interpretera kodu jest w pełni odizolowana przez granicę funkcji Hyper-V i jest przeznaczona do uruchamiania niezaufanego kodu.

Zastosowania dla sesji interpretera kodu

Sesje interpretera kodu są idealne w scenariuszach, w których należy uruchomić kod, który jest potencjalnie złośliwy lub może spowodować szkodę dla systemu hosta lub innych użytkowników, takich jak:

  • Kod generowany przez duży model językowy (LLM).
  • Kod przesłany przez użytkownika końcowego w aplikacji internetowej lub SaaS.

W przypadku popularnych struktur LLM, takich jak LangChain, LlamaIndex lub Semantic Kernel, można używać narzędzi i wtyczek do integrowania aplikacji sztucznej inteligencji z sesjami interpretera kodu.

Aplikacje mogą również integrować się z sesją interpretera kodu przy użyciu interfejsu API REST. Interfejs API umożliwia:

  • Wykonywanie kodu w sesji i pobieranie wyników

  • Przekazywanie i pobieranie plików do i z sesji.

    Możesz przekazywać i pobierać pliki kodu wykonywalnego lub pliki danych, które może przetwarzać kod.

Wbudowane sesje interpretera kodu obsługują najbardziej typowe scenariusze wykonywania kodu bez konieczności zarządzania infrastrukturą lub kontenerami.

Jeśli potrzebujesz pełnej kontroli nad środowiskiem wykonywania kodu lub masz inny scenariusz, który wymaga odizolowanych piaskownic, możesz użyć niestandardowych sesji interpretera kodu.

Pula sesji interpretera kodu

Aby korzystać z sesji interpretera kodu, potrzebny jest zasób Azure nazywany pulą sesji, która definiuje konfigurację sesji interpretera kodu.

W puli sesji można określić ustawienia, takie jak maksymalna liczba równoczesnych sesji i czas bezczynności sesji przed zakończeniem sesji.

Pulę sesji można utworzyć przy użyciu witryny Azure Portal, interfejsu wiersza polecenia platformy Azure lub szablonów usługi Azure Resource Manager. Po utworzeniu puli sesji można użyć punktów końcowych interfejsu API zarządzania puli do zarządzania i wykonywania kodu wewnątrz sesji.

Aby uzyskać więcej informacji na temat tworzenia i konfigurowania puli sesji, zobacz Używanie pul sesji.

Wykonywanie kodu w sesji

Po utworzeniu puli sesji aplikacja może wchodzić w interakcje z sesjami w puli przy użyciu integracji z platformą LLM lub bezpośrednio przy użyciu punktów końcowych interfejsu API zarządzania puli.

Identyfikatory sesji

Ważne

Identyfikator sesji jest poufnymi informacjami, które wymagają użycia bezpiecznego procesu do zarządzania jej wartością. Część tego procesu wymaga, aby aplikacja zapewniała każdemu użytkownikowi lub dzierżawie dostęp tylko do własnych sesji.

Brak bezpiecznego dostępu do sesji może spowodować nieprawidłowe użycie lub nieautoryzowany dostęp do danych przechowywanych w sesjach użytkowników. Aby uzyskać więcej informacji, zobacz Identyfikatory sesji.

W przypadku interakcji z sesjami w puli należy użyć identyfikatora sesji , aby odwołać się do każdej sesji Identyfikator sesji jest ciągiem, który jest unikatowy w puli sesji. Jeśli tworzysz aplikację internetową, możesz użyć identyfikatora użytkownika. Jeśli tworzysz czatbota, możesz użyć identyfikatora konwersacji.

Jeśli istnieje uruchomiona sesja z identyfikatorem, sesja zostanie ponownie użyta. Jeśli nie ma uruchomionej sesji z identyfikatorem, zostanie automatycznie utworzona nowa sesja.

Uwierzytelnianie

Uwierzytelnianie jest obsługiwane przy użyciu tokenów firmy Microsoft Entra. Prawidłowe tokeny usługi Microsoft Entra są generowane przez tożsamość należącą do funkcji wykonawczej sesji usługi Azure ContainerApps i współautora w puli sesji.

Jeśli używasz integracji platformy LLM, platforma obsługuje generowanie tokenów i zarządzanie nimi. Upewnij się, że aplikacja jest skonfigurowana przy użyciu tożsamości zarządzanej z niezbędnymi przypisaniami ról w puli sesji.

Jeśli bezpośrednio używasz punktów końcowych interfejsu API zarządzania puli, musisz wygenerować token i dołączyć go do Authorization nagłówka żądań HTTP. Oprócz wymienionych wcześniej przypisań ról token musi zawierać oświadczenie odbiorców (aud) o wartości https://dynamicsessions.io.

Aby dowiedzieć się więcej, zobacz Uwierzytelnianie i autoryzacja.

Praca z plikami

Możesz przekazać i pobrać pliki oraz wyświetlić listę wszystkich plików w sesji interpretera kodu.

Obsługiwane znaki

Nazwy plików i ścieżka muszą używać tylko następujących obsługiwanych znaków:

  • Wielkie i małe litery: A-Z, a-z
  • Cyfry: 0-9
  • Znaki specjalne: -, _, , ., @, $, &, =, ;, ,, #, %, ^, (, )
  • Znaki Unicode: zawiera znaki chińskie, japońskie i inne znaki międzynarodowe
  • Ścieżka nie zezwala na: .

Przekazywanie pliku

Aby przekazać plik do sesji, wyślij POST żądanie do uploadFile punktu końcowego w żądaniu danych formularza wieloczęściowego. Uwzględnij dane pliku w treści żądania. Plik musi zawierać nazwę pliku.

Przekazane pliki są przechowywane w systemie plików sesji w /mnt/data katalogu .

W poniższym przykładzie pokazano, jak przekazać plik do sesji.

Przed wysłaniem żądania zastąp symbole zastępcze między <> nawiasami wartościami specyficznymi dla żądania.

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

Pobieranie pliku

Aby pobrać plik z katalogu sesji /mnt/data , wyślij GET żądanie do punktu końcowego file/content/{filename} . Odpowiedź zawiera dane pliku.

W poniższym przykładzie pokazano, jak sformatować GET żądanie pobrania pliku.

Przed wysłaniem żądania zastąp symbole zastępcze między <> nawiasami wartościami specyficznymi dla żądania.

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>

Wyświetlanie listy plików

Aby wyświetlić listę plików w katalogu sesji /mnt/data , wyślij GET żądanie do punktu końcowego files .

W poniższym przykładzie pokazano, jak wyświetlić listę plików w katalogu sesji.

Przed wysłaniem żądania zastąp symbole zastępcze między <> nawiasami wartościami specyficznymi dla żądania.

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>

Odpowiedź zawiera listę plików w sesji.

Poniższa lista przedstawia przykładową odpowiedź, której można oczekiwać od żądania zawartości sesji.

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

Zabezpieczenia

Sesje interpretera kodu są przeznaczone do uruchamiania niezaufanego kodu w izolowanych środowiskach, dzięki czemu aplikacje i dane pozostaną chronione.

Integracje platformy LLM

Zamiast bezpośrednio korzystać z interfejsu API zarządzania pulą sesji, następujące struktury LLM zapewniają integrację z sesjami interpretera kodu:

Framework Pakiet Samouczek
LangChain Pyton: langchain-azure-dynamic-sessions Samouczek
LlamaIndex Pyton: llama-index-tools-azure-code-interpreter Samouczek
Jądro semantyczne Python: semantic-kernel (wersja 0.9.8-b1 lub nowsza) Samouczek

Punkty końcowe interfejsu API zarządzania

Jeśli nie korzystasz z integracji platformy LLM, możesz korzystać z puli sesji bezpośrednio przy użyciu punktów końcowych interfejsu API zarządzania.

Wykonywanie kodu w sesji

Aby wykonać kod w sesji, wyślij POST żądanie do code/execute punktu końcowego za pomocą kodu do uruchomienia w treści żądania.

Poniższy przykład wyświetla Hello, world! w Pythonie.

Przed wysłaniem żądania zastąp symbole zastępcze między <> nawiasami odpowiednimi wartościami dla puli sesji i identyfikatorem sesji.

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

Aby ponownie użyć sesji, określ ten sam identyfikator sesji w kolejnych żądaniach.

Przekazywanie pliku do sesji

Aby przekazać plik do sesji, wyślij POST żądanie do uploadFile punktu końcowego w żądaniu danych formularza wieloczęściowego. Uwzględnij dane pliku w treści żądania. Plik musi zawierać nazwę pliku.

Przekazane pliki są przechowywane w systemie plików sesji w /mnt/data katalogu .

Przed wysłaniem żądania zastąp symbole zastępcze między <> nawiasami wartościami specyficznymi dla żądania.

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

Uwaga

Limit przekazywania plików to 128MB. Jeśli zostanie to przekroczone, HTTP 413 może zostać zwrócona wartość .

Pobieranie pliku z sesji

Aby pobrać plik z katalogu sesji /mnt/data , wyślij GET żądanie do punktu końcowego file/content/{filename} . Odpowiedź zawiera dane pliku.

Przed wysłaniem żądania zastąp symbole zastępcze między <> nawiasami wartościami specyficznymi dla żądania.

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>

Wyświetlanie listy plików w sesji

Aby wyświetlić listę plików w katalogu sesji /mnt/data , wyślij GET żądanie do punktu końcowego files .

Przed wysłaniem żądania zastąp symbole zastępcze między <> nawiasami wartościami specyficznymi dla żądania.

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>

Odpowiedź zawiera listę plików w sesji.

Poniższa lista przedstawia przykładową odpowiedź, której można oczekiwać od żądania zawartości sesji.

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

Wstępnie zainstalowane pakiety

Sesje interpretera kodu języka Python obejmują popularne pakiety języka Python, takie jak NumPy, pandas i scikit-learn.

Aby wyświetlić listę wstępnie zainstalowanych pakietów, wywołaj code/execute punkt końcowy przy użyciu następującego kodu.

Przed wysłaniem żądania zastąp symbole zastępcze między <> nawiasami wartościami specyficznymi dla żądania.

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

Rejestrowanie

Sesje interpretera kodu nie obsługują rejestrowania bezpośrednio. Aplikacja, która współdziała z sesjami, może rejestrować żądania do interfejsu API zarządzania pulą sesji i odpowiedzi.

Rozliczenia

Sesje interpretera kodu są rozliczane na podstawie czasu trwania każdej sesji. Aby uzyskać więcej informacji, zobacz Rozliczenia.

Następne kroki