Mycroft-core: سلوك مشكلة الاختبار: "ثم يجب أن يحتوي الرد على | include" لا يعمل

تم إنشاؤها على ٣٠ سبتمبر ٢٠٢٠  ·  5تعليقات  ·  مصدر: MycroftAI/mycroft-core

أحاول كتابة اختبار لمهاراتي.
أنا أستخدم إطار العمل Behave.
في وثائق mycroft ، عندما يتم شرح كيفية كتابة اختبار باستخدام Behave ، يتم عرض إمكانية التحقق مما إذا كان رد mycroft يحتوي على كلمة معينة أم لا.
لكن كل الطرق المقدمة لا تعمل معي.

حاولت:

  • ثم يجب أن يحتوي الرد "mycroft-Skills" على [word]
  • بعد ذلك ، يجب أن ترد "mycroft-skills" باستخدام مربع حوار [ملف حوار] ولكن يجب أن يتضمن الرد [كلمة]
  • بعد ذلك ، يجب أن ترد "mycroft-Skills" باستخدام مربع حوار [ملف حوار] ثم يجب أن يتضمن رد "mycroft-Skills" [كلمة]
  • بعد ذلك ، يجب أن ترد "mycroft-skills" باستخدام مربع حوار [ملف حوار] ولكن يجب أن يتضمن رد "mycroft-Skills" [كلمة]
  • بعد ذلك ، يجب أن ترد "mycroft-Skills" باستخدام مربع حوار [ملف حوار] ولكن يجب أن يحتوي الرد على [word]
  • بعد ذلك ، يجب أن ترد "mycroft-Skills" باستخدام مربع حوار [ملف حوار] ثم يجب أن يحتوي الرد "mycroft-Skills" على [word]
  • بعد ذلك ، يجب أن ترد "mycroft-Skills" باستخدام مربع حوار [ملف الحوار] ولكن يجب أن يحتوي الرد "mycroft-Skills" على [word]

أين الخطأ؟
لا بد لي من استخدام الكلمة الرئيسية "تحتوي على" أو "تشمل"؟

For discussion Enhancement - proposed help wanted

التعليق الأكثر فائدة

مرحبًا ، لقد غيرت هذا المثال في المستندات. وهذا كان خطأ من جانبي.

تعد خطوات "رد mycroft" الأوسع مفيدة عندما لا تهتم حقًا بأي مهارة تستجيب طالما أنك تحصل على إجابة جيدة. على سبيل المثال ، طرح سؤال حول المعرفة العامة مثل ارتفاع برج إيفل - قد تكون الإجابة هي DuckDuckGo أو Wikipedia أو Wolfram Alpha ، ولكن في كلتا الحالتين لا يزال التفاعل ناجحًا.

شكرًا لإثارة المشكلة ، أعتقد أن هؤلاء جميعًا مرشحون جيدون للإضافة كخطوات جديدة:

  • إذًا يجب أن يحتوي رد {المهارات} على "{text}"
  • إذًا يجب ألا يحتوي رد {المهارات} على "{text}"
  • إذًا يجب ألا يحتوي رد mycroft على "{text}"

ال 5 كومينتر

مرحبا يبدو أن بناء الجملة لاحتواء كلمة ينبغي أن يكون

Then mycroft reply should contain "SOMETHING CLEVER"

حيث يعتبر SOMETHING CLEVER هو الاستجابة الذكية المتوقعة من mycroft :)

انظر هنا للحصول على التعريف ويمكن العثور على مثال في مهارة الويكي.

لم أشاهد الخطوة "يجب عدم التضمين" ، وأرى أنها مُشار إليها في المستندات ولكن أعتقد أن هذا بشكل أساسي مثال ...

أعتقد أن المشكلة ببساطة.
إذا لاحظت أن تعريف "يجب أن يحتوي على" لا تستخدم السمة {المهارات} مثل الخطوة الأخرى ، لذلك لاستخدام هذه الخطوة ، يجب أن نكتب "ثم mycroft ..." وليس "ثم {المهارات اسم} ..."

قارن بين هذا التعريف ...
then (يجب أن يحتوي رد mycroft على "{text}" ')
وليس مثل الخطوة الأخرى
@ ثم ('"{المهارات}" يجب الرد بـ "{text}"' بالضبط)

مرحبًا ، لقد غيرت هذا المثال في المستندات. وهذا كان خطأ من جانبي.

تعد خطوات "رد mycroft" الأوسع مفيدة عندما لا تهتم حقًا بأي مهارة تستجيب طالما أنك تحصل على إجابة جيدة. على سبيل المثال ، طرح سؤال حول المعرفة العامة مثل ارتفاع برج إيفل - قد تكون الإجابة هي DuckDuckGo أو Wikipedia أو Wolfram Alpha ، ولكن في كلتا الحالتين لا يزال التفاعل ناجحًا.

شكرًا لإثارة المشكلة ، أعتقد أن هؤلاء جميعًا مرشحون جيدون للإضافة كخطوات جديدة:

  • إذًا يجب أن يحتوي رد {المهارات} على "{text}"
  • إذًا يجب ألا يحتوي رد {المهارات} على "{text}"
  • إذًا يجب ألا يحتوي رد mycroft على "{text}"

نعم. شكرا جزيلا. من الواضح الآن كيفية استخدام then_contains step.
لدي أيضًا مشكلة في هذا المثال:

"الميزة: الطقس الحالي
السيناريو: درجة الحرارة في باريس

Given an english speaking user

  And user is located in Paris

 When the user says "how hot will it be today"

 Then "mycroft-weather" should reply with dialog from "current.high.temperature.dialog"

  But mycroft reply should contain "Paris"`

عندما أستخدم "لكن أو و" لا يبدو أن التحقق من الكلمة التي يجب أن يحتوي عليها الرد قد تم إجراؤه في الرد السابق ، ولكن يبدو أنه يعمل كالمعتاد
Then mycroft reply should contain... ، لذلك يبدو أنه يستخدم أيضًا ولكن | ويتصرف في رد جديد للتحقق مما إذا كان الرد يحتوي على كلمة معينة.
أيضًا في تعريف خطوة السلوك ، لا يوجد مرجع حول خطوة تحتوي على رد سابق باستخدام الكلمة الأساسية "و" أو "لكن".

يحرر:

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

"Then "myskil" should reply with dialog "myskill.dialog"
"And|But "myskill" should reply with dialog "myskillother.dialog"

هو نفسه من

"Then "myskil" should reply with dialog "myskill.dialog"
"Then "myskill" should reply with dialog "myskillother.dialog"

لذلك ، يتم استبدال and|but بـ then|given اعتمادًا على نوع الخطوة السابقة ، إذا كانت الخطوة السابقة then الخطوة فسيتم استبدالها بـ then وإلا بـ given .

لذلك في حالة then_contain هو نفسه ، يتم التحقق من الكلام المنطوق الجديد وليس الكلام السابق.
هذا أيضًا لأن ناقل الرسائل mycroft لا يحفظ الردود المقدمة ، لذلك عندما يتم استهلاك استجابة ، لا يكون من الممكن الوصول إليها.

انظر طلب السحب رقم 2711 والإصدار رقم 2714

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات