التشغيل السريع: الإجابة على الأسئلة المخصصة
إشعار
يستخدم Azure Open الذكاء الاصطناعي On Your Data نماذج لغة كبيرة (LLMs) لإنتاج نتائج مماثلة للإجابة على الأسئلة المخصصة. إذا كنت ترغب في توصيل مشروع Custom Question Answering موجود ب Azure Open الذكاء الاصطناعي On Your Data، يرجى الاطلاع على دليلنا.
إشعار
هل تتطلع إلى ترحيل أحمال العمل الخاصة بك من QnA Maker؟ راجع دليل الترحيل للحصول على معلومات حول مقارنات الميزات وخطوات الترحيل.
ابدأ بمكتبة العميل المخصصة للإجابة على السؤال. اتبع هذه الخطوات لتثبيت الحزمة وتجربة نموذج تعليمات البرمجة للمهام الأساسية.
يمكنك إنشاء مشروع مخصص للإجابة على الأسئلة من المحتوى الخاص بك، مثل الأسئلة المتداولة أو أدلة المنتجات. تتضمن هذه المقالة مثالا على إنشاء مشروع مخصص للإجابة على الأسئلة من دليل المنتج، للإجابة على الأسئلة.
المتطلبات الأساسية
- في حال لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانيّاً قبل البدء.
- مورد اللغة مع ميزة مخصصة للإجابة على الأسئلة ممكنة. تذكر معرف Microsoft Entra والاشتراك واسم مورد اللغة الذي حددته عند إنشاء المورد.
إنشاء أول مشروع مخصص للإجابة على الأسئلة
قم بتسجيل الدخول إلى Language Studio باستخدام بيانات اعتماد Azure الخاصة بك.
مرر لأسفل إلى قسم Answer questions وحددOpen custom question answering.
إذا لم يكن المورد الخاص بك متصلاً بعد بـ Azure Search، فحددConnect to Azure Search. سيؤدي هذا إلى فتح علامة تبويب مستعرض جديد في جزءFeatures من المورد الخاص بك في مدخل Microsoft Azure.
حددEnable custom question answering، واختر مورد Azure Search للارتباط به، ثم حددApply .
ارجع إلى علامة التبويب Language Studio. قد تحتاج إلى تحديث هذه الصفحة لتسجيل التغيير على المورد الخاص بك. حددCreate new project.
حدد الخيار I want to set the language for all projects created in this resource> حدد English> حدد Next.
أدخل اسم مشروع Sample-project، ووصفًا لـ مشروع الإجابة على سؤالي الأول، واترك الإجابة الافتراضية بإعداد لم يتم العثور على إجابة.
راجع اختياراتك وحدد Create project
من صفحة Manage sources حددAdd source> عناوين URL.
حدد Add url وأدخل القيم التالية ثم حدد Add all:
اسم URL قيمة عنوان "URL" دليل مستخدم Surface Book https://download.microsoft.com/download/7/B/1/7B10C82E-F520-4080-8516-5CF0D803EEE0/surface-book-user-guide-EN.pdf تستغرق عملية الاستخراج بضع لحظات لقراءة الوثيقة وتحديد الأسئلة والأجوبة.
بعد إضافة المصدر بنجاح، يمكنك تحرير محتويات المصدر لإضافة المزيد من مجموعات إجابات الأسئلة المخصصة.
اختبر المشروع الخاص بك
حدد الارتباط إلى المصدر الخاص بك، سيؤدي ذلك إلى فتح صفحة تحرير المشروع.
حدد Test من شريط القائمة > أدخل السؤال كيف أعمل بإعداد كتاب السطح الخاص بي؟. سيتم إنشاء إجابة بناءً على أزواج إجابات الأسئلة التي تم تحديدها تلقائيًا واستخراجها من عنوان URL المصدر الخاص بك:
إذا حددت المربعinclude short answer response، فسترى أيضًا إجابة دقيقة، إذا كانت متوفرة، إلى جانب مرور الإجابة في جزء الاختبار عندما تطرح سؤالاً.
حدد Inspect لفحص الاستجابة بمزيدٍ من التفصيل. تُستخدم نافذة الاختبار لاختبار التغييرات التي أجريتها على مشروعك قبل نشر مشروعك.
من واجهةInspect، يمكنك رؤية مستوى الثقة في أن هذه الإجابة ستجيب على السؤال وتحرير زوج من الأسئلة والإجابات المحددة مباشرةً.
نشر مشروعك
حدد أيقونة Deploy project لإدخال قائمة deploy project.
عند نشر مشروع، تنتقل محتويات مشروعك من الفهرس
test
إلى الفهرسprod
في Azure Search.حدد Deploy> ثم حدد Deploy مرة أخرى عندما يُطلب منك ذلك.
تم نشر مشروعك الآن بنجاح. يمكنك استخدام نقطة النهاية للإجابة على الأسئلة في تطبيقك المخصص للإجابة أو في الدردشة الآلية.
المتطلبات الأساسية
- الإصدار الحالي من cURL. يتم استخدام العديد من مفاتيح سطر الأوامر في عمليات التشغيل السريع، والتي تتم الإشارة إليها في وثائق cURL.
- اشتراك Azure - إنشاء اشتراك مجانًا
- تتطلب الإجابة على الأسئلة المخصصة مورد Language مع تمكين ميزة الإجابة على الأسئلة المخصصة لإنشاء مفتاح واجهة برمجة التطبيقات ونقطة النهاية.
- بعد نشر مورد اللغة، حددGo to resource. ستحتاج المفتاح ونقطة النهاية من المورد الذي تقوم بإنشائه للاتصال بواجهة برمجة التطبيقات. الصق المفتاح ونقطة النهاية في التعليمات البرمجية أدناه لاحقًا في التشغيل السريع.
- لإنشاء مورد Language باستخدام Azure CLI ، قم بتوفير الخصائص الإضافية التالية:
--api-properties qnaAzureSearchEndpointId=/subscriptions/<azure-subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Search/searchServices/<azure-search-service-name> qnaAzureSearchEndpointKey=<azure-search-service-auth-key>
- مشروع موجود للاستعلام. إذا لم تقم بإعداد مشروع، يمكنك اتباع الإرشادات الموجودة في التشغيل السريع ل Language Studio. أو أضف مشروعا يستخدم عنوان URL لدليل مستخدم Surface كمصدر بيانات.
الإعداد
إنشاء متغيرات البيئة
يجب مصادقة التطبيق الخاص بك لإرسال طلبات واجهة برمجة التطبيقات. وللإنتاج، استخدم طريقة آمنة لتخزين بيانات الاعتماد والوصول إليها. في هذا المثال، ستكتب بيانات الاعتماد الخاصة بك إلى متغيرات البيئة على الجهاز المحلي الذي يقوم بتشغيل التطبيق.
تلميح
لا تقم بتضمين المفتاح مباشرة في التعليمات البرمجية الخاصة بك، ولا تنشره بشكل عام. راجع مقالة أمان خدمات Azure الذكاء الاصطناعي لمزيد من خيارات المصادقة مثل Azure Key Vault.
لتعيين متغير البيئة لمفتاح مورد Language، افتح نافذة وحدة تحكم، واتبع الإرشادات الخاصة بنظام التشغيل وبيئة التطوير.
- لتعيين
LANGUAGE_KEY
متغير البيئة، استبدلyour-key
بأحد مفاتيح المورد الخاص بك. - لتعيين
LANGUAGE_ENDPOINT
متغير البيئة، استبدلyour-endpoint
بنقطة النهاية للمورد الخاص بك.
setx LANGUAGE_KEY your-key
setx LANGUAGE_ENDPOINT your-endpoint
إشعار
إذا كنت بحاجة فقط إلى الوصول إلى متغيرات البيئة في وحدة التحكم الحالية قيد التشغيل، يمكنك تعيين متغير البيئة باستخدام set
بدلا من setx
.
بعد إضافة متغيرات البيئة، قد تحتاج إلى إعادة تشغيل أي برامج قيد التشغيل ستحتاج إلى قراءة متغيرات البيئة، بما في ذلك نافذة وحدة التحكم. على سبيل المثال، إذا كنت تستخدم Visual Studio كمحرر، فأعد تشغيل Visual Studio قبل تشغيل المثال.
الاستعلام عن مشروع
إنشاء إجابة من مشروع
للاستعلام عن مشروع مخصص للإجابة على الأسئلة باستخدام واجهات برمجة تطبيقات REST وcURL، تحتاج إلى المعلومات التالية:
اسم المتغير | القيمة |
---|---|
Endpoint |
يمكن العثور على هذه القيمة في قسم المفاتيح ونقطة النهاية عند فحص المورد من مدخل Microsoft Azure. بدلا من ذلك، يمكنك العثور على القيمة في سؤال Language Studio>للإجابة على>نشر عنوان URL للتنبؤ للمشروع.> مثال على نقطة النهاية هو: https://southcentralus.api.cognitive.microsoft.com/ |
API-Key |
يمكن العثور على هذه القيمة في قسم المفاتيح ونقطة النهاية عند فحص المورد من مدخل Microsoft Azure. يمكنك استخدام إما Key1 أو Key2. دائمًا ما يكون لديك مفتاحان صالحان دائمًا لإدارة المفتاح الآمن مع عدم وجود وقت تعطل. بدلا من ذلك، يمكنك العثور على القيمة في سؤال Language Studio>للإجابة على>نشر عنوان URL للتنبؤ للمشروع.> قيمة المفتاح هي جزء من نموذج الطلب. |
Project |
اسم مشروع الإجابة على سؤالك المخصص. |
Deployment |
هناك قيمتان محتملتان: test و.production production يعتمد على قيامك بنشر مشروعك من مشروع إجابة سؤال Language Studio>على>نشر المشروع. |
يتم تنفيذ الأمر cURL من BASH shell. قم بتحرير هذا الأمر مع اسم موردك ومفتاح المورد وقيم JSON وحجم JSON.
curl -X POST -H "Ocp-Apim-Subscription-Key: $LANGUAGE_KEY" -H "Content-Type: application/json" -d '{
"question": "How much battery life do I have left?"
}' '$LANGUAGE_ENDPOINT.api.cognitive.microsoft.com/language/:query-knowledgebases?projectName={YOUR_PROJECT_NAME}&api-version=2021-10-01&deploymentName={DEPLOYMENT_NAME}'
عند تشغيل التعليمات البرمجية أعلاه، إذا كنت تستخدم مصدر البيانات من المتطلبات الأساسية، فستحصل على إجابة تبدو كما يلي:
{
"answers": [
{
"questions": [
"Check battery level"
],
"answer": "If you want to see how much battery you have left, go to **Start **> **Settings **> **Devices **> **Bluetooth & other devices **, then find your pen. The current battery level will appear under the battery icon.",
"confidenceScore": 0.9185,
"id": 101,
"source": "https://support.microsoft.com/en-us/surface/how-to-use-your-surface-pen-8a403519-cd1f-15b2-c9df-faa5aa924e98",
"metadata": {},
"dialog": {
"isContextOnly": false,
"prompts": []
}
}
]
}
ترجع confidenceScore
قيمة بين 0 و1. يمكنك التفكير في هذا مثل النسبة المئوية والضرب في 100 بحيث تعني درجة الثقة 0.9185 أن الإجابة على الأسئلة المخصصة هي 91.85٪ واثقة من أن هذه هي الإجابة الصحيحة على السؤال بناء على المشروع.
إذا كنت ترغب في استبعاد إجابات حيث تنخفض درجة الثقة إلى أقل من حد معين، يمكنك إضافة المعلمة confidenceScoreThreshold
.
curl -X POST -H "Ocp-Apim-Subscription-Key: $LANGUAGE_KEY" -H "Content-Type: application/json" -d '{
"question": "How much battery life do I have left?",
"confidenceScoreThreshold": "0.95",
}' '$LANGUAGE_ENDPOINT.api.cognitive.microsoft.com//language/:query-knowledgebases?projectName=Sample-project&api-version=2021-10-01&deploymentName={DEPLOYMENT_NAME}'
نظرًا لأننا نعلم من تنفيذنا السابق للتعليمات البرمجية أن درجة الثقة لدينا هي: .9185
سيؤدي تعيين الحد إلى .95
إلى إرجاع الإجابة الافتراضية.
{
"answers": [
{
"questions": [],
"answer": "No good match found in KB",
"confidenceScore": 0.0,
"id": -1,
"metadata": {}
}
]
}
نص الاستعلام بدون مشروع
يمكنك أيضا استخدام الإجابة على الأسئلة المخصصة دون مشروع مع السؤال المخصص الذي تم إنشاؤه مسبقا للإجابة على REST API، والذي يتم استدعاؤه عبر query-text
. في هذه الحالة، يمكنك تقديم إجابة على الأسئلة مع كل من السؤال والسجلات النصية المقترنة التي ترغب في البحث عن إجابة في وقت إرسال الطلب.
على سبيل المثال، تحتاج فقط إلى تعديل المتغيرات لـAPI KEY
وENDPOINT
.
curl -X POST -H "Ocp-Apim-Subscription-Key: $LANGUAGE_KEY" -H "Content-Type: application/json" -d '{
"question":"How long does it takes to charge a surface?",
"records":[
{"id":"doc1","text":"Power and charging.It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. It can take longer if you\u0027re using your Surface for power-intensive activities like gaming or video streaming while you\u0027re charging it"},
{"id":"doc2","text":"You can use the USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. The USB port on the power supply is only for charging, not for data transfer. If you want to use a USB device, plug it into the USB port on your Surface."}],
"language":"en",
"stringIndexType":"Utf16CodeUnit"
}' '$LANGUAGE_ENDPOINT.api.cognitive.microsoft.com/language/:query-text?&api-version=2021-10-01'
سيرجع هذا المثال نتيجة:
{
"answers": [
{
"answer": "Power and charging.It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it",
"confidenceScore": 0.9118788838386536,
"id": "doc1",
"answerSpan": {
"text": "two to four hours",
"confidenceScore": 0.9850527,
"offset": 27,
"length": 18
},
"offset": 0,
"length": 243
},
{
"answer": "It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it",
"confidenceScore": 0.052793052047491074,
"id": "doc1",
"answerSpan": {
"text": "longer",
"confidenceScore": 0.6694634,
"offset": 11,
"length": 7
},
"offset": 109,
"length": 134
},
{
"answer": "You can use the USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. The USB port on the power supply is only for charging, not for data transfer. If you want to use a USB device, plug it into the USB port on your Surface.",
"confidenceScore": 0.017600709572434425,
"id": "doc2",
"answerSpan": {
"text": "USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. The USB port on the power supply is only for charging",
"confidenceScore": 0.1544854,
"offset": 15,
"length": 165
},
"offset": 0,
"length": 280
}
]
}
استخدم هذا التشغيل السريع لمكتبة عميل الإجابة على الأسئلة المخصصة ل .NET من أجل:
- احصل على إجابة من مشروع.
- احصل على إجابة من نص أساسي ترسله مع سؤالك.
- احصل على درجة الثقة للإجابة على سؤالك.
الوثائق | المرجعية الحزمة (NuGet) | عينات إضافية | التعليمات البرمجية لمصدر المكتبة
المتطلبات الأساسية
- اشتراك Azure - إنشاء اشتراك مجانًا
- إصدار Visual Studio IDE أو الإصدار الحالي من .NET Core.
- تتطلب الإجابة على الأسئلة المخصصة مورد Language مع تمكين ميزة الإجابة على الأسئلة المخصصة لإنشاء مفتاح واجهة برمجة التطبيقات ونقطة النهاية.
- بعد نشر مورد اللغة، حددGo to resource. ستحتاج المفتاح ونقطة النهاية من المورد الذي تقوم بإنشائه للاتصال بواجهة برمجة التطبيقات. الصق المفتاح ونقطة النهاية في التعليمات البرمجية أدناه لاحقًا في التشغيل السريع.
- لإنشاء مورد Language باستخدام Azure CLI ، قم بتوفير الخصائص الإضافية التالية:
--api-properties qnaAzureSearchEndpointId=/subscriptions/<azure-subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Search/searchServices/<azure-search-service-name> qnaAzureSearchEndpointKey=<azure-search-service-auth-key>
- مشروع موجود للاستعلام. إذا لم تقم بإعداد مشروع، يمكنك اتباع الإرشادات الواردة في التشغيل السريع ل Language Studio. أو أضف مشروعا يستخدم عنوان URL لدليل مستخدم Surface كمصدر بيانات.
الإعداد
إنشاء متغيرات البيئة
يجب مصادقة التطبيق الخاص بك لإرسال طلبات واجهة برمجة التطبيقات. وللإنتاج، استخدم طريقة آمنة لتخزين بيانات الاعتماد والوصول إليها. في هذا المثال، ستكتب بيانات الاعتماد الخاصة بك إلى متغيرات البيئة على الجهاز المحلي الذي يقوم بتشغيل التطبيق.
تلميح
لا تقم بتضمين المفتاح مباشرة في التعليمات البرمجية الخاصة بك، ولا تنشره بشكل عام. راجع مقالة أمان خدمات Azure الذكاء الاصطناعي لمزيد من خيارات المصادقة مثل Azure Key Vault.
لتعيين متغير البيئة لمفتاح مورد Language، افتح نافذة وحدة تحكم، واتبع الإرشادات الخاصة بنظام التشغيل وبيئة التطوير.
- لتعيين
LANGUAGE_KEY
متغير البيئة، استبدلyour-key
بأحد مفاتيح المورد الخاص بك. - لتعيين
LANGUAGE_ENDPOINT
متغير البيئة، استبدلyour-endpoint
بنقطة النهاية للمورد الخاص بك.
setx LANGUAGE_KEY your-key
setx LANGUAGE_ENDPOINT your-endpoint
إشعار
إذا كنت بحاجة فقط إلى الوصول إلى متغيرات البيئة في وحدة التحكم الحالية قيد التشغيل، يمكنك تعيين متغير البيئة باستخدام set
بدلا من setx
.
بعد إضافة متغيرات البيئة، قد تحتاج إلى إعادة تشغيل أي برامج قيد التشغيل ستحتاج إلى قراءة متغيرات البيئة، بما في ذلك نافذة وحدة التحكم. على سبيل المثال، إذا كنت تستخدم Visual Studio كمحرر، فأعد تشغيل Visual Studio قبل تشغيل المثال.
CLI
في نافذة وحدة تحكم (مثل cmd أو PowerShell أو Bash)، استخدم الأمر dotnet new
لإنشاء تطبيق وحدة تحكم جديد بالاسم question-answering-quickstart
. ينشئ هذا الأمر مشروع مرحبًا بالعالم «Hello World» بلغة C# بسيطًا مع ملف مصدر واحد: program.cs.
dotnet new console -n question-answering-quickstart
غيّر دليلك إلى مجلد التطبيق المنشأ حديثاً. يمكنك إنشاء التطبيق باستخدام:
dotnet build
يجب ألا يحتوي إخراج البناء على تحذيرات أو أخطاء.
...
Build succeeded.
0 Warning(s)
0 Error(s)
...
ضمن دليل التطبيق، قم بتثبيت مكتبة العميل المخصصة للإجابة على السؤال المخصص لـ .NET باستخدام الأمر التالي:
dotnet add package Azure.AI.Language.QuestionAnswering
الاستعلام عن مشروع
إنشاء إجابة من مشروع
سيسمح لك المثال أدناه بالاستعلام عن مشروع باستخدام GetAnswers
للحصول على إجابة على سؤالك.
ستحتاج إلى تحديث التعليمات البرمجية أدناه وتوفير القيم الخاصة بك للمتغيرات التالية.
اسم المتغير | القيمة |
---|---|
endpoint |
يمكن العثور على هذه القيمة في قسم المفاتيح ونقطة النهاية عند فحص المورد من مدخل Microsoft Azure. بدلا من ذلك، يمكنك العثور على القيمة في سؤال Language Studio>للإجابة على>نشر عنوان URL للتنبؤ للمشروع.> مثال على نقطة النهاية هو: https://southcentralus.api.cognitive.microsoft.com/ |
credential |
يمكن العثور على هذه القيمة في قسم المفاتيح ونقطة النهاية عند فحص المورد من مدخل Microsoft Azure. يمكنك استخدام إما Key1 أو Key2. دائمًا ما يكون لديك مفتاحان صالحان دائمًا لإدارة المفتاح الآمن مع عدم وجود وقت تعطل. بدلا من ذلك، يمكنك العثور على القيمة في سؤال Language Studio>للإجابة على>نشر عنوان URL للتنبؤ للمشروع.> قيمة المفتاح هي جزء من نموذج الطلب. |
projectName |
اسم مشروع الإجابة على سؤالك المخصص. |
deploymentName |
هناك قيمتان محتملتان: test و.production production يعتمد على قيامك بنشر مشروعك من مشروع إجابة سؤال Language Studio>على>نشر المشروع. |
هام
تذكر إزالة المفتاح من التعليمة البرمجية عند الانتهاء، وعدم توزيعها علناً. للإنتاج، استخدم طريقة آمنة لتخزين بيانات الاعتماد والوصول إليها مثل Azure Key Vault. راجع مقالة أمان خدمات Azure الذكاء الاصطناعي للحصول على مزيد من المعلومات.
من دليل المشروع، افتح ملف program.cs واستبدل بالتعليمات البرمجية التالية:
using Azure;
using Azure.AI.Language.QuestionAnswering;
using System;
namespace question_answering
{
class Program
{
static void Main(string[] args)
{
// This example requires environment variables named "LANGUAGE_KEY" and "LANGUAGE_ENDPOINT"
Uri endpoint = new Uri("LANGUAGE_ENDPOINT");
AzureKeyCredential credential = new AzureKeyCredential("LANGUAGE_KEY");
string projectName = "{YOUR-PROJECT-NAME}";
string deploymentName = "production";
string question = "How long should my Surface battery last?";
QuestionAnsweringClient client = new QuestionAnsweringClient(endpoint, credential);
QuestionAnsweringProject project = new QuestionAnsweringProject(projectName, deploymentName);
Response<AnswersResult> response = client.GetAnswers(question, project);
foreach (KnowledgeBaseAnswer answer in response.Value.Answers)
{
Console.WriteLine($"Q:{question}");
Console.WriteLine($"A:{answer.Answer}");
}
}
}
}
في حين أننا نعمل على ترميز المتغيرات لمثالنا. للإنتاج، ضَع في اعتبارك استخدام طريقة آمنة لتخزين بيانات الاعتماد والوصول إليها. على سبيل المثال، توفر خزانة مفتاح Azure تخزينًا آمنًا للمفتاح.
بعد تحديث Program.cs
باستخدام التعليمات البرمجية أعلاه واستبدالها في قيم المتغير الصحيحة. شغل التطبيق من دليل تطبيقك باستخدام الأمر dotnet run
.
dotnet run
ستبدو الاستجابة كما يلي:
Q: How much battery life do I have left?
A: If you want to see how much battery you have left, go to **Start **> **Settings **> **Devices **> **Bluetooth & other devices **, then find your pen. The current battery level will appear under the battery icon.
للحصول على معلومات حول مدى الثقة في الإجابة على الأسئلة المخصصة هي أن هذه هي الاستجابة الصحيحة، أضف عبارة طباعة إضافية أسفل عبارات الطباعة الموجودة:
Console.WriteLine($"Q:{question}");
Console.WriteLine($"A:{answer.Answer}");
Console.WriteLine($"({answer.Confidence})"); // add this line
إذا قمت بتنفيذ dotnet run
مرة أخرى، فستتلقى الآن نتيجة مع درجة ثقة:
Q:How much battery life do I have left?
A:If you want to see how much battery you have left, go to **Start **> **Settings **> **Devices **> **Bluetooth & other devices **, then find your pen. The current battery level will appear under the battery icon.
(0.9185)
ترجع نقاط الثقة قيمة بين 0 و1. يمكنك التفكير في هذا مثل النسبة المئوية والضرب في 100 بحيث تعني درجة الثقة 0.9185 أن الإجابة على الأسئلة المخصصة هي 91.85٪ واثقة من أن هذه هي الإجابة الصحيحة على السؤال بناء على المشروع.
إذا كنت ترغب في استبعاد إجابات حيث تنخفض درجة الثقة إلى أقل من حد معين، يمكنك استخدام AnswerOptions
لإضافة الخاصية ConfidenceScoreThreshold
.
QuestionAnsweringClient client = new QuestionAnsweringClient(endpoint, credential);
QuestionAnsweringProject project = new QuestionAnsweringProject(projectName, deploymentName);
AnswersOptions options = new AnswersOptions(); //Add this line
options.ConfidenceThreshold = 0.95; //Add this line
Response<AnswersResult> response = client.GetAnswers(question, project, options); //Add the additional options parameter
نظرًا لأننا نعلم من تنفيذنا السابق للتعليمات البرمجية أن درجة الثقة لدينا هي: .9185
سيؤدي تعيين الحد إلى .95
إلى إرجاع الإجابة الافتراضية.
Q:How much battery life do I have left?
A:No good match found in KB
(0)
نص الاستعلام بدون مشروع
يمكنك أيضا استخدام الإجابة على الأسئلة المخصصة دون مشروع باستخدام GetAnswersFromText
. في هذه الحالة، يمكنك توفير إجابة مخصصة على الأسئلة مع كل من السؤال والسجلات النصية المقترنة التي ترغب في البحث عن إجابة في وقت إرسال الطلب.
على سبيل المثال، تحتاج فقط إلى تعديل المتغيرات لـendpoint
وcredential
.
using Azure;
using Azure.AI.Language.QuestionAnswering;
using System;
using System.Collections.Generic;
namespace questionansweringcsharp
{
class Program
{
static void Main(string[] args)
{
Uri endpoint = new Uri("https://{YOUR-ENDPOINT}.api.cognitive.microsoft.com/");
AzureKeyCredential credential = new AzureKeyCredential("YOUR-LANGUAGE-RESOURCE-KEY");
QuestionAnsweringClient client = new QuestionAnsweringClient(endpoint, credential);
IEnumerable<TextDocument> records = new[]
{
new TextDocument("doc1", "Power and charging.It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. " +
"It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it"),
new TextDocument("doc2", "You can use the USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. " +
"The USB port on the power supply is only for charging, not for data transfer. If you want to use a USB device, plug it into the USB port on your Surface."),
};
AnswersFromTextOptions options = new AnswersFromTextOptions("How long does it takes to charge a surface?", records);
Response<AnswersFromTextResult> response = client.GetAnswersFromText(options);
foreach (TextAnswer answer in response.Value.Answers)
{
if (answer.Confidence > .9)
{
string BestAnswer = response.Value.Answers[0].Answer;
Console.WriteLine($"Q:{options.Question}");
Console.WriteLine($"A:{BestAnswer}");
Console.WriteLine($"Confidence Score: ({response.Value.Answers[0].Confidence:P2})"); //:P2 converts the result to a percentage with 2 decimals of accuracy.
break;
}
else
{
Console.WriteLine($"Q:{options.Question}");
Console.WriteLine("No answers met the requested confidence score.");
break;
}
}
}
}
}
لتشغيل التعليمات البرمجية أعلاه، استبدل Program.cs
بمحتويات كتلة البرنامج النصي أعلاه وقم بتعديل المتغيرين endpoint
وcredential
لتتوافق مع مورد اللغة الذي أنشأته كجزء من المتطلبات الأساسية.
في هذه الحالة، نقوم بالتكرار من خلال جميع الاستجابات ونعيد الاستجابة فقط بأعلى درجة ثقة أكبر من 0.9. لفهم المزيد حول الخيارات المتوفرة مع GetAnswersFromText
.
استخدم هذا التشغيل السريع لمكتبة عميل الإجابة على الأسئلة المخصصة ل Python من أجل:
- احصل على إجابة من مشروع.
- احصل على إجابة من نص أساسي ترسله مع سؤالك.
- احصل على درجة الثقة للإجابة على سؤالك.
الوثائق | المرجعية الحزمة (PyPI) | عينات إضافية | التعليمات البرمجية لمصدر المكتبة
المتطلبات الأساسية
- اشتراك Azure - إنشاء اشتراك مجانًا
- Python 3.x
- تتطلب الإجابة على الأسئلة المخصصة مورد Language مع تمكين ميزة الإجابة على الأسئلة المخصصة لإنشاء مفتاح واجهة برمجة التطبيقات ونقطة النهاية.
- بعد نشر مورد اللغة، حددGo to resource. تحتاج إلى المفتاح ونقطة النهاية من المورد الذي تقوم بإنشائه للاتصال بواجهة برمجة التطبيقات. الصق المفتاح ونقطة النهاية في التعليمات البرمجية أدناه لاحقًا في التشغيل السريع.
- لإنشاء مورد Language باستخدام Azure CLI ، قم بتوفير الخصائص الأخرى التالية:
--api-properties qnaAzureSearchEndpointId=/subscriptions/<azure-subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Search/searchServices/<azure-search-service-name> qnaAzureSearchEndpointKey=<azure-search-service-auth-key>
- مشروع موجود للاستعلام. إذا لم تقم بإعداد مشروع، يمكنك اتباع الإرشادات الواردة في التشغيل السريع ل Language Studio. أو أضف مشروعا يستخدم عنوان URL لدليل مستخدم Surface كمصدر بيانات.
الإعداد
تثبيت مكتبة العميل
بعد تثبيت Python، يمكنك تثبيت مكتبة العميل عن طريق:
pip install azure-ai-language-questionanswering
الاستعلام عن مشروع
إنشاء إجابة من مشروع
سيسمح لك المثال أدناه بالاستعلام عن مشروع باستخدام get_answers للحصول على إجابة على سؤالك. يمكنك نسخ هذه التعليمة البرمجية إلى ملف .py مخصص أو في خلية في Jupyter Notebook/Lab.
تحتاج إلى تحديث التعليمات البرمجية أدناه وتوفير القيم الخاصة بك للمتغيرات التالية.
اسم المتغير | القيمة |
---|---|
endpoint |
يمكن العثور على هذه القيمة في قسم المفاتيح ونقطة النهاية عند فحص المورد من مدخل Microsoft Azure. بدلا من ذلك، يمكنك العثور على القيمة في سؤال Language Studio>للإجابة على>نشر عنوان URL للتنبؤ للمشروع.> مثال على نقطة النهاية هو: https://southcentralus.api.cognitive.microsoft.com/ |
credential |
يمكن العثور على هذه القيمة في قسم المفاتيح ونقطة النهاية عند فحص المورد من مدخل Microsoft Azure. يمكنك استخدام إما Key1 أو Key2. دائمًا ما يكون لديك مفتاحان صالحان دائمًا لإدارة المفتاح الآمن مع عدم وجود وقت تعطل. بدلا من ذلك، يمكنك العثور على القيمة في سؤال Language Studio>للإجابة على>نشر عنوان URL للتنبؤ للمشروع.> قيمة المفتاح هي جزء من نموذج الطلب. |
knowledge_base_project |
اسم مشروع الإجابة على سؤالك. |
deployment |
هناك قيمتان محتملتان: test و.production production يعتمد على قيامك بنشر مشروعك من مشروع إجابة سؤال Language Studio>على>نشر المشروع. |
هام
تذكر إزالة المفتاح من التعليمة البرمجية عند الانتهاء، وعدم توزيعها علناً. للإنتاج، استخدم طريقة آمنة لتخزين بيانات الاعتماد والوصول إليها مثل Azure Key Vault. لمزيد من المعلومات، راجع مقالة أمان خدمات Azure الذكاء الاصطناعي.
from azure.core.credentials import AzureKeyCredential
from azure.ai.language.questionanswering import QuestionAnsweringClient
endpoint = "https://{YOUR-ENDPOINT}.api.cognitive.microsoft.com/"
credential = AzureKeyCredential("{YOUR-LANGUAGE-RESOURCE-KEY}")
knowledge_base_project = "{YOUR-PROJECT-NAME}"
deployment = "production"
def main():
client = QuestionAnsweringClient(endpoint, credential)
with client:
question="How much battery life do I have left?"
output = client.get_answers(
question = question,
project_name=knowledge_base_project,
deployment_name=deployment
)
print("Q: {}".format(question))
print("A: {}".format(output.answers[0].answer))
if __name__ == '__main__':
main()
في حين أننا نعمل على ترميز المتغيرات لمثالنا. للإنتاج، ضَع في اعتبارك استخدام طريقة آمنة لتخزين بيانات الاعتماد والوصول إليها. على سبيل المثال، توفر خزانة مفتاح Azure تخزينًا آمنًا للمفتاح.
عند تشغيل التعليمات البرمجية أعلاه، إذا كنت تستخدم مصدر البيانات من المتطلبات الأساسية، فستحصل على إجابة تبدو كما يلي:
Q: How much battery life do I have left?
A: If you want to see how much battery you have left, go to **Start **> **Settings **> **Devices **> **Bluetooth & other devices **, then find your pen. The current battery level will appear under the battery icon.
للحصول على معلومات حول مدى ثقة الإجابة على الأسئلة المخصصة هي أن هذه هي الاستجابة الصحيحة، أضف عبارة طباعة أخرى أسفل عبارات الطباعة الموجودة:
print("Q: {}".format(question))
print("A: {}".format(output.answers[0].answer))
print("Confidence Score: {}".format(output.answers[0].confidence)) # add this line
ستتلقى الآن نتيجة مع درجة ثقة:
Q: How much battery life do I have left?
A: If you want to see how much battery you have left, go to **Start **> **Settings **> **Devices **> **Bluetooth & other devices **, then find your pen. The current battery level will appear under the battery icon.
Confidence Score: 0.9185
ترجع نقاط الثقة قيمة بين 0 و1. يمكنك التفكير في هذا مثل النسبة المئوية والضرب في 100 بحيث تعني درجة الثقة 0.9185 أن الإجابة على الأسئلة المخصصة هي 91.85٪ واثقة من أن هذه هي الإجابة الصحيحة على السؤال بناء على المشروع.
إذا كنت ترغب في استبعاد إجابات حيث تقع درجة الثقة دون حد معين، يمكنك تعديل AnswerOptions لإضافة المعلمة confidence_threshold
.
output = client.get_answers(
confidence_threshold = 0.95, #add this line
question = question,
project_name=knowledge_base_project,
deployment_name=deployment
)
نظرا لأننا نعلم من تنفيذنا السابق للتعليمات البرمجية أن درجة الثقة لدينا هي: .9185
تعيين الحد إلى .95
النتائج في الإجابة الافتراضية التي يتم إرجاعها.
Q: How much battery life do I have left?
A: No good match found in KB
Confidence Score: 0.0
نص الاستعلام بدون مشروع
يمكنك أيضا استخدام الإجابة على الأسئلة المخصصة دون مشروع مع get_answers_from_text. في هذه الحالة، يمكنك توفير إجابة مخصصة على الأسئلة مع كل من السؤال والسجلات النصية المقترنة التي ترغب في البحث عن إجابة في وقت إرسال الطلب.
على سبيل المثال، تحتاج فقط إلى تعديل المتغيرات لـendpoint
وcredential
.
import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.language.questionanswering import QuestionAnsweringClient
from azure.ai.language.questionanswering import models as qna
endpoint = "https://{YOUR-ENDPOINT}.api.cognitive.microsoft.com/"
credential = AzureKeyCredential("YOUR-LANGUAGE-RESOURCE-KEY")
def main():
client = QuestionAnsweringClient(endpoint, credential)
with client:
question="How long does it takes to charge a surface?"
input = qna.AnswersFromTextOptions(
question=question,
text_documents=[
"Power and charging. It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. " +
"It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it.",
"You can use the USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. " +
"The USB port on the power supply is only for charging, not for data transfer. If you want to use a USB device, plug it into the USB port on your Surface.",
]
)
output = client.get_answers_from_text(input)
best_answer = [a for a in output.answers if a.confidence > 0.9][0]
print(u"Q: {}".format(input.question))
print(u"A: {}".format(best_answer.answer))
print("Confidence Score: {}".format(output.answers[0].confidence))
if __name__ == '__main__':
main()
يمكنك نسخ هذه التعليمة البرمجية إلى ملف .py مخصص أو إلى خلية جديدة في Jupyter Notebook/Lab. يرجع هذا المثال نتيجة:
Q: How long does it takes to charge surface?
A: Power and charging. It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it.
Confidence Score: 0.9254655838012695
في هذه الحالة، نقوم بالتكرار من خلال جميع الاستجابات ونعيد الاستجابة فقط بأعلى درجة ثقة أكبر من 0.9. لفهم المزيد حول الخيارات المتوفرة مع get_answers_from_text، راجع معلمات AnswersFromTextOptions.
تنظيف الموارد
إذا كنت ترغب في تنظيف اشتراك خدمات Azure الذكاء الاصطناعي وإزالته، يمكنك حذف المورد أو مجموعة الموارد. يؤدي حذف مجموعة الموارد إلى حذف أية موارد أخرى مقترنة بها أيضًا.
استكشاف واجهة برمجة تطبيقات REST
لمعرفة المزيد حول أتمتة مسار الإجابة على الأسئلة المخصصة، راجع وثائق واجهة برمجة تطبيقات REST. تتوفر وظيفة التأليف حاليًا فقط عبر واجهة برمجة تطبيقات REST: