استخدام تحليلات النص للحاويات الصحية

تمكنك الحاويات من استضافة Text Analytics لواجهة برمجة التطبيقات الصحية على البنية الأساسية الخاصة بك. إذا كان لديك متطلبات الأمان أو إدارة البيانات التي لا يمكن تلبيتها عن طريق استدعاء Text Analytics للصحة عن بعد، فقد تكون الحاويات خيارًا جيدًا.

في حال لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانيّاً قبل البدء.

المتطلبات الأساسية

يجب عليك تلبية المتطلبات الأساسية التالية قبل استخدام Text Analytics للحاويات الصحية. في حال لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانيّاً قبل البدء.

جمع المعلمات المطلوبة

مطلوب ثلاث معلمات أساسية لجميع حاويات Azure الذكاء الاصطناعي. يجب أن تكون شروط ترخيص برامج Microsoft موجودة بقيمة accept. هناك حاجة أيضاً إلى مفتاح URI وAPI لنقطة النهاية.

نقطة النهاية URI

{ENDPOINT_URI} تتوفر القيمة في صفحة نظرة عامة على مدخل Microsoft Azure لمورد خدمات Azure الذكاء الاصطناعي المقابل. انتقل إلى صفحة Overview، ومرر مؤشر الماوس فوق نقطة النهاية، وستظهر أيقونة نسخ إلى الحافظة. انسخ واستخدم نقطة النهاية عند الحاجة.

Screenshot that shows gathering the endpoint URI for later use.

المفاتيح

{API_KEY} يتم استخدام القيمة لبدء الحاوية وهي متوفرة في صفحة مفاتيح مدخل Microsoft Azure لمورد خدمات Azure الذكاء الاصطناعي المقابل. انتقل إلى صفحة Keys وحدد الأيقونة Copy to clipboard.

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

هام

يتم استخدام مفاتيح الاشتراك هذه للوصول إلى واجهة برمجة تطبيقات خدمات Azure الذكاء الاصطناعي. لا تشارك مفاتيحك. قم بتخزينها بشكل آمن. على سبيل المثال، استخدم Azure Key Vault. نوصي أيضاً بإعادة إنشاء هذه المفاتيح بانتظام. مفتاح واحد فقط ضروري لإجراء استدعاء واجهة برمجة التطبيقات. عند إعادة إنشاء المفتاح الأول، يمكنك استخدام المفتاح الثاني للوصول المستمر إلى الخدمة.

متطلبات الكمبيوتر المضيف والتوصيات

المضيف هو كمبيوتر يعمل بإصدار x64 يقوم بتشغيل حاوية Docker. وقد يكون هذا أحد أجهزة الكمبيوتر الموجودة في موقعك أو خدمة استضافة Docker في Azure، مثل:

يصف الجدول التالي المواصفات الدنيا والموصى بها لتحليلات النص للحاويات الصحية. يجب أن تكون كل نواة 2.6 جيجاهيرتز على الأقل (GHz) أو أسرع. يتم أيضاً سرد العمليات المسموح بها في الثانية (TPS).

الحد الأدنى من مواصفات المضيف مواصفات المضيف الموصى بها الحد الأدنى من TPS الحد الأقصى لـ TPS
مستند/طلب 4 ذاكرة أساسية، ذاكرة 12 غيغابايت 6 أنوية، 12GB 15 30
10 مستندات/طلب 6 أنوية، ذاكرة 16GB 8 أنوية، 20GB 15 30

تتوافق ذاكرة وحدة المعالجة المركزية الأساسية والذاكرة مع إعدادات --cpus و--memory، والتي يتم استخدامها كجزء من الأمر docker run.

أحصل على صورة الحاوية باستخدام docker pull

يمكن العثور على صورة Text Analytics لحاوية الصحة في مجموعة سجل الحاوية mcr.microsoft.com . موجودة داخل المستودع azure-cognitive-services/textanalytics/ ويطلق عليها اسم healthcare. اسم نسخة الحاوية المؤهل بالكامل هو mcr.microsoft.com/azure-cognitive-services/textanalytics/healthcare

لاستخدام أحدث إصدار من الحاوية، يمكنك استخدام العلامة latest . يمكنك أيضاً العثور على قائمة كاملة من العلامات على MCR.

استخدم الأمر docker pull لتنزيل صورة الحاوية هذه من سجل حاويات Microsoft العام. يمكنك العثور على العلامات المميزة في Microsoft Container Registry

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

تلميح

يمكنك استخدام أمر docker images لسرد صور الحاوية التي تم تنزيلها. على سبيل المثال، يسرد الأمر التالي المعرف والمستودع والعلامة لكل صورة حاوية تم تنزيلها، منسقة كجدول:

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

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

قم بتشغيل الحاوية باستخدام docker run

بمجرد أن تكون الحاوية على الكمبيوتر المضيف، استخدم الأمر docker run لتشغيل الحاويات. سيستمر تشغيل الحاوية حتى توقفها.

هام

  • تستخدم أوامر عامل الإرساء في الأقسام التالية الشرطة المائلة للخلف، \، كحرف تابع للسطر. استبدل هذا أو أزله استنادًا إلى متطلبات نظام التشغيل المضيف.
  • تُحدد الخياراتEula وBillingApiKey لتشغيل الحاوية؛ وإلا فلن يتم تشغيل الحاوية. لمزيد من المعلومات، انظرالفواتير.
  • تستخدم حاويات تحليل التوجه والكشف عن اللغة الإصدار 3 من واجهة برمجة التطبيقات، وهي متاحة بشكل عام. تستخدم حاوية استخراج جملة المفتاح الإصدار 2 من واجهة برمجة التطبيقات، وهي قيد المعاينة.

هناك طرق متعددة يمكنك من خلالها تثبيت وتشغيل تحليلات النص لحاوية الحماية.

  • استخدم مدخل Microsoft Azure لإنشاء مورد Language، واستخدم Docker للحصول على الحاوية الخاصة بك.
  • استخدم Azure VM مع Docker لتشغيل الحاوية.
  • استخدم البرامج النصية PowerShell وAzure CLI التالية لأتمتة توزيع الموارد وتكوين الحاوية.

عند استخدام تحليلات النص لحاوية الحماية، فإن البيانات الواردة في طلبات واجهة برمجة التطبيقات والاستجابات الخاصة بك غير مرئية لـMicrosoft، ولا يتم استخدامها لتدريب النموذج المطبق على بياناتك.

تشغيل الحاوية على الصعيد المحلي

لتشغيل الحاوية في البيئة الخاصة بك بعد تنزيل صورة الحاوية، قم بتنفيذ الأمر التالي docker run. قم باستبدال العناصر النائبة بقيمك الخاصة:

Placeholder القيمة‬ شكل أو مثال
{API_KEY} المفتاح لمورد اللغة الخاص بك. يمكنك العثور عليه في صفحة المفتاح ونقطة النهاية الخاصة بموردك، على مدخل Microsoft Azure. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
{ENDPOINT_URI} نقطة النهاية للوصول إلى واجهة برمجة التطبيقات. يمكنك العثور عليه في صفحة المفتاح ونقطة النهاية الخاصة بموردك، على مدخل Microsoft Azure. https://<your-custom-subdomain>.cognitiveservices.azure.com
docker run --rm -it -p 5000:5000 --cpus 6 --memory 12g \
mcr.microsoft.com/azure-cognitive-services/textanalytics/healthcare:<tag-name> \
Eula=accept \
rai_terms=accept \
Billing={ENDPOINT_URI} \
ApiKey={API_KEY} 

هذا الأمر:

  • تشغيل تحليلات النص لحاوية الحماية من صورة الحاوية
  • تخصيص 6 أنوية أساسية من وحدة المعالجة المركزية و12 غيغابايت (GB) من الذاكرة
  • يعرض منفذ TCP 5000 وتخصيص TTY زائف للحاوية
  • قبول اتفاقية ترخيص المستخدم النهائي (EULA) وشروط الذكاء الاصطناعي المسؤولة (RAI)
  • يزيل الحاوية تلقائياً بعد إنهائها. صورة الحاوية لا تزال متوفرة على الكمبيوتر المضيف.

واجهة مستخدم العرض التوضيحي لتصور الإخراج

توفر الحاوية واجهات برمجة التطبيقات لنقاط نهاية توقّع الاستعلام المستند إلى REST. قدمنا أيضًا أداة تصور في الحاوية التي يمكن الوصول إليها عن طريق إلحاق /demo بنقطة نهاية الحاوية. على سبيل المثال:

http://<serverURL>:5000/demo

استخدم مثال طلب cURL أدناه لإرسال استعلام إلى الحاوية التي قمت بنشرها لاستبدال المتغير serverURL بالقيمة المناسبة.

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

تثبيت الحاوية باستخدام Azure Web App للحاويات

Azure Web App للحاويات هو مورد Azure مخصص لتشغيل الحاويات في السحابة. فهو يجلب قدرات غير مضمنة مثل التحجيم التلقائي ودعم حاويات docker وdocker compose ودعم HTTPS وأكثر من ذلك بكثير.

إشعار

باستخدام Azure Web App، ستحصل تلقائيًا على مجال في شكل <appservice_name>.azurewebsites.net

قم بتشغيل البرنامج النصي PowerShell هذا باستخدام Azure CLI لإنشاء تطبيق ويب للحاويات، باستخدام اشتراكك وصورة الحاوية عبر HTTPS. انتظر حتى يكتمل البرنامج النصي (حوالي 25-30 دقيقة) قبل إرسال الطلب الأول.

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

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

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

تثبيت الحاوية باستخدام مثيل حاوية Azure

يمكنك أيضًا استخدام مثيل حاوية Azure (ACI) لتسهيل النشر. ACI هو مورد يسمح لك بتشغيل حاويات Docker عند الطلب في بيئة Azure المدارة بلا خادم.

راجع كيفية استخدام مثيلات حاوية Azure للحصول على خطوات حول نشر مورد ACI باستخدام مدخل Microsoft Azure. يمكنك أيضًا استخدام البرنامج النصي PowerShell أدناه باستخدام Azure CLI، والذي سينشئ ACI على اشتراكك باستخدام صورة الحاوية. انتظر حتى يكتمل البرنامج النصي (حوالي 25-30 دقيقة) قبل إرسال الطلب الأول. نظرا للحد الأقصى لعدد وحدات المعالجة المركزية لكل مورد ACI، لا تحدد هذا الخيار إذا كنت تتوقع إرسال أكثر من 5 مستندات كبيرة (حوالي 5000 حرف لكل منها) لكل طلب. راجع مقالة الدعم الإقليمي لـACI للحصول على معلومات التوفر.

إشعار

لا تتضمن مثيلات حاوية Azure دعم HTTPS للمجالات المضمنة. إذا كنت بحاجة إلى HTTPS، فستحتاج إلى تكوينه يدويًا، بما في ذلك إنشاء شهادة وتسجيل مجال. يمكنك العثور على إرشادات للقيام بذلك باستخدام NGINX أدناه.

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

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

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

اتصال ACI الآمن

بشكل افتراضي، لا يتوفر أي أمان عند استخدام ACI مع واجهة برمجة تطبيقات الحاوية. ويرجع ذلك إلى أنه سيتم تشغيل الحاويات عادة كجزء من جراب محمي من الخارج بواسطة جسر شبكة. ومع ذلك، يمكنك تعديل حاوية بمكون أمامي، مع الحفاظ على خصوصية نقطة نهاية الحاوية. تستخدم الأمثلة التالية NGINX كبوابة دخول لدعم HTTPS/SSL ومصادقة شهادة العميل.

إشعار

NGINX هو خادم ووكيل HTTP مفتوح المصدر وعالي الأداء. يمكن استخدام حاوية NGINX لإنهاء اتصال TLS لحاوية واحدة. من الممكن أيضا حلول إنهاء TLS المستندة إلى دخول NGINX الأكثر تعقيدًا.

إعداد NGINX كبوابة دخول

تستخدم NGINX ملفات التكوين لتمكين الميزات في وقت التشغيل. لتمكين إنهاء TLS لخدمة أخرى، يجب تحديد شهادة SSL لإنهاء اتصال TLS وproxy_pass لتحديد عنوان للخدمة. يتم توفير عينة أدناه.

إشعار

ssl_certificate يتوقع تحديد مسار داخل نظام الملفات المحلي لحاوية NGINX. يجب أن يكون العنوان المحدد لـproxy_pass متوفرًا من داخل شبكة حاوية NGINX.

ستقوم حاوية NGINX بتحميل كافة الملفات الموجودة في _.conf_ التي تم تحميلها ضمن /etc/nginx/conf.d/ في مسار تكوين HTTP.

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

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

مثال Docker إنشاء ملف

يوضح المثال أدناه كيفية إنشاء ملف docker compose لنشر NGINX وحاويات الحماية:

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

لبدء ملف Docker compose هذا، نفذ الأمر التالي من وحدة تحكم على المستوى الجذر للملف:

docker-compose up

لمزيد من المعلومات، راجع وثائق NGINX حول إنهاء NGINX SSL.

تشغيل حاويات متعددة على نفس المضيف

إذا كنت تنوي تشغيل عدة حاويات ذات منافذ مكشوفة، فتأكد من تشغيل كل حاوية بمنفذ مكشوف مختلف. على سبيل المثال، قم بتشغيل الحاوية الأولى على المنفذ 5000 والحاوية الثانية على المنفذ 5001.

يمكن أن يكون لديك هذه الحاوية وحاوية خدمات Azure الذكاء الاصطناعي مختلفة تعمل على HOST معا. يمكنك أيضا أن يكون لديك حاويات متعددة من نفس حاوية خدمات Azure الذكاء الاصطناعي قيد التشغيل.

الاستعلام عن نقطة نهاية التوقع للحاوية

توفر الحاوية واجهات برمجة التطبيقات لنقاط نهاية توقّع الاستعلام المستند إلى REST.

استخدم المضيف http://localhost:5000، لواجهات برمجة تطبيقات الحاوية.

تحقق من أن الحاوية قيد التشغيل

هناك عدة طرق للتحقق من أن الحاوية قيد التشغيل. حدد موقع عنوان External IP والمنفذ المكشوف للحاوية المعنية، وافتح متصفح الويب المفضل لديك. استخدم عناوين URL المختلفة للطلبات التالية للتحقق من تشغيل الحاوية. أمثلة عناوين URL للطلبات المدرجة هنا هي http://localhost:5000، ولكن قد تختلف الحاوية الخاصة بك. تأكد من الاعتماد على عنوان External IP والمنفذ المكشوف للحاوية الخاصة بك.

URL للطلب الغرض
http://localhost:5000/ توفر الحاوية صفحةً رئيسيةً.
http://localhost:5000/ready تم طلبه بواسطة GET، يوفر عنوان URL هذا التحقق من أن الحاوية جاهزة لقبول استعلام مقابل النموذج. يمكن استخدام هذا الطلب لـ Kubernetes تحقيقات الاستعداد والجاهزية.
http://localhost:5000/status مطلوب أيضاً مع GET، أن يتحقق عنوان URL هذا مما إذا كان مفتاح api المستخدم لبدء الحاوية صالحاً دون التسبب في استعلام نقطة النهاية. يمكن استخدام هذا الطلب لـ Kubernetes تحقيقات الاستعداد والجاهزية.
http://localhost:5000/swagger توفر الحاوية مجموعةً كاملةً من الوثائق لنقاط النهاية وميزة Try it out. باستخدام هذه الميزة، يمكنك إدخال إعداداتك في نموذج HTML مستند إلى الويب وإجراء الاستعلام بدون الحاجة إلى كتابة أية تعليمة برمجية. بعد عودة الاستعلام، يتم توفير مثال على أمر Curl لإظهار عناوين HTTP وتنسيق الجسم المطلوب.

Container's home page

هيكلة طلب واجهة برمجة التطبيقات للحاوية

يمكنك استخدام Postman أو طلب cURL المثال أدناه لإرسال استعلام إلى الحاوية التي قمت بنشرها، واستبدال المتغير serverURL بالقيمة المناسبة. لاحظ أن إصدار واجهة برمجة التطبيقات في عنوان URL للحاوية مختلف عن واجهة برمجة التطبيقات المستضافة.

إشعار

تتوفر ميزة موارد التشغيل التفاعلي للرعاية الصحية السريعة (FHIR) في أحدث حاوية، ويتم عرضها من خلال واجهة برمجة تطبيقات REST للغة الجديدة.

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 التالي هو مثال على ملف JSON مرفق بنص POST لطلب اللغة:

example.json

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

نص استجابة الحاوية

JSON التالي هو مثال على نص استجابة اللغة من الاستدعاء المتزامن الحاوي:

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

تشغيل الحاوية مع دعم مكتبة العميل

بدءًا من إصدار 3.0.017010001-onprem-amd64 الحاوية (أو إذا كنت تستخدم الحاوية latest)، يمكنك تشغيل تحليلات النص للحاوية الصحية باستخدام مكتبة العميل. للقيام بذلك، أضف المعلمة التالية إلى الأمر docker run:

enablelro=true

بعد ذلك عند مصادقة كائن العميل، استخدم نقطة النهاية التي تعمل عليها الحاوية:

http://localhost:5000

على سبيل المثال، إذا كنت تستخدم C# يمكنك استخدام التعليمات البرمجية التالية:

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

إيقاف الحاوية

لإغلاق الحاوية، في بيئة سطر الأوامر حيث تعمل الحاوية، حدد Ctrl+C.

استكشاف الأخطاء وإصلاحها

إذا قمت بتشغيل الحاوية مع تحميل ناتج وتمكين التسجيل، فإن الحاوية تنشئ ملفات سجل تساعد في استكشاف المشكلات التي تحدث أثناء بدء الحاوية أو تشغيلها وإصلاحها.

تلميح

لمزيد من المعلومات والإرشادات حول استكشاف الأخطاء وإصلاحها، راجع حاويات Azure الذكاء الاصطناعي الأسئلة المتداولة (FAQ).

الفوترة

ترسل تحليلات النص للحاويات الصحية معلومات الفوترة إلى Azure، باستخدام مورد Language على حساب Azure الخاص بك.

تتم فوترة الاستعلامات إلى الحاوية في طبقة الأسعار لمورد Azure المستخدم للمعلمة ApiKey.

لا يتم ترخيص حاويات خدمات Azure الذكاء الاصطناعي للتشغيل دون الاتصال بنقطة نهاية القياس أو الفوترة. يجب تمكين الحاويات لتوصيل معلومات الفوترة بنقطة نهاية الفوترة في جميع الأوقات. لا ترسل حاويات خدمات Azure الذكاء الاصطناعي بيانات العملاء، مثل الصورة أو النص الذي يتم تحليله، إلى Microsoft.

قم بالاتصال بـ Azure

تحتاج الحاوية إلى قيم وسيطة للفوترة لتشغيلها. تسمح هذه القيم للحاوية بالاتصال بنقطة نهاية الفوترة. تشير الحاوية إلى الاستخدام كل 10 إلى 15 دقيقة تقريباً. إذا لم تتصل الحاوية بـ Azure خلال الفترة الزمنية المسموح بها، فسيستمر تشغيل الحاوية ولكنها لا تخدم الاستعلامات حتى تتم استعادة نقطة نهاية الفوترة. تمت محاولة الاتصال 10 مرات في نفس الفاصل الزمني من 10 إلى 15 دقيقة. إذا تعذر الاتصال بنقطة نهاية الفوترة خلال 10 محاولات، فستتوقف الحاوية عن تقديم الطلبات. راجع الأسئلة المتداولة حول حاوية خدمات azure الذكاء الاصطناعي للحصول على مثال على المعلومات المرسلة إلى Microsoft للفوترة.

وسائط الفوترة

سيبدأ الأمر docker run الحاوية عندما يتم توفير جميع الخيارات الثلاثة التالية بقيم صالحة:

خيار ‏‏الوصف
ApiKey مفتاح API لمورد خدمات Azure الذكاء الاصطناعي المستخدم لتعقب معلومات الفوترة.
يجب تعيين قيمة هذا الخيار على مفتاح واجهة برمجة التطبيقات للمورد المقدم المحدد في Billing.
Billing نقطة نهاية مورد خدمات Azure الذكاء الاصطناعي المستخدمة لتعقب معلومات الفوترة.
يجب تعيين قيمة هذا الخيار إلى عنوان URI لنقطة النهاية لمورد Azure المتاح.
Eula يشير إلى أنك قبلت ترخيص الحاوية.
يجب تعيين قيمة هذا الخيار على accept.

الملخص

في هذه المقالة، تعلمت المفاهيم وسير العمل لتنزيل Text Analytics وتثبيته وتشغيله للحاويات الصحية. في ملخص

  • يوفر Text Analytics للصحة حاوية Linux لـ Docker
  • يتم تنزيل صور الحاوية من Microsoft Container Registry (MCR).
  • يتم تشغيل صور الحاوية في Docker.
  • يمكنك استخدام واجهة برمجة تطبيقات REST أو SDK لاستدعاء العمليات في تحليلات النص للحاويات الصحية عن طريق تحديد عنوان URI المضيف للحاوية.
  • يجب عليك تحديد معلومات الفوترة عند إنشاء مثيل حاوية.

هام

لا يتم ترخيص حاويات Azure الذكاء الاصطناعي للتشغيل دون الاتصال ب Azure لقياسها. يحتاج العملاء إلى تمكين الحاويات من توصيل معلومات الفوترة مع خدمة القياس في جميع الأوقات. لا ترسل حاويات Azure الذكاء الاصطناعي بيانات العميل (مثل النص الذي يتم تحليله) إلى Microsoft.

الخطوات التالية