Använda textanalys för hälsocontainrar

Med containrar kan du vara värd för API:et textanalys för hälsa i din egen infrastruktur. Om du har krav på säkerhets- eller datastyrning som inte kan uppfyllas genom att anropa Textanalys för hälsa via fjärranslutning kan containrar vara ett bra alternativ.

Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.

Förutsättningar

Du måste uppfylla följande krav innan du använder Textanalys för hälsocontainrar. Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.

  • Docker installerat på en värddator. Docker måste konfigureras så att containrarna kan ansluta till och skicka faktureringsdata till Azure.
    • I Windows måste Docker också konfigureras för att stödja Linux-containrar.
    • Du bör ha en grundläggande förståelse för Docker-begrepp.
  • En språkresurs med den kostnadsfria prisnivån (F0) eller standard (S).

Samla in obligatoriska parametrar

Tre primära parametrar för alla Azure AI-containrar krävs. Licensvillkoren för Programvara från Microsoft måste finnas med värdet accept. En slutpunkts-URI och API-nyckel behövs också.

Slutpunkts-URI

Värdet {ENDPOINT_URI} är tillgängligt på översiktssidan för Azure-portalen för motsvarande Azure AI-tjänstresurs. Gå till sidan Översikt , hovra över slutpunkten och ikonen Kopiera till Urklipp visas. Kopiera och använd slutpunkten där det behövs.

Skärmbild som visar insamling av slutpunkts-URI för senare användning.

Nycklar

Värdet {API_KEY} används för att starta containern och är tillgängligt på sidan Nycklar i Azure-portalen för motsvarande Azure AI-tjänstresurs. Gå till sidan Nycklar och välj ikonen Kopiera till Urklipp.

Skärmbild som visar hur du hämtar en av de två nycklarna för senare användning.

Viktigt!

Dessa prenumerationsnycklar används för att komma åt ditt Azure AI-tjänst-API. Dela inte dina nycklar. Lagra dem på ett säkert sätt. Använd till exempel Azure Key Vault. Vi rekommenderar också att du återskapar dessa nycklar regelbundet. Endast en nyckel krävs för att göra ett API-anrop. När du återskapar den första nyckeln kan du använda den andra nyckeln för fortsatt åtkomst till tjänsten.

Krav och rekommendationer för värddatorer

Värden är en x64-baserad dator som kör Docker-containern. Det kan vara en dator lokalt eller en Docker-värdtjänst i Azure, till exempel:

I följande tabell beskrivs de minsta och rekommenderade specifikationerna för textanalys för hälsocontainrar. Varje CPU-kärna måste vara minst 2,6 gigahertz (GHz) eller snabbare. De tillåtna transaktionerna per sekund (TPS) visas också.

Minsta värdspecifikation Rekommenderade värdspecifikationer Minsta TPS MaximalT TPS
1 dokument/begäran 4 kärnor, 12 GB minne 6 kärnor, 12 GB minne 15 30
10 dokument/begäran 6 kärnor, 16 GB minne 8 kärnor, 20 GB minne 15 30

CPU-kärna och minne motsvarar --cpus inställningarna och --memory som används som en del av docker run kommandot.

Hämta containeravbildningen med docker pull

Avbildningen textanalys för hälsocontainer finns i mcr.microsoft.com containerregistersyndikatet. Den finns på lagringsplatsen azure-cognitive-services/textanalytics/ och heter healthcare. Det fullständigt kvalificerade containeravbildningsnamnet är mcr.microsoft.com/azure-cognitive-services/textanalytics/healthcare

Om du vill använda den senaste versionen av containern kan du använda taggen latest . Du hittar också en fullständig lista över taggar på MCR.

docker pull Använd kommandot för att ladda ned den här containeravbildningen från Microsofts offentliga containerregister. Du hittar de aktuella taggarna i Microsoft Container Registry

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

Dricks

Du kan använda kommandot docker images för att visa en lista över dina nedladdade containeravbildningar. Följande kommando visar till exempel ID, lagringsplats och tagg för varje nedladdad containeravbildning, formaterad som en tabell:

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

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

Kör containern med docker run

När containern finns på värddatorn använder du kommandot docker run för att köra containrarna. Containern fortsätter att köras tills du stoppar den.

Viktigt!

  • Docker-kommandona i följande avsnitt använder snedstrecket, \, som ett radfortsättningstecken. Ersätt eller ta bort detta baserat på värdoperativsystemets krav.
  • Alternativen Eula, Billingoch ApiKey måste anges för att köra containern. Annars startar inte containern. Mer information finns i Fakturering.
  • Containrar för attitydanalys och språkidentifiering använder v3 av API:et och är allmänt tillgängliga. Containern för extrahering av nyckelfraser använder v2 av API:et och är i förhandsversion.

Det finns flera sätt att installera och köra containern Textanalys för hälsa.

  • Använd Azure-portalen för att skapa en språkresurs och använd Docker för att hämta din container.
  • Använd en virtuell Azure-dator med Docker för att köra containern.
  • Använd följande PowerShell- och Azure CLI-skript för att automatisera resursdistribution och containerkonfiguration.

När du använder containern Textanalys för hälsa visas inte de data som finns i dina API-begäranden och svar för Microsoft och används inte för att träna modellen som tillämpas på dina data.

Kör containern lokalt

Kör följande docker run kommando för att köra containern i din egen miljö när du har laddat ned containeravbildningen. Ersätt platshållarna nedan med dina egna värden:

Platshållare Värde Format eller exempel
{API_KEY} Nyckeln för språkresursen. Du hittar den på resursens nyckel- och slutpunktssida i Azure-portalen. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
{ENDPOINT_URI} Slutpunkten för åtkomst till API:et. Du hittar den på resursens nyckel- och slutpunktssida i Azure-portalen. 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} 

Det här kommandot:

  • Kör containern Textanalys för hälsa från containeravbildningen
  • Allokerar 6 CPU-kärnor och 12 gigabyte (GB) minne
  • Exponerar TCP-port 5000 och allokerar en pseudo-TTY för containern
  • Godkänner licensavtalet för slutanvändare (EULA) och ansvarsfulla AI-villkor (RAI)
  • Tar automatiskt bort containern när den har avslutats. Containeravbildningen är fortfarande tillgänglig på värddatorn.

Demo-användargränssnitt för att visualisera utdata

Containern innehåller REST-baserade slutpunkts-API:er för frågeförutsägelse. Vi har också tillhandahållit ett visualiseringsverktyg i containern som är tillgängligt genom att lägga /demo till containerns slutpunkt. Till exempel:

http://<serverURL>:5000/demo

Använd cURL-exempelbegäran nedan för att skicka en fråga till containern som du har distribuerat och ersätta variabeln serverURL med lämpligt värde.

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

Installera containern med Hjälp av Azure Web App for Containers

Azure Web App for Containers är en Azure-resurs som är dedikerad till att köra containrar i molnet. Det ger färdiga funktioner som automatisk skalning, stöd för docker-containrar och docker compose, HTTPS-stöd och mycket mer.

Kommentar

Med Hjälp av Azure Web App får du automatiskt en domän i form av <appservice_name>.azurewebsites.net

Kör det här PowerShell-skriptet med Hjälp av Azure CLI för att skapa en webbapp för containrar med din prenumeration och containeravbildningen via HTTPS. Vänta tills skriptet har slutförts (cirka 25–30 minuter) innan du skickar den första begäran.

$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

Installera containern med Azure Container Instance

Du kan också använda en Azure Container Instance (ACI) för att göra distributionen enklare. ACI är en resurs som gör att du kan köra Docker-containrar på begäran i en hanterad, serverlös Azure-miljö.

Mer information om hur du distribuerar en ACI-resurs med azure-portalen finns i Använda Azure Container Instances . Du kan också använda PowerShell-skriptet nedan med hjälp av Azure CLI, som skapar en ACI för din prenumeration med hjälp av containeravbildningen. Vänta tills skriptet har slutförts (cirka 25–30 minuter) innan du skickar den första begäran. På grund av gränsen för det maximala antalet processorer per ACI-resurs väljer du inte det här alternativet om du förväntar dig att skicka fler än 5 stora dokument (cirka 5 000 tecken vardera) per begäran. Mer information finns i artikeln om regional support för ACI.

Kommentar

Azure Container Instances innehåller inte HTTPS-stöd för de inbyggda domänerna. Om du behöver HTTPS måste du konfigurera det manuellt, inklusive att skapa ett certifikat och registrera en domän. Du hittar instruktioner för att göra detta med NGINX nedan.

$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

Säker ACI-anslutning

Som standard finns det ingen säkerhet när du använder ACI med container-API. Detta beror på att containrar vanligtvis körs som en del av en podd som skyddas utifrån av en nätverksbrygga. Du kan dock ändra en container med en framåtriktad komponent och hålla containerslutpunkten privat. I följande exempel används NGINX som en ingressgateway för att stödja HTTPS/SSL och klientcertifikatautentisering.

Kommentar

NGINX är en HTTP-server med öppen källkod med höga prestanda och proxy. En NGINX-container kan användas för att avsluta en TLS-anslutning för en enda container. Mer komplexa NGINX-ingressbaserade TLS-avslutningslösningar är också möjliga.

Konfigurera NGINX som en ingressgateway

NGINX använder konfigurationsfiler för att aktivera funktioner vid körning. För att aktivera TLS-avslutning för en annan tjänst måste du ange ett SSL-certifikat för att avsluta TLS-anslutningen och proxy_pass ange en adress för tjänsten. Nedan visas ett exempel.

Kommentar

ssl_certificate förväntar sig att en sökväg anges i NGINX-containerns lokala filsystem. Den angivna proxy_pass adressen måste vara tillgänglig från NGINX-containerns nätverk.

NGINX-containern läser in alla filer i _.conf_ som monteras under /etc/nginx/conf.d/ i HTTP-konfigurationssökvägen.

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

Exempel på Docker-skrivfil

Exemplet nedan visar hur en docker compose-fil kan skapas för att distribuera NGINX- och hälsocontainrar:

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/

Om du vill initiera docker-skrivfilen kör du följande kommando från en konsol på rotnivån för filen:

docker-compose up

Mer information finns i NGINX-dokumentationen om NGINX SSL-avslutning.

Köra flera containrar på samma värd

Om du tänker köra flera containrar med exponerade portar ska du köra varje container med en annan exponerad port. Kör till exempel den första containern på port 5000 och den andra containern på port 5001.

Du kan ha den här containern och en annan Azure AI-tjänstcontainer som körs på VÄRDEN tillsammans. Du kan också ha flera containrar av samma Azure AI-tjänstcontainer som körs.

Köra frågor mot containerns förutsägelseslutpunkt

Containern innehåller REST-baserade slutpunkts-API:er för frågeförutsägelse.

Använd värden, http://localhost:5000, för container-API:er.

Verifiera att en container körs

Det finns flera sätt att verifiera att containern körs. Leta upp den externa IP-adressen och den exponerade porten för containern i fråga och öppna din favoritwebbläsare. Använd de olika url:er för begäranden som följer för att verifiera att containern körs. Exempelbegärande-URL:er som anges här är http://localhost:5000, men din specifika container kan variera. Se till att förlita dig på containerns externa IP-adress och exponerade port.

Begärans-URL Syfte
http://localhost:5000/ Containern tillhandahåller en startsida.
http://localhost:5000/ready Den här URL:en begärs med GET och tillhandahåller en verifiering av att containern är redo att acceptera en fråga mot modellen. Den här begäran kan användas för Kubernetes liveness- och beredskapsavsökningar.
http://localhost:5000/status Den här URL:en begärs också med GET och kontrollerar om api-nyckeln som används för att starta containern är giltig utan att orsaka en slutpunktsfråga. Den här begäran kan användas för Kubernetes liveness- och beredskapsavsökningar.
http://localhost:5000/swagger Containern tillhandahåller en fullständig uppsättning dokumentation för slutpunkterna samt en Prova-funktion. Med den här funktionen kan du ange inställningarna i ett webbaserat HTML-formulär och göra frågan utan att behöva skriva någon kod. När frågan har returnerats tillhandahålls ett exempel på CURL-kommandot för att demonstrera de HTTP-huvuden och brödtextformat som krävs.

Containerns startsida

Strukturera API-begäran för containern

Du kan använda REST-klienttillägget för Visual Studio Code eller cURL-exempelbegäran nedan för att skicka en fråga till containern som du distribuerade och ersätta variabeln serverURL med lämpligt värde. Observera att versionen av API:et i URL:en för containern skiljer sig från det värdbaserade API:et.

Kommentar

FHIR-funktionen (Fast Healthcare Interoperability Resources) är tillgänglig i den senaste containern och exponeras via det nya språket 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

Följande JSON är ett exempel på en JSON-fil som är kopplad till språkbegärans POST-brödtext:

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

Containersvarstext

Följande JSON är ett exempel på språksvarstexten från det containerbaserade synkrona anropet:

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

Kör containern med stöd för klientbibliotek

Från och med containerversionen 3.0.017010001-onprem-amd64 (eller om du använder containern latest ) kan du köra containern Textanalys för hälsa med hjälp av klientbiblioteket. Det gör du genom att lägga till följande parameter i docker run kommandot:

enablelro=true

När du sedan autentiserar klientobjektet använder du slutpunkten som containern körs på:

http://localhost:5000

Om du till exempel använder C# använder du följande kod:

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

Stoppa containern

Om du vill stänga av containern väljer du Ctrl+C i den kommandoradsmiljö där containern körs.

Felsökning

Om du kör containern med en utdatamontering och loggning aktiverad genererar containern loggfiler som är användbara för att felsöka problem som inträffar när containern startas eller körs.

Dricks

Mer felsökningsinformation och vägledning finns i Vanliga frågor och svar om Azure AI-containrar.

Fakturering

Textanalys för hälsocontainrar skickar faktureringsinformation till Azure med hjälp av en språkresurs på ditt Azure-konto.

Frågor till containern faktureras på prisnivån för den Azure-resurs som används för parametern ApiKey .

Azure AI-tjänstcontainrar är inte licensierade att köras utan att vara anslutna till slutpunkten för mätning eller fakturering. Du måste aktivera containrarna för att kunna kommunicera faktureringsinformation med faktureringsslutpunkten hela tiden. Azure AI-tjänstcontainrar skickar inte kunddata, till exempel den bild eller text som analyseras, till Microsoft.

Ansluta till Azure

Containern behöver faktureringsargumentvärdena för att köras. Med de här värdena kan containern ansluta till faktureringsslutpunkten. Containern rapporterar användning var 10:e till 15:e minut. Om containern inte ansluter till Azure inom den tillåtna tidsperioden fortsätter containern att köras men hanterar inte frågor förrän faktureringsslutpunkten har återställts. Anslutningen görs 10 gånger med samma tidsintervall på 10 till 15 minuter. Om den inte kan ansluta till faktureringsslutpunkten inom de 10 försöken slutar containern att hantera begäranden. Se vanliga frågor och svar om Azure AI-tjänstcontainern för ett exempel på den information som skickas till Microsoft för fakturering.

Faktureringsargument

Kommandot docker run startar containern när alla tre av följande alternativ har giltiga värden:

Alternativ Description
ApiKey API-nyckeln för azure AI-tjänstresursen som används för att spåra faktureringsinformation.
Värdet för det här alternativet måste anges till en API-nyckel för den etablerade resursen som anges i Billing.
Billing Slutpunkten för azure AI-tjänstresursen som används för att spåra faktureringsinformation.
Värdet för det här alternativet måste anges till slutpunkts-URI:n för en etablerad Azure-resurs.
Eula Anger att du har godkänt licensen för containern.
Värdet för det här alternativet måste vara inställt på att acceptera.

Sammanfattning

I den här artikeln har du lärt dig begrepp och arbetsflöden för att ladda ned, installera och köra Textanalys för hälsocontainrar. Sammanfattningsvis:

  • Textanalys för hälsa tillhandahåller en Linux-container för Docker
  • Containeravbildningar laddas ned från Microsoft Container Registry (MCR).
  • Containeravbildningar körs i Docker.
  • Du kan använda antingen REST API eller SDK för att anropa åtgärder i Textanalys för hälsocontainrar genom att ange värd-URI:n för containern.
  • Du måste ange faktureringsinformation när du instansierar en container.

Viktigt!

Azure AI-containrar är inte licensierade att köras utan att vara anslutna till Azure för mätning. Kunder måste göra det möjligt för containrarna att kommunicera faktureringsinformation med mätningstjänsten hela tiden. Azure AI-containrar skickar inte kunddata (t.ex. text som analyseras) till Microsoft.

Nästa steg