Usare Analisi del testo per i contenitori di integrità

I contenitori consentono di ospitare il Analisi del testo per l'API di integrità nella propria infrastruttura. Se si hanno requisiti di sicurezza o governance dei dati che non possono essere soddisfatti chiamando Analisi del testo per l'integrità remota, i contenitori potrebbero essere un'ottima opzione.

Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.

Prerequisiti

Prima di usare Analisi del testo per i contenitori di integrità, è necessario soddisfare i prerequisiti seguenti. Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.

  • Docker installato in un computer host. Docker deve essere configurato per consentire ai contenitori di connettersi ai dati di fatturazione e inviarli ad Azure.
    • In Windows, è anche necessario configurare Docker per supportare i contenitori Linux.
    • È necessario avere una conoscenza di base dei concetti di Docker.
  • lingua con il piano tariffario gratuito (F0) o standard (S).

Raccogliere i parametri obbligatori

Sono necessari tre parametri principali per tutti i contenitori di Intelligenza artificiale di Azure. Le Condizioni di licenza software Microsoft devono essere presenti con il valore accept. Sono necessari anche un URI endpoint e una chiave API.

URI endpoint

Il {ENDPOINT_URI} valore è disponibile nella pagina panoramica portale di Azure della risorsa dei servizi di intelligenza artificiale di Azure corrispondente. Passare alla pagina Panoramica , passare il puntatore del mouse sull'endpoint e visualizzare un'icona Copia negli Appunti. Copiare e usare l'endpoint, se necessario.

Screenshot che mostra la raccolta dell'URI dell'endpoint per un uso successivo.

Chiavi

Il {API_KEY} valore viene usato per avviare il contenitore ed è disponibile nella pagina Chiavi di portale di Azure della risorsa dei servizi di intelligenza artificiale di Azure corrispondente. Passare alla pagina Chiavi e selezionare l'icona Copia negli Appunti .

Screenshot che mostra il recupero di una delle due chiavi per un uso successivo.

Importante

Queste chiavi di sottoscrizione vengono usate per accedere all'API dei servizi di intelligenza artificiale di Azure. Non condividere le chiavi. Archiviarli in modo sicuro. Ad esempio, usare Azure Key Vault. È anche consigliabile rigenerare regolarmente queste chiavi. Per effettuare una chiamata API è necessaria una sola chiave. Quando si rigenera la prima chiave, è possibile usare la seconda chiave per l'accesso continuo al servizio.

Requisiti e consigli per i computer host

L'host è un computer basato su x64 che esegue il contenitore Docker. Può essere un computer dell'ambiente locale o un servizio di hosting Docker in Azure, tra cui:

Nella tabella seguente vengono descritte le specifiche minime e consigliate per il Analisi del testo per i contenitori di integrità. Ogni core CPU deve essere almeno di 2,6 gigahertz (GHz) o superiore. Sono elencate anche le transazioni consentite al secondo (TPS).

Specifiche host minime Specifiche host consigliate TPS minimo Numero massimo di tps
1 documento/richiesta 4 core, 12 GB di memoria 6 core, 12 GB di memoria 15 30
10 documenti/richiesta 6 core, 16 GB di memoria 8 core, 20 GB di memoria 15 30

Core CPU e memoria corrispondono alle --cpus impostazioni e --memory , usate come parte del docker run comando .

Ottenere l'immagine del contenitore con docker pull

Il Analisi del testo per l'immagine del contenitore di integrità è disponibile nel syndicate del mcr.microsoft.com registro contenitori. Si trova all'interno del azure-cognitive-services/textanalytics/ repository ed è denominato healthcare. Il nome completo dell'immagine del contenitore è mcr.microsoft.com/azure-cognitive-services/textanalytics/healthcare

Per usare la versione più recente del contenitore, è possibile usare il latest tag . È anche possibile trovare un elenco completo dei tag in MCR.

Usare il docker pull comando per scaricare questa immagine del contenitore dal registro contenitori pubblico Microsoft. È possibile trovare i tag in primo piano nel Registro Azure Container

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

Suggerimento

È possibile usare il comando docker images per visualizzare l'elenco delle immagini dei contenitori scaricate. Ad esempio, il comando seguente visualizza l'ID, il repository e il tag di ogni immagine del contenitore scaricata, in formato tabella:

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

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

Eseguire il contenitore con docker run

Quando il contenitore si trova nel computer host, usare il comando docker run per eseguire i contenitori. Il contenitore continuerà a essere eseguito fino a quando non viene arrestato.

Importante

  • I comandi di Docker nelle sezioni seguenti usano la barra rovesciata, \, come carattere di continuazione di riga. Sostituirla o rimuoverla in base ai requisiti del sistema operativo host.
  • È necessario specificare le opzioni Eula, Billing e ApiKey per eseguire il contenitore. In caso contrario, il contenitore non si avvia. Per altre informazioni, vedereFatturazione.
  • I contenitori di analisi del sentiment e rilevamento della lingua usano la versione 3 dell'API e sono disponibili a livello generale. Il contenitore di estrazione frasi chiave usa la versione 2 dell'API ed è disponibile in anteprima.

Esistono diversi modi per installare ed eseguire il Analisi del testo per il contenitore di integrità.

  • Usare il portale di Azure per creare una risorsa language e usare Docker per ottenere il contenitore.
  • Usare una macchina virtuale di Azure con Docker per eseguire il contenitore. Fare riferimento a Docker in Azure.
  • Usare gli script di PowerShell e dell'interfaccia della riga di comando di Azure seguenti per automatizzare la distribuzione delle risorse e la configurazione del contenitore.

Quando si usa il Analisi del testo per il contenitore di integrità, i dati contenuti nelle richieste e nelle risposte api non sono visibili a Microsoft e non vengono usati per il training del modello applicato ai dati.

Eseguire il contenitore in locale

Per eseguire il contenitore nel proprio ambiente dopo aver scaricato l'immagine del contenitore, eseguire il comando seguente docker run . Sostituire i segnaposto seguenti con i propri valori:

Segnaposto Valore Formato o esempio
{API_KEY} Chiave per la risorsa Language. È possibile trovarla nella pagina Chiave ed endpoint della risorsa, nella portale di Azure. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
{ENDPOINT_URI} Endpoint per l'accesso all'API. È possibile trovarla nella pagina Chiave ed endpoint della risorsa, nella portale di 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} 

Questo comando:

  • Esegue il Analisi del testo per il contenitore di integrità dall'immagine del contenitore
  • Alloca 6 core CPU e 12 gigabyte (GB) di memoria
  • Espone la porta TCP 5000 e alloca un pseudo terminale TTY per il contenitore
  • Accetta il contratto di licenza con l'utente finale e le condizioni di IA responsabile (RAI)
  • Rimuove automaticamente il contenitore dopo la chiusura. L'immagine del contenitore rimane disponibile nel computer host.

Interfaccia utente demo per visualizzare l'output

Il contenitore fornisce le API dell'endpoint di stima della query basata su REST. È stato anche fornito uno strumento di visualizzazione nel contenitore accessibile aggiungendo /demo all'endpoint del contenitore. Ad esempio:

http://<serverURL>:5000/demo

Usare la richiesta cURL di esempio seguente per inviare una query al contenitore distribuito sostituendo la serverURL variabile con il valore appropriato.

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

Installare il contenitore usando App Web di Azure per contenitori

App Web di Azure per contenitori è una risorsa di Azure dedicata all'esecuzione di contenitori nel cloud. Offre funzionalità predefinite, ad esempio la scalabilità automatica, il supporto per i contenitori Docker e docker compose, il supporto HTTPS e molto altro ancora.

Nota

Usando l'app Web di Azure si otterrà automaticamente un dominio sotto forma di <appservice_name>.azurewebsites.net

Eseguire questo script di PowerShell usando l'interfaccia della riga di comando di Azure per creare un'app Web per contenitori usando la sottoscrizione e l'immagine del contenitore tramite HTTPS. Attendere il completamento dello script (circa 25-30 minuti) prima di inviare la prima richiesta.

$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

Installare il contenitore usando l'istanza di Azure Container

È anche possibile usare un'istanza di Azure Container per semplificare la distribuzione. ACI è una risorsa che consente di eseguire contenitori Docker su richiesta in un ambiente Azure gestito e serverless.

Vedere How to use Istanze di Azure Container for steps on deploying an ACI resource using the portale di Azure .See How to use Istanze di Azure Container for steps on deploying an ACI resource using the portale di Azure. È anche possibile usare lo script di PowerShell seguente usando l'interfaccia della riga di comando di Azure, che creerà un'istanza di Contenitore nella sottoscrizione usando l'immagine del contenitore. Attendere il completamento dello script (circa 25-30 minuti) prima di inviare la prima richiesta. A causa del limite al numero massimo di CPU per risorsa ACI, non selezionare questa opzione se si prevede di inviare più di 5 documenti di grandi dimensioni (circa 5000 caratteri ciascuno) per richiesta. Per informazioni sulla disponibilità, vedere l'articolo del supporto regionale ACI .

Nota

Istanze di Azure Container non includere il supporto HTTPS per i domini predefiniti. Se è necessario HTTPS, sarà necessario configurarlo manualmente, inclusa la creazione di un certificato e la registrazione di un dominio. È possibile trovare le istruzioni per eseguire questa operazione con NGINX di seguito.

$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

Connettività ACI sicura

Per impostazione predefinita, non è disponibile alcuna sicurezza quando si usa ACI con l'API contenitore. Questo perché in genere i contenitori verranno eseguiti come parte di un pod protetto dall'esterno da un bridge di rete. È tuttavia possibile modificare un contenitore con un componente anteriore, mantenendo privato l'endpoint contenitore. Gli esempi seguenti usano NGINX come gateway di ingresso per supportare l'autenticazione HTTPS/SSL e client-certificate.

Nota

NGINX è un server HTTP open source ad alte prestazioni e un proxy. È possibile usare un contenitore NGINX per terminare una connessione TLS per un singolo contenitore. Sono anche possibili soluzioni di terminazione TLS basate su NGINX più complesse.

Configurare NGINX come gateway in ingresso

NGINX usa i file di configurazione per abilitare le funzionalità in fase di esecuzione. Per abilitare la terminazione TLS per un altro servizio, è necessario specificare un certificato SSL per terminare la connessione TLS e proxy_pass specificare un indirizzo per il servizio. Di seguito è riportato un esempio.

Nota

ssl_certificate prevede che venga specificato un percorso all'interno del file system locale del contenitore NGINX. L'indirizzo specificato per proxy_pass deve essere disponibile all'interno della rete del contenitore NGINX.

Il contenitore NGINX caricherà tutti i file in _.conf_ che vengono montati /etc/nginx/conf.d/ nel percorso di configurazione 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;
  }
}

File Docker compose di esempio

L'esempio seguente illustra come creare un file docker compose per distribuire NGINX e contenitori di integrità:

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/

Per avviare questo file docker compose, eseguire il comando seguente da una console a livello radice del file:

docker-compose up

Per altre informazioni, vedere la documentazione di NGINX sulla terminazione SSL NGINX.

Eseguire più contenitori nello stesso host

Se si intende eseguire più contenitori con porte esposte, assicurarsi di eseguire ogni contenitore con una porta esposta diversa. Eseguire ad esempio il primo contenitore sulla porta 5000 e il secondo sulla porta 5001.

È possibile avere questo contenitore e un contenitore di servizi di intelligenza artificiale di Azure diverso in esecuzione nell'host insieme. È anche possibile avere più contenitori dello stesso contenitore di servizi di intelligenza artificiale di Azure in esecuzione.

Eseguire una query sull'endpoint di stima del contenitore

Il contenitore fornisce le API dell'endpoint di stima della query basata su REST.

Usare l'host http://localhost:5000 per le API del contenitore.

Verificare che il contenitore sia in esecuzione

Per verificare se il contenitore è in esecuzione, sono disponibili diverse opzioni. Individuare l'indirizzo IP esterno e la porta esposta del contenitore in questione e aprire il Web browser preferito. Usare i vari URL di richiesta che seguono per verificare che il contenitore sia in esecuzione. Gli URL di richiesta di esempio elencati di seguito sono http://localhost:5000, ma il contenitore specifico può variare. Assicurarsi di basarsi sull'indirizzo IP esterno del contenitore e sulla porta esposta.

URL della richiesta Scopo
http://localhost:5000/ Il contenitore fornisce un home page.
http://localhost:5000/ready Richiesto con GET, questo URL fornisce una verifica che il contenitore sia pronto per accettare una query sul modello. Questa richiesta può essere usata per i probe di attività e di idoneità di Kubernetes.
http://localhost:5000/status Richiesto anche con GET, questo URL verifica se la chiave API usata per avviare il contenitore è valida senza causare una query dell'endpoint. Questa richiesta può essere usata per i probe di attività e di idoneità di Kubernetes.
http://localhost:5000/swagger Il contenitore fornisce un set completo di documentazione per gli endpoint e una funzionalità Prova. Con questa funzionalità, è possibile immettere le impostazioni in un modulo HTML basato sul Web ed eseguire la query senza scrivere codice. Dopo che la query restituisce il risultato, viene fornito un comando CURL di esempio per illustrare il formato richiesto per il corpo e le intestazioni HTTP.

Home page del contenitore

Strutturare la richiesta API per il contenitore

È possibile usare Postman o la richiesta cURL di esempio seguente per inviare una query al contenitore distribuito, sostituendo la serverURL variabile con il valore appropriato. Si noti che la versione dell'API nell'URL per il contenitore è diversa dall'API ospitata.

Nota

La funzionalità Fast Healthcare Interoperability Resources (FHIR) è disponibile nel contenitore più recente ed è esposta tramite la nuova API REST del linguaggio.

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

Il codice JSON seguente è un esempio di file JSON associato al corpo POST della richiesta di linguaggio:

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

Corpo della risposta del contenitore

Il codice JSON seguente è un esempio del corpo della risposta del linguaggio dalla chiamata sincrona in contenitori:

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

Eseguire il contenitore con il supporto della libreria client

A partire dalla versione 3.0.017010001-onprem-amd64 del contenitore (o se si usa il latest contenitore), è possibile eseguire il Analisi del testo per il contenitore di integrità usando la libreria client. A tale scopo, aggiungere il parametro seguente al docker run comando :

enablelro=true

Successivamente, quando si autentica l'oggetto client, usare l'endpoint in cui è in esecuzione il contenitore:

http://localhost:5000

Ad esempio, se si usa C# si userà il codice seguente:

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

Arrestare il contenitore

Per arrestare il contenitore, nell'ambiente della riga di comando in cui è in esecuzione il contenitore selezionare CTRL+C.

Risoluzione dei problemi

Se si esegue il contenitore con un punto di montaggio di output e la registrazione attivata, il contenitore genera file di log utili per risolvere i problemi che si verificano durante l'avvio o l'esecuzione del contenitore.

Suggerimento

Per altre informazioni sulla risoluzione dei problemi e indicazioni, vedere Domande frequenti sui contenitori di Intelligenza artificiale di Azure.

Fatturazione

Analisi del testo per i contenitori di integrità inviano informazioni di fatturazione ad Azure usando una risorsa language nell'account Azure.

Le query al contenitore vengono fatturate al piano tariffario della risorsa di Azure usata per il ApiKey parametro.

I contenitori dei servizi di intelligenza artificiale di Azure non vengono concessi in licenza per l'esecuzione senza essere connessi all'endpoint di misurazione o fatturazione. È necessario consentire ai contenitori di comunicare sempre le informazioni di fatturazione all'endpoint di fatturazione. I contenitori dei servizi di intelligenza artificiale di Azure non inviano i dati dei clienti, ad esempio l'immagine o il testo analizzato, a Microsoft.

Connettersi ad Azure

Per eseguire il contenitore, sono necessari i valori dell'argomento di fatturazione. Questi valori consentono al contenitore di connettersi all'endpoint di fatturazione. Il contenitore segnala l'utilizzo ogni 10-15 minuti. Se il contenitore non si connette ad Azure entro la finestra temporale consentita, continuerà a essere eseguito ma non fornirà query finché l'endpoint di fatturazione non verrà ripristinato. Il tentativo di connessione viene effettuato 10 volte nello stesso intervallo di tempo di 10-15 minuti. Se non riesce a connettersi all'endpoint di fatturazione entro i 10 tentativi, il contenitore smette di gestire le richieste. Per un esempio delle informazioni inviate a Microsoft per la fatturazione, vedere le domande frequenti sul contenitore di servizi di intelligenza artificiale di Azure .

Argomenti di fatturazione

Il docker run comando avvierà il contenitore quando vengono fornite tutte e tre le opzioni seguenti con valori validi:

Opzione Descrizione
ApiKey Chiave API della risorsa dei servizi di intelligenza artificiale di Azure usata per tenere traccia delle informazioni di fatturazione.
Il valore di questa opzione deve essere impostato su una chiave API per la risorsa di cui è stato effettuato il provisioning specificata in Billing.
Billing Endpoint della risorsa dei servizi di intelligenza artificiale di Azure usata per tenere traccia delle informazioni di fatturazione.
Il valore di questa opzione deve essere impostato sull'URI dell'endpoint di una risorsa di Azure di cui è stato effettuato il provisioning.
Eula Indica che è la licenza per il contenitore è stata accettata.
Il valore di questa opzione deve essere impostato su accept.

Riepilogo

In questo articolo sono stati appresi concetti e flussi di lavoro per il download, l'installazione e l'esecuzione di Analisi del testo per i contenitori di integrità. In sintesi:

  • Analisi del testo per l'integrità fornisce un contenitore Linux per Docker
  • Le immagini dei contenitori vengono scaricate da Registro Container Microsoft.
  • Le immagini dei contenitori vengono eseguite in Docker.
  • È possibile usare l'API REST o l'SDK per chiamare le operazioni in Analisi del testo per i contenitori di integrità specificando l'URI host del contenitore.
  • Quando si crea un'istanza di un contenitore, è necessario specificare le informazioni di fatturazione.

Importante

I contenitori di Intelligenza artificiale di Azure non vengono concessi in licenza per l'esecuzione senza essere connessi ad Azure per la misurazione. I clienti devono consentire ai contenitori di comunicare sempre le informazioni di fatturazione al servizio di misurazione. I contenitori di Intelligenza artificiale di Azure non inviano i dati dei clienti (ad esempio testo analizzato) a Microsoft.

Passaggi successivi