Использование Анализа текста для контейнеров работоспособности

Контейнеры позволяют размещать Анализ текста для API работоспособности в собственной инфраструктуре. Если у вас есть требования к безопасности или управлению данными, которые не могут быть выполнены путем удаленного вызова Анализа текста для работоспособности, контейнеры могут быть хорошим вариантом.

Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.

Необходимые компоненты

Прежде чем использовать контейнеры Анализа текста, необходимо выполнить следующие предварительные условия. Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.

  • Docker, установленный на главном компьютере. Docker нужно настроить таким образом, чтобы контейнеры могли подключать и отправлять данные о выставлении счетов в Azure.
    • В Windows для поддержки контейнеров Linux также должен быть настроен Docker.
    • Необходимо знать основные принципы и основные понятия Docker.
  • Ресурс языка с бесплатной ценовой категорией (F0) или ценовой категории "Стандартный" (S).

Сбор обязательных параметров

Требуются три основных параметра для всех контейнеров ИИ Azure. Для условий лицензионного соглашения на использование программного обеспечения корпорации Майкрософт должно быть задано значение accept. Также требуются URI конечной точки и ключ API.

URI конечной точки

Это {ENDPOINT_URI} значение доступно на странице обзора портал Azure соответствующего ресурса служб ИИ Azure. Перейдите на страницу Обзор, наведите указатель мыши на конечную точку. Отобразится значок Копировать в буфер обмена. Скопируйте и используйте конечную точку по мере необходимости.

Screenshot that shows gathering the endpoint URI for later use.

Ключи

Значение {API_KEY} используется для запуска контейнера и доступно на странице ключей портал Azure соответствующего ресурса служб ИИ Azure. Перейдите на страницу Ключи и выберите значок Копировать в буфер обмена.

Screenshot that shows getting one of the two keys for later use.

Внимание

Эти ключи подписки используются для доступа к API служб искусственного интеллекта Azure. Не предоставляйте доступ к ключам другим пользователям. Храните их в безопасном месте. Например, используйте Azure Key Vault. Также рекомендуется регулярно повторно создавать эти ключи. Для вызова API необходим только один ключ. При повторном создании первого ключа второй ключ можно использовать для бесперебойного доступа к службе.

Требования к главному компьютеру и рекомендации

Узел — это 64-разрядный компьютер, на котором выполняется контейнер Docker. Это может быть компьютер в локальной среде или служба размещения Docker в Azure, включая следующие решения:

В следующей таблице описаны минимальные и рекомендуемые спецификации для Анализа текста контейнеров работоспособности. Частота каждого ядра ЦП должна быть минимум 2,6 ГГц. Также указано допустимое количество транзакций в секунду (TPS).

Минимальные спецификации узла Рекомендуемые спецификации узла Минимальное TPS Максимальное TPS
1 документ/запрос 4 ядра, 12 ГБ памяти 6 ядер, 12 ГБ памяти 15 30
10 документов/запросов 6 ядер, 16 ГБ памяти 8 ядер, 20 ГБ памяти 15 30

Ядро и память соответствуют параметрам --cpus и --memory, которые используются как часть команды docker run.

Получение образа контейнера с помощью docker pull

Образ контейнера работоспособности Анализ текста можно найти в mcr.microsoft.com синдикате реестра контейнеров. Он находится в репозитории azure-cognitive-services/textanalytics/ и называется healthcare. Полное имя образа контейнера — mcr.microsoft.com/azure-cognitive-services/textanalytics/healthcare

Чтобы использовать последнюю версию контейнера, можно использовать latest тег. Полный список тегов также представлен в MCR.

Используйте команду docker pull, чтобы скачать этот образ контейнера из общедоступного реестра контейнеров Майкрософт. Вы можете найти рекомендуемые теги в реестре контейнеров Майкрософт

docker pull mcr.microsoft.com/azure-cognitive-services/textanalytics/healthcare:<tag-name>

Совет

Используйте команду docker images, чтобы получить список скачанных образов контейнеров. Например, следующая команда возвращает таблицу со списком идентификаторов, репозиториев и тегов для каждого скачанного образа контейнера:

docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"

IMAGE ID         REPOSITORY                TAG
<image-id>       <repository-path/name>    <tag-name>

Запуск контейнера с помощью команды docker run

После добавления контейнера на главный компьютер используйте команду docker run для запуска контейнеров. После запуска контейнер продолжи работу, пока вы его не остановите.

Внимание

  • В командах Docker в следующих разделах используется обратная косая черта (\) как символ продолжения строки. Замените или удалите ее в соответствии с требованиями вашей операционной системы.
  • Для запуска контейнера необходимо указать параметры Eula, Billing и ApiKey. В противном случае контейнер не запустится. Дополнительные сведения см. в разделе о выставлении счетов.
  • Контейнеры анализа тональности и распознавания языка используют API версии 3 и являются общедоступными. Контейнер извлечения ключевых фраз использует API версии 2 и находится в режиме предварительной версии.

Существует несколько способов установки и запуска Анализа текста для контейнера работоспособности.

  • Используйте портал Azure для создания языкового ресурса, а Docker — для получения контейнера.
  • Используйте виртуальную машину Azure с Docker для запуска контейнера.
  • Используйте следующие скрипты PowerShell и Azure CLI для автоматизации развертывания ресурсов и конфигурации контейнеров.

При использовании Анализа текста для контейнера работоспособности, данные, содержащиеся в запросах и ответах API, не отображаются в Майкрософт и не используются для обучения модели, применяемой к данным.

Локальный запуск контейнера

Чтобы запустить контейнер в собственной среде после загрузки образа контейнера, выполните следующую команду docker run. Замените значения заполнителей ниже на собственные.

Заполнитель Значение Формат или пример
{API_KEY} Ключ для языкового ресурса. Он представлен на странице ресурса Ключ и конечная точка на портале Azure. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
{ENDPOINT_URI} Конечная точка для доступа к API. Он представлен на странице ресурса Ключ и конечная точка на портале Azure. https://<your-custom-subdomain>.cognitiveservices.azure.com
docker run --rm -it -p 5000:5000 --cpus 6 --memory 12g \
mcr.microsoft.com/azure-cognitive-services/textanalytics/healthcare:<tag-name> \
Eula=accept \
rai_terms=accept \
Billing={ENDPOINT_URI} \
ApiKey={API_KEY} 

Команда:

  • запускает Анализ текста для контейнера работоспособности из образа контейнера;
  • выделяет 6 ядер ЦП и 12 гигабайт (ГБ) памяти;
  • предоставляет TCP-порт 5000 и выделяет псевдотелетайп для контейнера;
  • принимает условия лицензионного соглашения (EULA) и условия ответственного подхода к применению ИИ (RAI);
  • автоматически удаляет контейнер после завершения его работы. Образ контейнера остается доступным на главном компьютере.

Демонстрационный пользовательский интерфейс для визуализации выходных данных

Контейнер предоставляет интерфейсы REST API конечной точки прогнозирования запросов. Мы также предоставили средство визуализации в контейнере, доступ к которому осуществляется путем добавления /demo к конечной точке контейнера. Например:

http://<serverURL>:5000/demo

Используйте приведенный ниже запрос cURL, чтобы отправить запрос в развернутый контейнер. Переменную serverURL следует заменить соответствующим значением.

curl -X POST 'http://<serverURL>:5000/text/analytics/v3.1/entities/health' --header 'Content-Type: application/json' --header 'accept: application/json' --data-binary @example.json

Установка контейнера с помощью Веб-приложения Azure для контейнеров

Веб-приложение Azure для контейнеров — это ресурс Azure, предназначенный для запуска контейнеров в облаке. Он обладает такими встроенными возможностями, как автоматическое масштабирование, поддержка контейнеров Docker и Docker Compose, поддержка HTTPS и многое другое.

Примечание.

С помощью веб-приложения Azure вы автоматически получите домен в виде <appservice_name>.azurewebsites.net.

Запустите этот скрипт PowerShell с помощью Azure CLI, чтобы создать Веб-приложение для контейнеров, используя свою подписку и образ контейнера по протоколу HTTPS. Дождитесь завершения скрипта (приблизительно 25–30 минут), прежде чем отправлять первый запрос.

$subscription_name = ""                    # THe name of the subscription you want you resource to be created on.
$resource_group_name = ""                  # The name of the resource group you want the AppServicePlan
                                           #    and AppSerivce to be attached to.
$resources_location = ""                   # This is the location you wish the AppServicePlan to be deployed to.
                                           #    You can use the "az account list-locations -o table" command to
                                           #    get the list of available locations and location code names.
$appservice_plan_name = ""                 # This is the AppServicePlan name you wish to have.
$appservice_name = ""                      # This is the AppService resource name you wish to have.
$TEXT_ANALYTICS_RESOURCE_API_KEY = ""      # This should be taken from the Language resource.
$TEXT_ANALYTICS_RESOURCE_API_ENDPOINT = "" # This should be taken from the Language resource.
$DOCKER_IMAGE_NAME = "mcr.microsoft.com/azure-cognitive-services/textanalytics/healthcare:latest"

az login
az account set -s $subscription_name
az appservice plan create -n $appservice_plan_name -g $resource_group_name --is-linux -l $resources_location --sku P3V2
az webapp create -g $resource_group_name -p $appservice_plan_name -n $appservice_name -i $DOCKER_IMAGE_NAME 
az webapp config appsettings set -g $resource_group_name -n $appservice_name --settings Eula=accept rai_terms=accept Billing=$TEXT_ANALYTICS_RESOURCE_API_ENDPOINT ApiKey=$TEXT_ANALYTICS_RESOURCE_API_KEY

# Once deployment complete, the resource should be available at: https://<appservice_name>.azurewebsites.net

Установка контейнера с помощью экземпляра контейнера Azure

Чтобы упростить развертывание, можно также использовать экземпляр контейнера Azure (ACI). ACI — это ресурс, который позволяет по запросу запускать контейнеры Docker в управляемой бессерверной среде Azure.

Инструкции по развертыванию ресурса ACI на портале Azure см. в статье Использование Экземпляров контейнеров Azure. Вы также можете использовать приведенный ниже скрипт PowerShell в Azure CLI для создания ACI в подписке с помощью образа контейнера. Дождитесь завершения скрипта (приблизительно 25–30 минут), прежде чем отправлять первый запрос. Из-за ограничения максимального числа ЦП на ресурс ACI не следует выбирать этот вариант, если предполагается отправка более чем 5 больших документов (приблизительно 5000 символов каждый) на запрос. Сведения о доступности см. в статье Региональная поддержка ACI.

Примечание.

Экземпляры контейнеров Azure не поддерживают HTTPS для встроенных доменов. Если требуется протокол HTTPS, необходимо настроить его вручную, в том числе создать сертификат и зарегистрировать домен. Ниже представлены инструкции по выполнению этой процедуры с помощью NGINX.

$subscription_name = ""                    # The name of the subscription you want you resource to be created on.
$resource_group_name = ""                  # The name of the resource group you want the AppServicePlan
                                           # and AppService to be attached to.
$resources_location = ""                   # This is the location you wish the web app to be deployed to.
                                           # You can use the "az account list-locations -o table" command to
                                           # Get the list of available locations and location code names.
$azure_container_instance_name = ""        # This is the AzureContainerInstance name you wish to have.
$TEXT_ANALYTICS_RESOURCE_API_KEY = ""      # This should be taken from the Language resource.
$TEXT_ANALYTICS_RESOURCE_API_ENDPOINT = "" # This should be taken from the Language resource.
$DNS_LABEL = ""                            # This is the DNS label name you wish your ACI will have
$DOCKER_IMAGE_NAME = "mcr.microsoft.com/azure-cognitive-services/textanalytics/healthcare:latest"

az login
az account set -s $subscription_name
az container create --resource-group $resource_group_name --name $azure_container_instance_name --image $DOCKER_IMAGE_NAME --cpu 4 --memory 12 --port 5000 --dns-name-label $DNS_LABEL --environment-variables Eula=accept rai_terms=accept Billing=$TEXT_ANALYTICS_RESOURCE_API_ENDPOINT ApiKey=$TEXT_ANALYTICS_RESOURCE_API_KEY

# Once deployment complete, the resource should be available at: http://<unique_dns_label>.<resource_group_region>.azurecontainer.io:5000

Безопасное подключение ACI

По умолчанию при использовании ACI с API контейнера безопасность не обеспечивается. Это связано с тем, что, как правило, контейнеры выполняются в составе модуля, который защищен от внешней сети сетевым мостом. Однако можно изменить контейнер с помощью интерфейсного компонента, оставив конечную точку контейнера закрытой. В следующих примерах NGINX используется в качестве шлюза входящего трафика для поддержки HTTPS/SSL и проверки подлинности на основе сертификата клиента.

Примечание.

NGINX — это высокопроизводительный HTTP-сервер и прокси с открытым кодом. Контейнер NGINX можно использовать для завершения сеанса TLS для одного контейнера. Возможны также более сложные решения для завершения сеанса TLS на основе входящего трафика NGINX.

Настройка NGINX в качестве шлюза входящего трафика

NGINX использует файлы конфигурации для включения компонентов в среде выполнения. Чтобы включить завершение сеанса TLS для другой службы, необходимо указать SSL-сертификат для завершения подключения TLS и proxy_pass для указания адреса службы. Ниже приведен образец.

Примечание.

Для ssl_certificate требуется указать путь в локальной файловой системе контейнера NGINX. Адрес, указанный для proxy_pass, должен быть доступен в сети контейнера NGINX.

Контейнер NGINX загрузит все файлы в файл _.conf_, который вставляется после /etc/nginx/conf.d/ в пути конфигурации HTTP.

server {
  listen              80;
  return 301 https://$host$request_uri;
}
server {
  listen              443 ssl;
  # replace with .crt and .key paths
  ssl_certificate     /cert/Local.crt;
  ssl_certificate_key /cert/Local.key;

  location / {
    proxy_pass http://cognitive-service:5000;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-IP  $remote_addr;
  }
}

Пример файла Docker Compose

В приведенном ниже примере показано, как создать файл Docker Compose для развертывания NGINX и контейнеров работоспособности:

version: "3.7"
services:
  cognitive-service:
    image: {IMAGE_ID}
    ports:
      - 5000:5000
    environment:
      - eula=accept
      - billing={ENDPOINT_URI}
      - apikey={API_KEY}
    volumes:
        # replace with path to logs folder
      - <path-to-logs-folder>:/output
  nginx:
    image: nginx
    ports:
      - 443:443
    volumes:
        # replace with paths for certs and conf folders
      - <path-to-certs-folder>:/cert
      - <path-to-conf-folder>:/etc/nginx/conf.d/

Чтобы инициировать этот файл Docker Compose, выполните следующую команду в консоли на корневом уровне файла:

docker-compose up

Дополнительные сведения см. в документации по NGINX на странице Завершение SSL NGINX.

Запуск нескольких контейнеров на одном узле

Если вы планируете запускать несколько контейнеров при открытых портах, обязательно назначьте каждому контейнеру отдельный открытый порт. Например, запускайте первый контейнер на порте 5000, а второй — на порте 5001.

Этот контейнер можно использовать и другой контейнер служб ИИ Azure, работающий вместе на узле HOST. Кроме того, можно использовать несколько контейнеров одного и того же контейнера служб искусственного интеллекта Azure.

Запрос конечной точки прогнозирования контейнера

Контейнер предоставляет интерфейсы REST API конечной точки прогнозирования запросов.

Используйте узел http://localhost:5000 для API контейнера.

Проверка состояния контейнера

Проверить это можно несколькими способами. Получите адрес и открытый порт для рассматриваемого контейнера из его параметра Внешний IP-адрес и запустите веб-браузер. Используйте приведенные ниже URL-адреса запросов, чтобы убедиться, что контейнер работает. В примерах в качестве URL-адресов запросов используется значение http://localhost:5000, однако ваш конкретный контейнер может иметь отличия. Убедитесь в правильности внешнего IP-адреса и открытого порта контейнера.

Запросить URL-адрес Характер использования
http://localhost:5000/ Контейнер предоставляет домашнюю страницу.
http://localhost:5000/ready При запросе с помощью команды GET этот URL-адрес подтверждает, что контейнер готов принять запрос к модели. Этот запрос может использоваться для проб активности и готовности Kubernetes.
http://localhost:5000/status Этот URL-адрес, который можно также запросить с помощью GET, проверяет, действителен ли ключ API, используемый для запуска контейнера, без запроса конечной точки. Этот запрос может использоваться для проб активности и готовности Kubernetes.
http://localhost:5000/swagger Контейнер предоставляет полный набор документации по конечным точкам и функции Попробовать. Эта функция позволяет ввести параметры в веб-форму HTML и создать запрос без необходимости писать код. После возвращения результатов запроса предоставляется пример команды CURL с примером требуемого формата HTTP-заголовков и текста.

Container's home page

Структурирование запроса API для контейнера

Вы можете использовать Postman или пример запроса cURL ниже, чтобы отправить запрос в развернутый контейнер, заменив serverURL переменную соответствующим значением. Обратите внимание, что версия API в URL-адресе для контейнера отличается от размещенного API.

Примечание.

Функция "Ресурсы быстрого взаимодействия в сфере здравоохранения" (FHIR) доступна в последнем контейнере и предоставляется с помощью нового REST API службы "Язык".

curl -i -X POST 'http://<serverURL>:5000/language/analyze-text/jobs?api-version=2022-04-01-preview' --header 'Content-Type: application/json' --header --data-binary @example.json

Ниже приведен пример JSON-файла, присоединенного к тексту запроса POST API службы "Язык":

example.json

{
    "analysisInput": {
        "documents": [
            {
                "text": "The doctor prescried 200mg Ibuprofen.",
                "language": "en",
                "id": "1"
            }
        ]
    },
    "tasks": [
        {
            "taskName": "analyze 1",
            "kind": "Healthcare",
            "parameters": {
                "fhirVersion": "4.0.1"
            }
        }
    ]
}

Текст ответа контейнера

Следующий JSON является примером текста ответа службы "Язык" из контейнеризированного синхронного вызова:

{
  "jobId": "{JOB-ID}",
  "lastUpdateDateTime": "2022-04-18T15:50:16Z",
  "createdDateTime": "2022-04-18T15:50:14Z",
  "expirationDateTime": "2022-04-19T15:50:14Z",
  "status": "succeeded",
  "errors": [],
  "tasks": {
    "completed": 1,
    "failed": 0,
    "inProgress": 0,
    "total": 1,
    "items": [
      {
        "kind": "HealthcareLROResults",
        "taskName": "analyze 1",
        "lastUpdateDateTime": "2022-04-18T15:50:16.7046515Z",
        "status": "succeeded",
        "results": {
          "documents": [
            {
              "id": "1",
              "entities": [
                {
                  "offset": 4,
                  "length": 6,
                  "text": "doctor",
                  "category": "HealthcareProfession",
                  "confidenceScore": 0.76
                },
                {
                  "offset": 21,
                  "length": 5,
                  "text": "200mg",
                  "category": "Dosage",
                  "confidenceScore": 0.99
                },
                {
                  "offset": 27,
                  "length": 9,
                  "text": "Ibuprofen",
                  "category": "MedicationName",
                  "confidenceScore": 1.0,
                  "name": "ibuprofen",
                  "links": [
                    { "dataSource": "UMLS", "id": "C0020740" },
                    { "dataSource": "AOD", "id": "0000019879" },
                    { "dataSource": "ATC", "id": "M01AE01" },
                    { "dataSource": "CCPSS", "id": "0046165" },
                    { "dataSource": "CHV", "id": "0000006519" },
                    { "dataSource": "CSP", "id": "2270-2077" },
                    { "dataSource": "DRUGBANK", "id": "DB01050" },
                    { "dataSource": "GS", "id": "1611" },
                    { "dataSource": "LCH_NW", "id": "sh97005926" },
                    { "dataSource": "LNC", "id": "LP16165-0" },
                    { "dataSource": "MEDCIN", "id": "40458" },
                    { "dataSource": "MMSL", "id": "d00015" },
                    { "dataSource": "MSH", "id": "D007052" },
                    { "dataSource": "MTHSPL", "id": "WK2XYI10QM" },
                    { "dataSource": "NCI", "id": "C561" },
                    { "dataSource": "NCI_CTRP", "id": "C561" },
                    { "dataSource": "NCI_DCP", "id": "00803" },
                    { "dataSource": "NCI_DTP", "id": "NSC0256857" },
                    { "dataSource": "NCI_FDA", "id": "WK2XYI10QM" },
                    { "dataSource": "NCI_NCI-GLOSS", "id": "CDR0000613511" },
                    { "dataSource": "NDDF", "id": "002377" },
                    { "dataSource": "PDQ", "id": "CDR0000040475" },
                    { "dataSource": "RCD", "id": "x02MO" },
                    { "dataSource": "RXNORM", "id": "5640" },
                    { "dataSource": "SNM", "id": "E-7772" },
                    { "dataSource": "SNMI", "id": "C-603C0" },
                    { "dataSource": "SNOMEDCT_US", "id": "387207008" },
                    { "dataSource": "USP", "id": "m39860" },
                    { "dataSource": "USPMG", "id": "MTHU000060" },
                    { "dataSource": "VANDF", "id": "4017840" }
                  ]
                }
              ],
              "relations": [
                {
                  "relationType": "DosageOfMedication",
                  "entities": [
                    {
                      "ref": "#/results/documents/0/entities/1",
                      "role": "Dosage"
                    },
                    {
                      "ref": "#/results/documents/0/entities/2",
                      "role": "Medication"
                    }
                  ]
                }
              ],
              "warnings": [],
              "fhirBundle": {
                "resourceType": "Bundle",
                "id": "bae9d4e0-191e-48e6-9c24-c1ff6097c439",
                "meta": {
                  "profile": [
                    "http://hl7.org/fhir/4.0.1/StructureDefinition/Bundle"
                  ]
                },
                "identifier": {
                  "system": "urn:ietf:rfc:3986",
                  "value": "urn:uuid:bae9d4e0-191e-48e6-9c24-c1ff6097c439"
                },
                "type": "document",
                "entry": [
                  {
                    "fullUrl": "Composition/9044c2cc-dcec-4b9d-b005-bfa8be978aa8",
                    "resource": {
                      "resourceType": "Composition",
                      "id": "9044c2cc-dcec-4b9d-b005-bfa8be978aa8",
                      "status": "final",
                      "type": {
                        "coding": [
                          {
                            "system": "http://loinc.org",
                            "code": "11526-1",
                            "display": "Pathology study"
                          }
                        ],
                        "text": "Pathology study"
                      },
                      "subject": {
                        "reference": "Patient/5c554347-4290-4b05-83ac-6637ff3bfb40",
                        "type": "Patient"
                      },
                      "encounter": {
                        "reference": "Encounter/6fe12f5b-e35c-4c92-a492-96feda5a1a3b",
                        "type": "Encounter",
                        "display": "unknown"
                      },
                      "date": "2022-04-18",
                      "author": [
                        {
                          "reference": "Practitioner/fb5da4d8-e0f0-4434-8d29-4419b065c4d7",
                          "type": "Practitioner",
                          "display": "Unknown"
                        }
                      ],
                      "title": "Pathology study",
                      "section": [
                        {
                          "title": "General",
                          "code": {
                            "coding": [
                              {
                                "system": "",
                                "display": "Unrecognized Section"
                              }
                            ],
                            "text": "General"
                          },
                          "text": {
                            "div": "<div>\r\n\t\t\t\t\t\t\t<h1>General</h1>\r\n\t\t\t\t\t\t\t<p>The doctor prescried 200mg Ibuprofen.</p>\r\n\t\t\t\t\t</div>"
                          },
                          "entry": [
                            {
                              "reference": "List/db388912-b5fb-4073-a74c-2751fd3374dd",
                              "type": "List",
                              "display": "General"
                            }
                          ]
                        }
                      ]
                    }
                  },
                  {
                    "fullUrl": "Practitioner/fb5da4d8-e0f0-4434-8d29-4419b065c4d7",
                    "resource": {
                      "resourceType": "Practitioner",
                      "id": "fb5da4d8-e0f0-4434-8d29-4419b065c4d7",
                      "extension": [
                        {
                          "extension": [
                            { "url": "offset", "valueInteger": -1 },
                            { "url": "length", "valueInteger": 7 }
                          ],
                          "url": "http://hl7.org/fhir/StructureDefinition/derivation-reference"
                        }
                      ],
                      "name": [{ "text": "Unknown", "family": "Unknown" }]
                    }
                  },
                  {
                    "fullUrl": "Patient/5c554347-4290-4b05-83ac-6637ff3bfb40",
                    "resource": {
                      "resourceType": "Patient",
                      "id": "5c554347-4290-4b05-83ac-6637ff3bfb40",
                      "gender": "unknown"
                    }
                  },
                  {
                    "fullUrl": "Encounter/6fe12f5b-e35c-4c92-a492-96feda5a1a3b",
                    "resource": {
                      "resourceType": "Encounter",
                      "id": "6fe12f5b-e35c-4c92-a492-96feda5a1a3b",
                      "meta": {
                        "profile": [
                          "http://hl7.org/fhir/us/core/StructureDefinition/us-core-encounter"
                        ]
                      },
                      "status": "finished",
                      "class": {
                        "system": "http://terminology.hl7.org/CodeSystem/v3-ActCode",
                        "display": "unknown"
                      },
                      "subject": {
                        "reference": "Patient/5c554347-4290-4b05-83ac-6637ff3bfb40",
                        "type": "Patient"
                      }
                    }
                  },
                  {
                    "fullUrl": "MedicationStatement/24e860ce-2fdc-4745-aa9e-7d30bb487c4e",
                    "resource": {
                      "resourceType": "MedicationStatement",
                      "id": "24e860ce-2fdc-4745-aa9e-7d30bb487c4e",
                      "extension": [
                        {
                          "extension": [
                            { "url": "offset", "valueInteger": 27 },
                            { "url": "length", "valueInteger": 9 }
                          ],
                          "url": "http://hl7.org/fhir/StructureDefinition/derivation-reference"
                        }
                      ],
                      "status": "active",
                      "medicationCodeableConcept": {
                        "coding": [
                          {
                            "system": "http://www.nlm.nih.gov/research/umls",
                            "code": "C0020740",
                            "display": "Ibuprofen"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/aod",
                            "code": "0000019879"
                          },
                          {
                            "system": "http://www.whocc.no/atc",
                            "code": "M01AE01"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/ccpss",
                            "code": "0046165"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/chv",
                            "code": "0000006519"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/csp",
                            "code": "2270-2077"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/drugbank",
                            "code": "DB01050"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/gs",
                            "code": "1611"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/lch_nw",
                            "code": "sh97005926"
                          },
                          { "system": "http://loinc.org", "code": "LP16165-0" },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/medcin",
                            "code": "40458"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/mmsl",
                            "code": "d00015"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/msh",
                            "code": "D007052"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/mthspl",
                            "code": "WK2XYI10QM"
                          },
                          {
                            "system": "http://ncimeta.nci.nih.gov",
                            "code": "C561"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/nci_ctrp",
                            "code": "C561"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/nci_dcp",
                            "code": "00803"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/nci_dtp",
                            "code": "NSC0256857"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/nci_fda",
                            "code": "WK2XYI10QM"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/nci_nci-gloss",
                            "code": "CDR0000613511"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/nddf",
                            "code": "002377"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/pdq",
                            "code": "CDR0000040475"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/rcd",
                            "code": "x02MO"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/rxnorm",
                            "code": "5640"
                          },
                          {
                            "system": "http://snomed.info/sct",
                            "code": "E-7772"
                          },
                          {
                            "system": "http://snomed.info/sct/900000000000207008",
                            "code": "C-603C0"
                          },
                          {
                            "system": "http://snomed.info/sct/731000124108",
                            "code": "387207008"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/usp",
                            "code": "m39860"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/uspmg",
                            "code": "MTHU000060"
                          },
                          {
                            "system": "http://hl7.org/fhir/ndfrt",
                            "code": "4017840"
                          }
                        ],
                        "text": "Ibuprofen"
                      },
                      "subject": {
                        "reference": "Patient/5c554347-4290-4b05-83ac-6637ff3bfb40",
                        "type": "Patient"
                      },
                      "context": {
                        "reference": "Encounter/6fe12f5b-e35c-4c92-a492-96feda5a1a3b",
                        "type": "Encounter",
                        "display": "unknown"
                      },
                      "dosage": [
                        {
                          "text": "200mg",
                          "doseAndRate": [{ "doseQuantity": { "value": 200 } }]
                        }
                      ]
                    }
                  },
                  {
                    "fullUrl": "List/db388912-b5fb-4073-a74c-2751fd3374dd",
                    "resource": {
                      "resourceType": "List",
                      "id": "db388912-b5fb-4073-a74c-2751fd3374dd",
                      "status": "current",
                      "mode": "snapshot",
                      "title": "General",
                      "subject": {
                        "reference": "Patient/5c554347-4290-4b05-83ac-6637ff3bfb40",
                        "type": "Patient"
                      },
                      "encounter": {
                        "reference": "Encounter/6fe12f5b-e35c-4c92-a492-96feda5a1a3b",
                        "type": "Encounter",
                        "display": "unknown"
                      },
                      "entry": [
                        {
                          "item": {
                            "reference": "MedicationStatement/24e860ce-2fdc-4745-aa9e-7d30bb487c4e",
                            "type": "MedicationStatement",
                            "display": "Ibuprofen"
                          }
                        }
                      ]
                    }
                  }
                ]
              }
            }
          ],
          "errors": [],
          "modelVersion": "2022-03-01"
        }
      }
    ]
  }
}

Запуск контейнера с поддержкой клиентской библиотеки

Начиная с версии контейнера 3.0.017010001-onprem-amd64 (или при использовании контейнера latest) можно запустить анализ текста для контейнера работоспособности с помощью клиентской библиотеки. Для этого добавьте в команду docker run следующий параметр:

enablelro=true

Затем при проверке подлинности клиентского объекта используйте конечную точку, в которой выполняется контейнер:

http://localhost:5000

Например, если вы используете C#, используйте следующий код:

var client = new TextAnalyticsClient("http://localhost:5000", "your-text-analytics-key");

Остановка контейнера

Чтобы завершить работу контейнера, в среде командной строки, где выполняется контейнер, нажмите комбинацию клавиш Ctrl+C.

Устранение неполадок

Если контейнер запускается с выходным подключением и включенным ведением журнала, контейнер создает файлы журнала, которые удобно использовать для устранения неполадок, возникающих во время запуска или работы контейнера.

Совет

Дополнительные сведения об устранении неполадок и рекомендации см. в статье часто задаваемые вопросы о контейнерах ИИ Azure.

Выставление счетов

Анализ текста для контейнеров работоспособности отправляет данные для выставления счетов в Azure с помощью языкового ресурса в учетной записи Azure.

Запросы к контейнеру оплачиваются согласно ценовой категории ресурса Azure, используемого для параметра ApiKey.

Контейнеры служб искусственного интеллекта Azure не лицензируются для запуска без подключения к конечной точке измерения или выставления счетов. Вам необходимо разрешить контейнерам непрерывную передачу данных для выставления счетов в конечную точку выставления счетов. Контейнеры служб искусственного интеллекта Azure не отправляют данные клиентов, такие как изображение или текст, которые анализируются, в корпорацию Майкрософт.

Подключение к Azure

Для запуска контейнера необходимо указать значения аргументов, касающихся выставления счетов. Эти значения обеспечивают подключение контейнера к конечной точке выставления счетов. Отчеты об использовании контейнера примерно каждые 10—15 минут. Если контейнер не подключится к Azure в течение допустимого периода времени, контейнер будет продолжать работать, но не будет обслуживать запросы, пока не будет восстановлена конечная точка выставления счетов. Попытки подключения выполняются 10 раз на протяжении одинакового интервала времени (10–15 минут). Если контейнеру не удается подключиться к конечной точке выставления счетов за 10 попыток, он останавливает запросы на обслуживание. Дополнительные сведения о выставлении счетов см. в контейнере служб искусственного интеллекта Azure.

Аргументы для выставления счетов

Команда docker run запустит контейнер, когда все три из следующих параметров предоставляются допустимыми значениями:

Вариант Описание
ApiKey Ключ API ресурса служб ИИ Azure, который используется для отслеживания сведений о выставлении счетов.
Этому параметру следует присвоить значение ключа API для подготовленного ресурса, который можно получить в Billing.
Billing Конечная точка ресурса служб искусственного интеллекта Azure, которая используется для отслеживания сведений о выставлении счетов.
Этому параметру следует присвоить URI конечной точки подготовленного ресурса Azure.
Eula Указывает, что вы приняли условия лицензии для контейнера.
Для этого параметра следует задать значение accept.

Итоги

Из этой статьи вы узнали основные понятия и рабочий процесс скачивания, установки и выполнения Анализа текста для контейнеров работоспособности. Сводка:

  • Анализ текста для работоспособности предоставляет контейнер Linux для Docker
  • Образы контейнеров скачиваются из Реестра контейнеров Майкрософт (MCR).
  • Образы контейнеров выполняются в Docker.
  • Указав узел URI контейнера, можно использовать пакет SDK или REST API для вызова операций в Анализе текста для контейнеров работоспособности.
  • При создании экземпляра контейнера нужно указать данные для выставления счетов.

Внимание

Контейнеры ИИ Azure не лицензируются для запуска без подключения к Azure для измерения. Клиенты должны разрешить контейнерам непрерывную передачу данных для выставления счетов в службу контроля потребления. Контейнеры искусственного интеллекта Azure не отправляют данные клиента (например, текст, который анализируется) в корпорацию Майкрософт.

Следующие шаги