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. Możesz również przekazywać i pobierać pliki 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 platformy Azure nazywany pulą sesji 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.
Tworzenie puli sesji przy użyciu interfejsu wiersza polecenia platformy Azure
Aby utworzyć pulę sesji interpretera kodu przy użyciu interfejsu wiersza polecenia platformy Azure, upewnij się, że masz najnowsze wersje interfejsu wiersza polecenia platformy Azure i rozszerzenie Azure Container Apps za pomocą następujących poleceń:
# Upgrade the Azure CLI
az upgrade
# Install or upgrade the Azure Container Apps extension
az extension add --name containerapp --upgrade --allow-preview true -y
Użyj polecenia , az containerapps sessionpool create
aby utworzyć pulę. Poniższy przykład tworzy pulę sesji interpretera kodu języka Python o nazwie my-session-pool
. Przed uruchomieniem polecenia pamiętaj, aby zastąpić <RESOURCE_GROUP>
ciąg nazwą grupy zasobów.
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
Podczas tworzenia puli sesji można zdefiniować następujące ustawienia:
Ustawienie | opis |
---|---|
--container-type |
Typ interpretera kodu do użycia. Jedyną obsługiwaną wartością jest PythonLTS . |
--max-sessions |
Maksymalna liczba przydzielonych sesji dozwolonych współbieżnie. Wartość maksymalna to 600 . |
--cooldown-period |
Liczba dozwolonych bezczynności sekund przed zakończeniem. Okres bezczynności jest resetowany za każdym razem, gdy interfejs API sesji jest wywoływany. Dozwolony zakres to między 300 i 3600 . |
--network-status |
Określa, czy wychodzący ruch sieciowy jest dozwolony z sesji. Prawidłowe wartości to EgressDisabled (wartość domyślna) i EgressEnabled . |
Ważne
Jeśli włączysz ruch wychodzący, kod uruchomiony w sesji będzie mógł uzyskać dostęp do Internetu. Należy zachować ostrożność, gdy kod jest niezaufany, ponieważ może służyć do wykonywania złośliwych działań, takich jak ataki typu "odmowa usługi".
Uzyskiwanie punktu końcowego interfejsu API zarządzania pulą za pomocą interfejsu wiersza polecenia platformy Azure
Aby używać sesji interpretera kodu z integracją platformy LLM lub bezpośrednio wywołując punkty końcowe interfejsu API zarządzania, potrzebny jest punkt końcowy interfejsu API zarządzania puli. Punkt końcowy ma format https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>
.
Aby pobrać punkt końcowy interfejsu API zarządzania dla puli sesji, użyj az containerapps sessionpool show
polecenia . Przed uruchomieniem polecenia pamiętaj, aby zastąpić <RESOURCE_GROUP>
ciąg nazwą grupy zasobów.
az containerapp sessionpool show \
--name my-session-pool \
--resource-group <RESOURCE_GROUP> \
--query 'properties.poolManagementEndpoint' -o tsv
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.
Aby dowiedzieć się więcej na temat identyfikatorów sesji, zobacz Omówienie sesji.
Uwierzytelnianie
Uwierzytelnianie jest obsługiwane przy użyciu tokenów firmy Microsoft Entra (dawniej Azure Active Directory). 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.
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 | Python: langchain-azure-dynamic-sessions |
Samouczek |
LlamaIndex | Python: 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.
Następujące punkty końcowe są dostępne do zarządzania sesjami w puli:
Ścieżka punktu końcowego | Metoda | opis |
---|---|---|
code/execute |
POST |
Wykonywanie kodu w sesji. |
files/upload |
POST |
Przekaż plik do sesji. |
files/content/{filename} |
GET |
Pobierz plik z sesji. |
files |
GET |
Wyświetl listę plików w sesji. |
Utwórz pełny adres URL dla każdego punktu końcowego, łącząc punkt końcowy interfejsu API zarządzania pulą ze ścieżką punktu końcowego. Ciąg zapytania musi zawierać identifier
parametr zawierający identyfikator sesji i api-version
parametr z wartością 2024-02-02-preview
.
Na przykład: https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/code/execute?api-version=2024-02-02-preview&identifier=<IDENTIFIER>
.
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. Ten przykład wyświetla tekst "Hello, world!" w języku Python.
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--
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 .