Menggunakan kontainer Text Analytics untuk kesehatan

Kontainer memungkinkan Anda untuk menghosting API Text Analytics untuk kesehatan pada infrastruktur Anda sendiri. Jika Anda memiliki persyaratan keamanan atau tata kelola data yang tidak dapat dipenuhi dengan memanggil Text Analytics untuk kesehatan dari jarak jauh, maka kontainer mungkin merupakan pilihan yang baik.

Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum Anda memulai.

Prasyarat

Anda harus memenuhi prasyarat berikut sebelum menggunakan kontainer Text Analytics untuk kesehatan. Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum Anda memulai.

Mengumpulkan parameter yang diperlukan

Tiga parameter utama untuk semua kontainer Azure AI diperlukan. Syarat Lisensi Perangkat Lunak Microsoft harus ada dengan nilai terima. Kunci URI dan API Titik akhir juga diperlukan.

URI titik akhir

Nilai {ENDPOINT_URI} tersedia di halaman Ringkasan portal Azure sumber daya layanan Azure AI terkait. Buka halaman Ringkasan, arahkan kursor ke titik akhir, dan ikon Salin ke clipboard akan muncul. Salin dan gunakan titik akhir jika diperlukan.

Screenshot that shows gathering the endpoint URI for later use.

Kunci

Nilai {API_KEY} digunakan untuk memulai kontainer dan tersedia di halaman Kunci portal Azure dari sumber daya layanan Azure AI yang sesuai. Buka halaman Kunci, lalu pilih ikon Salin ke clipboard.

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

Penting

Kunci langganan ini digunakan untuk mengakses API layanan Azure AI Anda. Jangan bagikan kunci Anda. Simpan dengan aman. Misalnya, gunakan Azure Key Vault. Sebaiknya Anda meregenerasi kunci ini secara rutin. Hanya satu kunci yang diperlukan untuk melakukan panggilan API. Saat Anda meregenerasi kunci pertama, Anda dapat menggunakan kunci kedua untuk melanjutkan akses ke layanan.

Persyaratan dan rekomendasi komputer host

Host adalah komputer berbasis x64 yang menjalankan kontainer Docker. Ini bisa menjadi komputer lokal Anda atau layanan hosting Docker di Azure, seperti:

Tabel berikut ini menjelaskan spesifikasi minimum dan yang direkomendasikan untuk kontainer Text Analytics untuk kesehatan. Setiap inti CPU harus setidaknya 2,6 gigahertz (GHz) atau lebih cepat. Transaksi Per Detik (TPS) yang diperbolehkan juga dicantumkan.

Spesifikasi host minimum Spesifikasi host yang direkomendasikan TPS minimum TPS maksimum
1 dokumen/permintaan 4 core, memori 12GB 6 inti, memori 12GB 15 30
10 dokumen/permintaan 6 inti, memori 16GB 8 inti, memori 20GB 15 30

Inti CPU dan memori sesuai dengan pengaturan --cpus dan --memory, yang digunakan sebagai bagian dari perintah docker run.

Dapatkan gambar kontainer dengan docker pull

Gambar kontainer Text Analytics untuk kesehatan dapat ditemukan di mcr.microsoft.com sindikat registri kontainer. Itu berada di dalam repositori azure-cognitive-services/textanalytics/ dan dinamai healthcare. Nama gambar kontainer yang sepenuhnya memenuhi syarat adalah, mcr.microsoft.com/azure-cognitive-services/textanalytics/healthcare

Untuk menggunakan versi terbaru kontainer, Anda dapat menggunakan latest tag . Anda juga dapat menemukan daftar lengkap tag di MCR.

Gunakan perintah docker pull untuk mengunduh gambar kontainer ini dari registri kontainer publik Microsoft. Anda dapat menemukan tag unggulan di Microsoft Container Registry

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

Tip

Anda dapat menggunakan perintah gambar docker untuk mencantumkan gambar kontainer yang diunduh. Misalnya, perintah berikut mencantumkan ID, repositori, dan tag dari setiap gambar kontainer yang diunduh, yang diformat sebagai tabel:

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

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

Jalankan kontainer dengan docker run

Setelah kontainer berada di komputer host, gunakan perintah jalankan docker untuk menjalankan kontainer. Kontainer akan terus berjalan hingga Anda menghentikannya.

Penting

  • Perintah docker di bagian berikut menggunakan garis miring terbalik, \, sebagai karakter kelanjutan baris. Ganti atau hapus ini berdasarkan persyaratan sistem operasi host Anda.
  • Opsi Eula, Billing, dan ApiKey harus ditentukan untuk menjalankan kontainer; jika tidak, kontainer tidak akan dimulai. Untuk mengetahui informasi lebih lanjut, lihat Penagihan.
  • Analisis sentimen dan kontainer deteksi bahasa menggunakan API v3, dan tersedia secara umum. Kontainer ekstraksi frasa kunci menggunakan API v2, dan saat ini dalam pratinjau.

Ada beberapa cara untuk memasang dan menjalankan Text Analytics untuk kontainer kesehatan.

  • Gunakan portal Microsoft Azure untuk membuat sumber daya Bahasa, dan gunakan Docker untuk mendapatkan kontainer Anda.
  • Gunakan Azure VM dengan Docker untuk menjalankan kontainer.
  • Gunakan skrip PowerShell dan Azure CLI berikut ini untuk mengotomatiskan penyebaran sumber daya dan konfigurasi kontainer.

Saat Anda menggunakan Analitik Teks untuk kontainer status, data yang terdapat dalam permintaan dan respons API Anda tidak dapat dilihat oleh Microsoft, dan tidak digunakan untuk melatih model yang diterapkan pada data Anda.

Jalankan kontainer secara lokal

Untuk menjalankan kontainer di lingkungan Anda sendiri setelah mengunduh gambar kontainer, jalankan perintah docker run berikut. Ganti tempat penampung dengan nilai Anda:

Placeholder Nilai Format atau contoh
{API_KEY} Kunci untuk sumber bahasa pemrogram Anda. Anda dapat menemukannya di halaman Kunci dan titik akhir sumber daya, di portal Azure. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
{ENDPOINT_URI} Titik akhir untuk mengakses API. Anda dapat menemukannya di halaman Kunci dan titik akhir sumber daya, di portal 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} 

Perintah ini:

  • Menjalankan kontainer Text Analitik untuk kesehatan dari gambar kontainer
  • Mengalokasikan 6 inti CPU dan 12 gigabyte (GB) memori
  • Mengekspos port TCP 5000 dan mengalokasikan pseudo-TTY untuk kontainer
  • Menerima perjanjian lisensi pengguna akhir (Eula) dan persyaratan AI (RAI) yang bertanggung jawab
  • Menghapus kontainer secara otomatis setelah kontainer keluar. Gambar kontainer masih tersedia di komputer host.

Demo UI untuk memvisualisasikan output

Kontainer menyediakan API titik akhir prediksi kueri berbasis REST. Kami juga telah menyediakan alat visualisasi dalam wadah yang dapat diakses dengan menambahkan /demo ke titik akhir kontainer. Contohnya:

http://<serverURL>:5000/demo

Gunakan contoh permintaan cURL di bawah ini untuk mengirimkan kueri ke kontainer yang telah Anda sebarkan mengganti serverURL variabel dengan nilai yang sesuai.

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

Pasang kontainer menggunakan Azure Web App untuk Kontainer

Azure Web App for Containers adalah sumber daya Azure yang didedikasikan untuk menjalankan kontainer di cloud. Ini membawa kemampuan out-of-the-box seperti autoscaling, dukungan untuk kontainer docker dan docker compose, dukungan HTTPS dan banyak lagi.

Catatan

Menggunakan Azure Aplikasi Web Anda akan secara otomatis mendapatkan domain dalam bentuk <appservice_name>.azurewebsites.net

Jalankan skrip PowerShell ini menggunakan Azure CLI untuk membuat Aplikasi Web untuk Kontainer, menggunakan langganan Anda dan gambar kontainer melalui HTTPS. Tunggu hingga skrip selesai (sekitar 25-30 menit) sebelum mengirimkan permintaan pertama.

$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

Pasang kontainer menggunakan Azure Container Instance

Anda juga dapat menggunakan Azure Container Instance (ACI) untuk mempermudah penyebaran. ACI adalah sumber daya yang memungkinkan Anda menjalankan kontainer Docker sesuai permintaan di lingkungan Azure yang terkelola dan tanpa server.

Lihat Cara menggunakan Azure Container Instances untuk langkah-langkah dalam menyebarkan sumber daya ACI menggunakan portal Microsoft Azure. Anda juga dapat menggunakan skrip PowerShell di bawah ini menggunakan Azure CLI, yang akan membuat ACI pada langganan Anda menggunakan gambar kontainer. Tunggu hingga skrip selesai (sekitar 25-30 menit) sebelum mengirimkan permintaan pertama. Karena batas jumlah maksimum CPU per sumber daya ACI, jangan pilih opsi ini jika Anda berharap untuk mengirimkan lebih dari 5 dokumen besar (masing-masing sekitar 5000 karakter) per permintaan. Lihat artikel dukungan regional ACI untuk informasi ketersediaan.

Catatan

Azure Container Instances tidak menyertakan dukungan HTTPS untuk domain bawaan. Jika Anda memerlukan HTTPS, Anda harus mengonfigurasinya secara manual, termasuk membuat sertifikat dan mendaftarkan domain. Anda dapat menemukan instruksi untuk melakukan ini dengan NGINX di bawah ini.

$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

Konektivitas ACI aman

Secara default tidak ada keamanan yang disediakan saat menggunakan ACI dengan container API. Ini karena biasanya kontainer akan berjalan sebagai bagian dari Pod yang dilindungi dari luar oleh jembatan jaringan. Namun, Anda dapat memodifikasi kontainer dengan komponen depan, menjaga titik akhir kontainer tetap privat. Contoh berikut menggunakan NGINX sebagai gateway ingress untuk mendukung HTTPS/ SSL dan autentikasi sertifikat klien.

Catatan

NGINX adalah server dan proksi HTTP sumber terbuka berperforma tinggi. Kontainer NGINX dapat digunakan untuk mengakhiri koneksi TLS untuk satu kontainer. Solusi penghentian TLS berbasis NGINX yang lebih kompleks juga dimungkinkan.

Menyiapkan NGINX sebagai gateway ingress

NGINX menggunakan file konfigurasi untuk mengaktifkan fitur pada waktu proses. Untuk mengaktifkan penghentian TLS untuk layanan lain, Anda harus menentukan sertifikat SSL untuk menghentikan koneksi TLS dan proxy_pass untuk menentukan alamat untuk layanan. Sampel disediakan di bawah ini.

Catatan

ssl_certificate mengharapkan jalur yang akan ditentukan dalam sistem file lokal kontainer NGINX. Alamat yang ditentukan proxy_pass harus tersedia dari dalam jaringan kontainer NGINX.

Kontainer NGINX akan memuat semua file dalam _.conf_ yang dipasang di bawah /etc/nginx/conf.d/ ke jalur konfigurasi 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;
  }
}

Contoh file penulisan Docker

Contoh di bawah ini menunjukkan bagaimana file penulisan docker dapat dibuat untuk menyebarkan NGINX dan kontainer kesehatan:

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/

Untuk memulai file penulisan Docker ini, jalankan perintah berikut dari konsol di tingkat root file:

docker-compose up

Untuk informasi selengkapnya, lihat dokumentasi NGINX tentang Penghentian NGINX SSL.

Menjalankan beberapa kontainer pada host yang sama

Jika Anda berniat menjalankan beberapa kontainer dengan port yang terbuka, pastikan untuk menjalankan setiap kontainer dengan port terbuka yang berbeda. Misalnya, jalankan kontainer pertama pada port 5000 dan kontainer kedua pada port 5001.

Anda dapat memiliki kontainer ini dan kontainer layanan Azure AI yang berbeda yang berjalan di HOST bersama-sama. Anda juga dapat memiliki beberapa kontainer kontainer layanan Azure AI yang sama yang berjalan.

Mengkueri titik akhir prediksi kontainer

Kontainer menyediakan API titik akhir prediksi kueri berbasis REST.

Gunakan host, http://localhost:5000, untuk API kontainer.

Memvalidasi bahwa kontainer dapat dijalankan

Ada beberapa cara untuk memvalidasi bahwa kontainer sedang berjalan. Temukan alamat IP Eksternal dan port kontainer yang diekspos yang dimaksud, dan buka browser web favorit Anda. Gunakan berbagai URL permintaan yang mengikuti untuk memvalidasi bahwa kontainer sedang berjalan. Contoh URL permintaan yang tercantum di sini adalah http://localhost:5000, tetapi kontainer tertentu Anda mungkin bervariasi. Pastikan Anda mengandalkan port yang terekspos dan alamat IP Eksternal kontainer Anda.

URL Permintaan Tujuan
http://localhost:5000/ Kontainer menyediakan halaman beranda.
http://localhost:5000/ready Diminta dengan GET, URL ini memberikan verifikasi bahwa kontainer siap menerima kueri terhadap model. Permintaan ini dapat digunakan untuk penyelidikan keaktifan dan kesiapan Kubernetes.
http://localhost:5000/status Juga diminta dengan GET, ini memverifikasi apakah kunci-api yang digunakan untuk memulai kontainer yang valid tanpa menyebabkan kueri titik akhir. Permintaan ini dapat digunakan untuk penyelidikan keaktifan dan kesiapan Kubernetes.
http://localhost:5000/swagger Kontainer menyediakan serangkaian dokumentasi lengkap untuk titik akhir dan fitur Coba. Dengan fitur ini, Anda dapat memasukkan pengaturan Anda ke dalam formulir HTML berbasis web dan membuat kueri tanpa harus menulis kode apa pun. Setelah kueri ditampilkan, contoh perintah CURL disediakan untuk menunjukkan header dan format isi HTTP yang diperlukan.

Container's home page

Menyusun permintaan API untuk kontainer

Anda dapat menggunakan Postman atau contoh permintaan cURL di bawah ini untuk mengirimkan kueri ke kontainer yang Anda sebarkan, mengganti serverURL variabel dengan nilai yang sesuai. Perhatikan versi API dalam URL untuk kontainer berbeda dari API yang dihosting.

Catatan

Fitur Fast Healthcare Interoperability Resources (FHIR) tersedia dalam kontainer terbaru, dan diekspos melalui REST API bahasa baru.

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 berikut adalah contoh file JSON yang dilampirkan ke isi POST permintaan Bahasa:

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

Badan respons kontainer

JSON berikut adalah contoh Bahasa untuk isi respons dari panggilan sinkron dalam kontainer:

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

Menjalankan kontainer dengan dukungan pustaka Klien

Dimulai dengan versi kontainer 3.0.017010001-onprem-amd64 (atau jika Anda menggunakan kontainer latest), Anda dapat menjalankan kontainer Text Analytics untuk kesehatan menggunakan pustaka klien. Untuk melakukannya, tambahkan parameter berikut ke perintah docker run:

enablelro=true

Setelah itu, ketika Anda mengautentikasi objek klien, gunakan titik akhir yang dijalankan kontainer Anda:

http://localhost:5000

Misalnya, jika Anda menggunakan C# Anda akan menggunakan kode berikut:

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

Menghentikan kontainer

Untuk mematikan kontainer, di lingkungan baris perintah tempat kontainer berjalan, pilih Ctrl+C.

Pemecahan Masalah

Jika Anda menjalankan kontainer dengan pemasangan output dan pengelogan diaktifkan, kontainer membuat file log yang berguna untuk memecahkan masalah yang terjadi saat memulai atau menjalankan kontainer.

Tip

Untuk informasi dan panduan pemecahan masalah selengkapnya, lihat Tanya Jawab Umum (FAQ) kontainer Azure AI.

Billing

Kontainer Text Analytics untuk kesehatan mengirim informasi tagihan ke Azure, menggunakan sumber daya Bahasa di akun Azure Anda.

Kueri ke kontainer ditagih pada tingkat harga sumber daya Azure yang digunakan untuk ApiKey parameter.

Kontainer layanan Azure AI tidak dilisensikan untuk dijalankan tanpa tersambung ke titik akhir pengukuran atau penagihan. Anda harus mengaktifkan kontainer untuk mengomunikasikan informasi tagihan dengan titik akhir penagihan setiap saat. Kontainer layanan Azure AI tidak mengirim data pelanggan, seperti gambar atau teks yang sedang dianalisis, ke Microsoft.

Hubungkan ke Azure

Kontainer memerlukan nilai argumen penagihan untuk berjalan. Nilai-nilai ini memungkinkan kontainer tersambung ke titik akhir penagihan. Kontainer melaporkan penggunaan sekitar setiap 10 hingga 15 menit. Jika kontainer tidak tersambung ke Azure dalam jendela waktu yang diizinkan, kontainer terus berjalan tetapi tidak melayani kueri hingga titik akhir penagihan dipulihkan. Koneksi dicoba 10 kali pada interval waktu yang sama, 10 hingga 15 menit. Jika tidak dapat tersambung ke titik akhir penagihan dalam 10 percobaan, kontainer berhenti melayani permintaan. Lihat FAQ kontainer layanan Azure AI untuk contoh informasi yang dikirim ke Microsoft untuk penagihan.

Argumen penagihan

Perintah docker run akan memulai kontainer ketika ketiga opsi berikut disediakan dengan nilai yang valid:

Opsi Deskripsi
ApiKey Kunci API sumber daya layanan Azure AI yang digunakan untuk melacak informasi penagihan.
Nilai opsi ini harus diatur ke kunci API untuk resource yang disediakan yang ditentukan dalam Billing.
Billing Titik akhir sumber daya layanan Azure AI yang digunakan untuk melacak informasi penagihan.
Nilai opsi ini harus diatur ke URI titik akhir dari sumber daya Azure yang disediakan.
Eula Menunjukkan bahwa Anda menerima lisensi untuk kontainer.
Nilai opsi ini harus diatur untuk menerima.

Ringkasan

Dalam artikel ini, Anda telah mempelajari konsep dan alur kerja untuk mengunduh, menginstal, dan menjalankan kontainer Text Analytics untuk kesehatan. Singkatnya:

  • Text Analytics untuk kesehatan menyediakan kontainer Linux untuk Docker
  • Gambar kontainer diunduh dari Microsoft Container Registry (MCR).
  • Gambar kontainer dijalankan di Docker.
  • Anda dapat menggunakan REST API atau SDK untuk memanggil operasi di kontainer Text Analytics untuk kesehatan dengan menentukan URI host kontainer.
  • Anda harus menentukan informasi tagihan saat membuat instans kontainer.

Penting

Kontainer Azure AI tidak dilisensikan untuk dijalankan tanpa tersambung ke Azure untuk pengukuran. Pelanggan harus mengaktifkan kontainer untuk mengomunikasikan informasi tagihan dengan layanan pengukuran setiap saat. Kontainer Azure AI tidak mengirim data pelanggan (misalnya teks yang sedang dianalisis) ke Microsoft.

Langkah berikutnya