Условный когнитивный навык

Условный навык позволяет сценариям поиска ИИ Azure, которым требуется логическое действие для определения данных для назначения выходных данных. Эти сценарии включают в себя операции фильтрования, присвоения значений по умолчанию и объединения данных в соответствии с некоторым условием.

В следующем псевдокоде демонстрируется применение условного навыка:

if (condition) 
    { output = whenTrue } 
else 
    { output = whenFalse } 

Примечание.

Этот навык не привязан к службам ИИ Azure. Она не взимается с оплатой и не имеет ключевого требования к службам искусственного интеллекта Azure.

@odata.type

Microsoft.Skills.Util.ConditionalSkill

Вычисляемые поля

Особенностью этого навыка является то, что его входными данными являются вычисляемые поля.

Следующие элементы являются допустимыми значениями выражения:

  • Пути к заметкам (пути в выражениях должны быть разделены по $(и ")")
    Примеры:

        "= $(/document)"
        "= $(/document/content)"
    
  • Литералы (строки, числа, true, false, NULL)
    Примеры:

       "= 'this is a string'"   // string (note the single quotation marks)
       "= 34"                   // number
       "= true"                 // Boolean
       "= null"                 // null value
    
  • Выражения, использующие операторы сравнения (==, !=, =, >=, ><=, <)
    Примеры:

        "= $(/document/language) == 'en'"
        "= $(/document/sentiment) >= 0.5"
    
  • Выражения, использующие логические операторы (&&, ||, !, ^)
    Примеры:

        "= $(/document/language) == 'en' && $(/document/sentiment) > 0.5"
        "= !true"
    
  • Выражения, использующие числовые операторы (+, -, *, /, %)
    Примеры:

        "= $(/document/sentiment) + 0.5"         // addition
        "= $(/document/totalValue) * 1.10"       // multiplication
        "= $(/document/lengthInMeters) / 0.3049" // division
    

Поскольку условный навык может выполнять оценивание, он подходит для использования в сценариях незначительного преобразования. Например, см. определение навыка 4.

Входные данные навыков

Во входных данных учитывается регистр.

Входные данные Description
condition Эти входные данные являются вычисляемым полем, выступающим в качестве условия для оценки. Это условие должно быть оценено в виде логического значения (true (истинно) или false (ложно)).
Примеры:
"= true"
"= $(/document/language) =='fr'"
"= $(/document/pages/*/language) == $(/document/expectedLanguage)"
whenTrue Эти входные данные являются вычисляемым полем, представляющим возвращаемое значение, если условие оценивается с результатом true (истинно). Строки с константами должны возвращаться в одинарных кавычках (' и ').
Примеры значений:
"= 'contract'"
"= $(/document/contractType)"
"= $(/document/entities/*)"
whenFalse Эти входные данные являются вычисляемым полем, представляющим возвращаемое значение, если условие оценивается с результатом false.
Примеры значений:
"= 'contract'"
"= $(/document/contractType)"
"= $(/document/entities/*)"

Выходные данные навыка

Существует один выход, который просто называется "output". Он возвращает значение, когдаFalse, если условие имеет значение false или когдаTrue, если условие имеет значение true.

Примеры

Пример определения навыка 1: фильтрация документов с возвращением в качестве результата только документов на французском языке

В следующем выводе возвращается массив предложений ("/document/frenchSentences"), если языком документа является французский. Если язык не является французским, возвращается значение null.

{
    "@odata.type": "#Microsoft.Skills.Util.ConditionalSkill",
    "context": "/document",
    "inputs": [
        { "name": "condition", "source": "= $(/document/language) == 'fr'" },
        { "name": "whenTrue", "source": "/document/sentences" },
        { "name": "whenFalse", "source": "= null" }
    ],
    "outputs": [ { "name": "output", "targetName": "frenchSentences" } ]
}

Если условие "/document/frenchSentences" используется в контексте другого навыка, этот навык срабатывает только в том случае, если значение "/document/frenchSentences" отличается от null.

Пример определения навыка 2: задание значения по умолчанию для несуществующего значения

В следующем выводе создается аннотация ("/document/languageWithDefault"), совпадающая с обозначением языка документа или со значением "es", если язык документа не задан.

{
    "@odata.type": "#Microsoft.Skills.Util.ConditionalSkill",
    "context": "/document",
    "inputs": [
        { "name": "condition", "source": "= $(/document/language) == null" },
        { "name": "whenTrue", "source": "= 'es'" },
        { "name": "whenFalse", "source": "= $(/document/language)" }
    ],
    "outputs": [ { "name": "output", "targetName": "languageWithDefault" } ]
}

Пример определения навыка 3: объединение значений из двух полей в одно

В этом примере у некоторых предложений есть свойство frenchSentiment. Во всех случаях, когда свойство frenchSentiment имеет значение "null", мы хотим использовать значение свойства englishSentiment. Выходной результат присваивается элементу с названием sentiment ("/document/sentences/*/sentiment").

{
    "@odata.type": "#Microsoft.Skills.Util.ConditionalSkill",
    "context": "/document/sentences/*",
    "inputs": [
        { "name": "condition", "source": "= $(/document/sentences/*/frenchSentiment) == null" },
        { "name": "whenTrue", "source": "/document/sentences/*/englishSentiment" },
        { "name": "whenFalse", "source": "/document/sentences/*/frenchSentiment" }
    ],
    "outputs": [ { "name": "output", "targetName": "sentiment" } ]
}

Пример преобразования

Пример определения навыка 4: преобразование данных в одном поле

В этом примере получается значение sentiment, находящееся в диапазоне величин от 0 до 1. Мы хотим преобразовать это значение в диапазон величин от –1 до 1. Для этого незначительного преобразования можно использовать условный навык.

В этом примере не используется условный аспект навыка, так как условие здесь всегда имеет значение true (истинно).

{
    "@odata.type": "#Microsoft.Skills.Util.ConditionalSkill",
    "context": "/document/sentences/*",
    "inputs": [
        { "name": "condition", "source": "= true" },
        { "name": "whenTrue", "source": "= $(/document/sentences/*/sentiment) * 2 - 1" },
        { "name": "whenFalse", "source": "= 0" }
    ],
    "outputs": [ { "name": "output", "targetName": "normalizedSentiment" } ]
}

Примечания

Некоторые параметры оцениваются, поэтому необходимо строго следовать шаблону, описанному в документации. Выражения должны начинаться со знака равенства. Путь должен отделяться символами "$(" и ")". Строки нужно заключать в одинарные кавычки. Это помогает средству оценки различать строки и фактические пути и операторы. Кроме того, нужно обязательно оставлять пробелы вокруг операторов (например, символ "*", встречающийся в обозначении пути, не означает умножение).

Следующие шаги