Сеансы интерпретатора бессерверного кода в приложениях контейнеров Azure
Динамические сеансы приложений контейнеров Azure обеспечивают быстрый и масштабируемый доступ к интерпретатору кода. Каждый сеанс интерпретатора кода полностью изолирован границой Hyper-V и предназначен для запуска ненадежного кода.
Используется для сеансов интерпретатора кода
Сеансы интерпретатора кода идеально подходят для сценариев, в которых необходимо запустить код, который потенциально вредоносный или может причинить вред хост-системе или другим пользователям, например:
- Код, созданный большой языковой моделью (LLM).
- Код, отправленный конечным пользователем в веб-приложении или приложении SaaS.
Для популярных платформ LLM, таких как LangChain, LlamaIndex или Семантического ядра, можно использовать средства и подключаемые модули для интеграции приложений ИИ с сеансами интерпретатора кода.
Приложения также могут интегрироваться с сеансом интерпретатора кода с помощью REST API. API позволяет выполнять код в сеансе и получать результаты. Вы также можете отправлять и скачивать файлы в сеанс и из него. Вы можете отправлять и скачивать исполняемые файлы кода или файлы данных, которые может обрабатывать код.
Встроенные сеансы интерпретатора кода поддерживают наиболее распространенные сценарии выполнения кода без необходимости управлять инфраструктурой или контейнерами. Если вам нужен полный контроль над средой выполнения кода или есть другой сценарий, требующий изолированных песочниц, можно использовать сеансы интерпретатора кода.
Пул сеансов интерпретатора кода
Чтобы использовать сеансы интерпретатора кода, требуется ресурс Azure с именем пула сеансов, который определяет конфигурацию сеансов интерпретатора кода. В пуле сеансов можно указать такие параметры, как максимальное количество одновременных сеансов и время простоя сеанса перед завершением сеанса.
Пул сеансов можно создать с помощью шаблонов портал Azure, Azure CLI или Azure Resource Manager. После создания пула сеансов можно использовать конечные точки API управления пулом для управления и выполнения кода внутри сеанса.
Создание пула сеансов с помощью Azure CLI
Чтобы создать пул сеансов интерпретатора кода с помощью Azure CLI, убедитесь, что у вас есть последние версии Azure CLI и расширения приложений контейнеров Azure со следующими командами:
# 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
Используйте команду для создания пула. В следующем примере создается пул сеансов интерпретатора кода Python с именем my-session-pool
. Перед выполнением команды обязательно замените <RESOURCE_GROUP>
имя группы ресурсов.
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
При создании пула сеансов можно определить следующие параметры:
Параметр | Description |
---|---|
--container-type |
Тип используемого интерпретатора кода. Единственным поддерживаемым значением является PythonLTS . |
--max-sessions |
Максимальное количество выделенных сеансов, разрешенных одновременно. Максимальное значение — 600 . |
--cooldown-period |
Количество разрешенных секунд простоя перед завершением работы. Период простоя сбрасывается при каждом вызове API сеанса. Допустимый диапазон между 300 и 3600 . |
--network-status |
Указывает, разрешен ли исходящий сетевой трафик из сеанса. Допустимые значения EgressDisabled (по умолчанию) и EgressEnabled . |
Внимание
Если включить исходящий трафик, код, выполняемый в сеансе, может получить доступ к Интернету. Используйте осторожность, если код недоверен, так как его можно использовать для выполнения вредоносных действий, таких как атаки типа "отказ в обслуживании".
Получение конечной точки API управления пулом с помощью Azure CLI
Чтобы использовать сеансы интерпретатора кода с интеграцией платформы LLM или вызывая конечные точки API управления напрямую, вам потребуется конечная точка API управления пула. Конечная точка находится в формате https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>
.
Чтобы получить конечную точку API управления для пула сеансов, используйте az containerapps sessionpool show
команду. Перед выполнением команды обязательно замените <RESOURCE_GROUP>
имя группы ресурсов.
az containerapp sessionpool show \
--name my-session-pool \
--resource-group <RESOURCE_GROUP> \
--query 'properties.poolManagementEndpoint' -o tsv
Выполнение кода в сеансе
После создания пула сеансов приложение может взаимодействовать с сеансами в пуле с помощью интеграции с платформой LLM или с помощью конечных точек API управления пула напрямую.
Идентификаторы сеанса
Внимание
Идентификатор сеанса — это конфиденциальная информация, которая требует использования безопасного процесса для управления его значением. Часть этого процесса требует, чтобы приложение обеспечило каждому пользователю или клиенту доступ только к собственным сеансам. Неспособность защитить доступ к сеансам может привести к неправильному использованию или несанкционированного доступа к данным, хранящимся в сеансах пользователей. Дополнительные сведения см. в разделе "Идентификаторы сеансов"
При взаимодействии с сеансами в пуле используется идентификатор сеанса для ссылки на каждый сеанс идентификатор сеанса A— это строка, определяемая в пуле сеансов. При создании веб-приложения можно использовать идентификатор пользователя. При создании чат-бота можно использовать идентификатор беседы.
Если есть запущенный сеанс с идентификатором, сеанс повторно используется. Если с идентификатором нет запущенного сеанса, создается новый сеанс автоматически.
Дополнительные сведения об идентификаторах сеансов см. в обзоре сеансов.
Проверка подлинности
Проверка подлинности обрабатывается с помощью токенов Microsoft Entra (прежнее название — Azure Active Directory). Допустимые токены Microsoft Entra создаются удостоверением, принадлежащим к ролям исполнителя сеансов Azure ContainerApps и участника в пуле сеансов.
Если вы используете интеграцию платформы LLM, платформа обрабатывает создание маркеров и управление ими. Убедитесь, что приложение настроено с управляемым удостоверением с необходимыми назначениями ролей в пуле сеансов.
Если вы используете конечные точки API управления пула напрямую, необходимо создать маркер и включить его в Authorization
заголовок HTTP-запросов. Помимо упомянутых ранее назначений ролей маркер должен содержать утверждение аудитории (aud
) со значением https://dynamicsessions.io
.
Дополнительные сведения см. в статье "Проверка подлинности".
Интеграция платформ LLM
Вместо использования API управления пулом сеансов напрямую следующие платформы LLM обеспечивают интеграцию с сеансами интерпретатора кода:
Платформа | Пакет | Учебник |
---|---|---|
LangChain | Python: langchain-azure-dynamic-sessions |
Наставнический |
LlamaIndex | Python: llama-index-tools-azure-code-interpreter |
Наставнический |
Семантическое ядро | Python: semantic-kernel (версия 0.9.8-b1 или более поздней версии) |
Наставнический |
Конечные точки API управления
Если вы не используете интеграцию с платформой LLM, вы можете взаимодействовать с пулом сеансов непосредственно с помощью конечных точек API управления.
Для управления сеансами в пуле доступны следующие конечные точки:
Путь к конечной точке | Метод | Description |
---|---|---|
code/execute |
POST |
Выполнение кода в сеансе. |
files/upload |
POST |
Отправьте файл в сеанс. |
files/content/{filename} |
GET |
Скачайте файл из сеанса. |
files |
GET |
Вывод списка файлов в сеансе. |
Создайте полный URL-адрес для каждой конечной точки, объединив конечную точку API управления пула с путем конечной точки. Строка запроса должна содержать identifier
параметр, содержащий идентификатор сеанса, и api-version
параметр со значением 2024-02-02-preview
.
Например: https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/code/execute?api-version=2024-02-02-preview&identifier=<IDENTIFIER>
Выполнение кода в сеансе
Чтобы выполнить код в сеансе, отправьте POST
запрос code/execute
в конечную точку с кодом, который будет выполняться в тексте запроса. В этом примере выводится сообщение "Hello, world!" в Python.
Перед отправкой запроса замените заполнители между <>
скобками соответствующими значениями для пула сеансов и идентификатора сеанса.
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!')"
}
}
Чтобы повторно использовать сеанс, укажите тот же идентификатор сеанса в последующих запросах.
Отправка файла в сеанс
Чтобы отправить файл в сеанс, отправьте POST
запрос uploadFile
в конечную точку в запросе данных с несколькими частями формы. Включите данные файла в текст запроса. Файл должен содержать имя файла.
Отправленные файлы хранятся в файловой системе сеанса в каталоге /mnt/data
.
Перед отправкой запроса замените заполнители между <>
квадратными скобками значениями, определенными для запроса.
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--
Скачивание файла из сеанса
Чтобы скачать файл из каталога сеанса /mnt/data
, отправьте запрос в конечную GET
точку file/content/{filename}
. Ответ содержит данные файла.
Перед отправкой запроса замените заполнители между <>
квадратными скобками значениями, определенными для запроса.
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>
Вывод списка файлов в сеансе
Чтобы получить список файлов в каталоге сеанса /mnt/data
, отправьте запрос в конечную GET
точку files
.
Перед отправкой запроса замените заполнители между <>
квадратными скобками значениями, определенными для запроса.
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>
Ответ содержит список файлов в сеансе.
В следующем описании показан пример типа ответа, который можно ожидать от запроса содержимого сеанса.
{
"$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"
}
}
]
}
Предустановленные пакеты
Сеансы интерпретатора кода Python включают популярные пакеты Python, такие как NumPy, pandas и scikit-learn.
Чтобы вывести список предварительно установленных пакетов, вызовите конечную точку code/execute
со следующим кодом.
Перед отправкой запроса замените заполнители между <>
квадратными скобками значениями, определенными для запроса.
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]"
}
}
Ведение журнала
Сеансы интерпретатора кода не поддерживают ведение журнала напрямую. Приложение, взаимодействующее с сеансами, может регистрировать запросы к API управления пулом сеансов и его ответы.
Выставление счетов
Счета за сеансы интерпретатора кода выставляются на основе продолжительности каждого сеанса. Дополнительные сведения см. в разделе "Выставление счетов ".