إضافة مهارة مخصصة إلى خط أنابيب إثراء البحث المعرفي في Azure
يمكن أن يتضمن خط أنابيب الإثراء كلا من المهارات المضمنة والمهاراتالمخصصة التي تقوم بإنشائها ونشرها شخصيا. يتم تنفيذ التعليمات البرمجية المخصصة خارجيا لخدمة البحث (على سبيل المثال، كدالة Azure)، ولكنها تقبل المدخلات وترسل المخرجات إلى مجموعة المهارات تماما مثل أي مهارة أخرى.
قد تبدو المهارات المخصصة معقدة ولكنها يمكن أن تكون بسيطة ومباشرة من حيث التنفيذ. إذا كانت لديك حزم موجودة توفر نماذج مطابقة الأنماط أو التصنيف، فيمكن تمرير المحتوى الذي تستخرجه من النقاط إلى هذه النماذج لمعالجته. نظرا لأن الذكاء الاصطناعي الإثراء يستند إلى Azure، فيجب أن يكون نموذجك على Azure أيضا. تتضمن بعض منهجيات الاستضافة الشائعة استخدام وظائف Azure أو الحاويات.
إذا كنت تقوم بإنشاء مهارة مخصصة، فستوضح هذه المقالة الواجهة التي ستستخدمها لدمج المهارة في خط الأنابيب. الشرط الأساسي هو القدرة على قبول المدخلات وإصدار المخرجات بطرق قابلة للاستهلاك ضمن مجموعة المهارات ككل. على هذا النحو ، ينصب تركيز هذه المقالة على تنسيقات الإدخال والإخراج التي يتطلبها خط أنابيب التخصيب.
فوائد المهارات المخصصة
يمنحك بناء مهارة مخصصة طريقة لإدراج تحويلات فريدة من نوعها للمحتوى الخاص بك. يتم تنفيذ مهارة مخصصة بشكل مستقل ، مع تطبيق أي خطوة إثراء تحتاجها. على سبيل المثال، يمكنك إنشاء نماذج تصنيف مخصصة للتمييز بين العقود والمستندات التجارية والمالية، أو إضافة مهارة التعرف على الكلام للوصول إلى ملفات صوتية أعمق للمحتوى ذي الصلة. للحصول على مثال خطوة بخطوة، راجع مثال: إنشاء مهارة مخصصة الذكاء الاصطناعي الإثراء.
تعيين الفاصل الزمني لنقطة النهاية والمهلة
يتم تحديد واجهة مهارة مخصصة من خلال مهارة واجهة برمجة تطبيقات الويب المخصصة.
"@odata.type": "#Microsoft.Skills.Custom.WebApiSkill",
"description": "This skill has a 230 second timeout",
"uri": "https://[your custom skill uri goes here]",
"authResourceId": "[for managed identity connections, your app's client ID goes here]",
"timeout": "PT230S",
عنوان URI هو نقطة نهاية HTTPS لوظيفتك أو تطبيقك. عند تعيين عنوان URI، تأكد من أن عنوان URI آمن (HTTPS). إذا تمت استضافة التعليمات البرمجية الخاصة بك في تطبيق دالة Azure، فيجب أن يتضمن عنوان URI مفتاح واجهة برمجة تطبيقات في الرأس أو كمعلمة URI لتفويض الطلب.
إذا كانت وظيفتك أو تطبيقك يستخدم بدلا من ذلك هويات Azure المدارة وأدوار Azure للمصادقة والتفويض، فيمكن أن تتضمن المهارة المخصصة رمزا مميزا للمصادقة عند الطلب. وتصف النقاط التالية متطلبات هذا النهج:
يجب تكوين خدمة البحث، التي ترسل الطلب نيابة عن المفهرس، لاستخدام هوية مدارة (إما النظام أو المعينة من قبل المستخدم) بحيث يمكن مصادقة المتصل بواسطة Azure Active Directory.
يجب تكوين الوظيفة أو التطبيق الخاص بك ل Azure Active Directory.
يجب أن يتضمن تعريف المهارة المخصص خاصية "authResourceId". تأخذ هذه الخاصية معرف تطبيق (عميل)، بتنسيق مدعوم:
api://<appId>.
بشكل افتراضي، ستنتهي مهلة الاتصال بنقطة النهاية إذا لم يتم إرجاع استجابة خلال نافذة مدتها 30 ثانية. خط أنابيب الفهرسة متزامن وستنتج الفهرسة خطأ في المهلة إذا لم يتم تلقي استجابة في هذا الإطار الزمني. يمكنك زيادة الفاصل الزمني إلى قيمة قصوى تبلغ 230 ثانية عن طريق تعيين معلمة المهلة:
تنسيق مدخلات واجهة برمجة تطبيقات الويب
يجب أن تقبل واجهة برمجة تطبيقات الويب مجموعة من السجلات المراد معالجتها. يجب أن يحتوي كل سجل على حقيبة خصائص تمثل الإدخال المقدم إلى واجهة برمجة تطبيقات الويب.
لنفترض أنك تريد إنشاء أداة ثراء بسيطة تحدد التاريخ الأول المذكور في نص العقد. في هذا المثال، تقبل المهارة المخصصة إدخال واحد "contractText" كنص العقد. تحتوي المهارة أيضا على ناتج واحد ، وهو تاريخ العقد. لجعل الثراء أكثر إثارة للاهتمام ، قم بإعادة هذا "العقدDate" في شكل نوع معقد متعدد الأجزاء.
يجب أن تكون واجهة برمجة تطبيقات الويب جاهزة لتلقي مجموعة من سجلات الإدخال. يمثل كل عضو في صفيف "القيم" إدخال سجل معين. يجب أن يحتوي كل سجل على العناصر التالية:
عضو "recordId" هو المعرف الفريد لسجل معين. عندما يقوم الغني الخاص بك بإرجاع النتائج ، يجب عليه توفير "recordId" هذا للسماح للمتصل بمطابقة نتائج السجل مع مدخلاته.
عضو "بيانات" ، وهو في الأساس كيس من حقول الإدخال لكل سجل.
قد يبدو طلب واجهة برمجة تطبيقات الويب الناتج كما يلي:
{
"values": [
{
"recordId": "a1",
"data":
{
"contractText":
"This is a contract that was issues on November 3, 2017 and that involves... "
}
},
{
"recordId": "b5",
"data":
{
"contractText":
"In the City of Seattle, WA on February 5, 2018 there was a decision made..."
}
},
{
"recordId": "c3",
"data":
{
"contractText": null
}
}
]
}
في الممارسة العملية ، قد يتم استدعاء التعليمات البرمجية الخاصة بك مع مئات أو آلاف السجلات بدلا من السجلات الثلاثة الموضحة هنا فقط.
تنسيق مخرجات واجهة برمجة تطبيقات الويب
تنسيق الإخراج عبارة عن مجموعة من السجلات التي تحتوي على "recordId" ، وحقيبة خصائص. يحتوي هذا المثال المحدد على إخراج واحد فقط، ولكن يمكنك إخراج أكثر من خاصية واحدة. كأفضل ممارسة ، فكر في إرجاع رسائل الخطأ والتحذير إذا تعذر معالجة السجل.
{
"values":
[
{
"recordId": "b5",
"data" :
{
"contractDate": { "day" : 5, "month": 2, "year" : 2018 }
}
},
{
"recordId": "a1",
"data" : {
"contractDate": { "day" : 3, "month": 11, "year" : 2017 }
}
},
{
"recordId": "c3",
"data" :
{
},
"errors": [ { "message": "contractText field required "} ],
"warnings": [ {"message": "Date not found" } ]
}
]
}
إضافة مهارة مخصصة إلى مجموعة المهارات
عند إنشاء أداة تخصيب واجهة برمجة تطبيقات الويب، يمكنك وصف رؤوس ومعلمات HTTP كجزء من الطلب. يوضح المقتطف أدناه كيفية تضمين معلمات الطلب ورؤوس HTTP الاختيارية في تعريف مجموعة المهارات. يعد تعيين رأس HTTP مفيدا إذا كنت بحاجة إلى تمرير إعدادات التكوين إلى التعليمات البرمجية الخاصة بك.
{
"skills": [
{
"@odata.type": "#Microsoft.Skills.Custom.WebApiSkill",
"name": "myCustomSkill"
"description": "This skill calls an Azure function, which in turn calls TA sentiment",
"uri": "https://indexer-e2e-webskill.azurewebsites.net/api/DateExtractor?language=en",
"context": "/document",
"httpHeaders": {
"DateExtractor-Api-Key": "foo"
},
"inputs": [
{
"name": "contractText",
"source": "/document/content"
}
],
"outputs": [
{
"name": "contractDate",
"targetName": "date"
}
]
}
]
}
مشاهدة هذا الفيديو
للحصول على مقدمة فيديو وعرض توضيحي ، شاهد العرض التوضيحي التالي.
الخطوات التالية
غطت هذه المقالة متطلبات الواجهة اللازمة لدمج مهارة مخصصة في مجموعة مهارات. تابع هذه الروابط لمعرفة المزيد حول المهارات المخصصة وتكوين مجموعة المهارات.