조건부 기술은 출력에 할당할 데이터를 결정하기 위해 불리언 연산이 필요한 Azure AI Search 시나리오를 지원합니다. 이러한 시나리오에는 조건에 따라 데이터 필터링, 기본값 할당, 데이터 병합이 포함됩니다.
다음 의사 코드는 조건부 기술이 수행하는 기능을 보여줍니다.
if (condition)
{ output = whenTrue }
else
{ output = whenFalse }
참고
이 기술은 Foundry 도구에 연결되어 있지 않습니다. 청구되지 않으며 Foundry 도구 키 요구 사항이 없습니다.
@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를 참조하세요.
기술 입력
입력값은 대소문자를 구분합니다.
| 입력 | 설명 |
|---|---|
| condition(조건) | 이 입력은 평가할 조건을 나타내는 평가 필드입니다. 이 조건은 불리언 값(true 또는 false)으로 평가되어야 합니다. 예제: "= 참" "= $(/document/language) =='fr'" "= $(/document/pages/*/language) == $(/document/expectedLanguage)" |
| whenTrue | 이 입력은 조건이 true로 평가될 경우 반환할 값을 나타내는 평가된 필드입니다. 상수 문자열은 작은따옴표(' ')로 반환해야 합니다. 샘플 값: "= '계약'" "= $(/document/contractType)" "= $(/document/entities/*)" |
| whenFalse | 이 입력은 조건이 false로 평가될 경우 반환할 값을 나타내는 평가 필드입니다. 샘플 값: "= '계약'" "= $(/document/contractType)" "= $(/document/entities/*)" |
기술 출력
"output"이라는 단일 출력이 있으며, 조건이 거짓일 때는 whenFalse 값을, 조건이 참일 때는 whenTrue 값을 반환합니다.
예제
예제 기술 정의 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: 존재하지 않는 값에 대해 기본값 설정하기
다음 출력은 문서의 언어로 설정되거나 언어가 설정되지 않은 경우 "es"로 설정되는 주석("/document/languageWithDefault")을 생성합니다.
{
"@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 값을 사용합니다. 출력을 감정("/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: 단일 필드의 데이터 변환
이 예제에서는 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" } ]
}
특별 고려 사항
일부 매개변수는 평가되므로, 문서에 나와 있는 패턴을 반드시 정확히 따라야 합니다. 식은 등호(=)로 시작해야 합니다. 경로는 "$("와 ")"로 구분되어야 합니다. 문자열은 반드시 작은따옴표로 감싸야 합니다. 이는 평가자가 문자열과 실제 경로 및 연산자를 구분하는 데 도움이 됩니다. 또한 연산자 주변에는 반드시 공백을 넣어야 합니다(예를 들어 경로에서의 “*”는 곱하기와는 다른 의미를 가집니다).