적응 식
적용 대상: SDK v4
봇은 적응형 식을 사용하여 메모리에서 대화 상자 또는 언어 생성 시스템에 사용할 수 있는 런타임 정보를 기반으로 조건의 결과를 평가합니다. 이러한 평가는 봇이 사용자 입력 및 봇 기능에 영향을 주는 기타 요인에 어떻게 반응하는지 결정합니다.
적응 식은 Bot Framework SDK 및 Bot Framework Composer, 언어 생성, 적응형 대화 상자 및 적응형 카드 템플릿과 같은 다른 대화형 AI 구성 요소와 함께 사용할 수 있는 적응 식 언어를 제공하여 이 핵심적인 필요성을 해결합니다.
적응 식에는 하나 이상의 명시적 값, 미리 빌드된 함수 또는 사용자 지정 함수가 포함될 수 있습니다. 적응형 식의 소비자는 추가로 지원되는 함수를 삽입할 수도 있습니다. 예를 들어 모든 언어 생성 템플릿은 함수뿐만 아니라 해당 구성 요소의 적응 식 사용 내에서만 사용할 수 있는 추가 함수로 사용할 수 있습니다.
연산자
적응 식은 다음 연산자 형식 및 식 구문을 지원합니다.
- 산술
- 비교
- 논리
- 기타 연산자 및 식 구문
연산자 | 기능 | 미리 빌드된 동일한 함수 |
---|---|---|
+ | 덧셈. 예: A + B | add |
- | 빼기 예: A - B | sub |
단항 + | 양수 값입니다. 예: +1, +A | 해당 없음 |
단항- | 음수 값입니다. 예: -2, -B | 해당 없음 |
* | 곱하기 예: A * B | mul |
/ | 나누기 예: A/B | div |
^ | 지수화. 예: A ^ B | exp |
% | 모듈러스. 예: % B | 모드 |
variables
변수는 항상 ${myVariable}
형식의 이름으로 참조됩니다. 속성 선택기 연산자는 속성 선택기 연산자에서 myParent.myVariable
와 같이 myParent.myList[0]
항목 인덱스 선택 연산자 또는 getProperty() 함수를 사용하여 참조할 수 있습니다.
두 가지 특수 변수가 있습니다. [] 는 빈 목록을 나타내고 {} 빈 개체를 나타냅니다.
명시적 값
명시적 값은 작은따옴표 'myExplicitValue' 또는 큰따옴표 "myExplicitValue"로 묶을 수 있습니다.
함수
적응 식에는 하나 이상의 함수가 있습니다. 적응 식에서 지원하는 함수에 대한 자세한 내용은 미리 빌드된 함수 참조 문서를 참조하세요.
Bot Framework 작성기
Bot Framework Composer는 개발자와 다양한 전문 분야 기술 팀이 봇을 빌드하기 위한 오픈 소스 시각적 제작 캔버스입니다. 작성기는 적응형 식을 사용하여 값을 만들고, 계산하고, 수정합니다. 적응 식은 언어 생성 템플릿 정의 및 작성 캔버스의 속성으로 사용할 수 있습니다. 아래 예제에서 볼 수 있듯이 메모리의 속성은 적응 식에서도 사용할 수 있습니다.
식 (dialog.orderTotal + dialog.orderTax) > 50
은 속성 dialog.orderTotal
의 dialog.orderTax
값을 추가하고 합계가 50보다 크거나 False
합계가 50 이하인지 평가 True
합니다.
메모리에서 식이 사용되는 방법에 대한 자세한 내용은 대화 흐름 및 메모리를 읽어보세요.
언어 생성
적응 식은 LG(언어 생성) 시스템에서 LG 템플릿에 설명된 조건을 평가하는 데 사용됩니다. 아래 예제에서는 조인 미리 빌드된 함수를 사용하여 컬렉션의 모든 값을 나열합니다recentTasks
.
# RecentTasks
- IF: ${count(recentTasks) == 1}
- Your most recent task is ${recentTasks[0]}. You can let me know if you want to add or complete a task.
- ELSEIF: ${count(recentTasks) == 2}
- Your most recent tasks are ${join(recentTasks, ', ', ' and ')}. You can let me know if you want to add or complete a task.
- ELSEIF: ${count(recentTasks) > 2}
- Your most recent ${count(recentTasks)} tasks are ${join(recentTasks, ', ', ' and ')}. You can let me know if you want to add or complete a task.
- ELSE:
- You don't have any tasks.
자세한 내용은 .lg 파일 형식 문서의 변형 섹션에서 미리 빌드된 using 함수를 참조하세요.
적응형 카드 템플릿
적응형 카드 템플릿은 봇 및 기타 기술 개발자가 적응형 카드의 레이아웃과 데이터를 구분하는 데 사용할 수 있습니다. 개발자는 데이터를 페이로드와 함께 인라인으로 AdaptiveCard
제공하거나 템플릿에서 데이터를 분리하는 보다 일반적인 방법을 제공할 수 있습니다.
예를 들어 다음과 같은 데이터가 있다고 가정해 보겠습니다.
{
"id": "1291525457129548",
"status": 4,
"author": "Matt Hidinger",
"message": "{\"type\":\"Deployment\",\"buildId\":\"9542982\",\"releaseId\":\"129\",\"buildNumber\":\"20180504.3\",\"releaseName\":\"Release-104\",\"repoProvider\":\"GitHub\"}",
"start_time": "2018-05-04T18:05:33.3087147Z",
"end_time": "2018-05-04T18:05:33.3087147Z"
}
이 속성은 message
JSON 직렬화된 문자열입니다. 문자열 내의 값에 액세스하기 위해 json 미리 빌드된 함수를 호출할 수 있습니다.
{
"type": "TextBlock",
"text": "${json(message).releaseName}"
}
그러면 다음 개체가 생성됩니다.
{
"type": "TextBlock",
"text": "Release-104"
}
자세한 내용 및 예제는 적응형 카드 템플릿 설명서를 참조하세요.
추가 리소스
- C#용 NuGet AdaptiveExpressions 패키지
- JavaScript용 npm adaptive-expressions 패키지
- 적응 식 라이브러리에서 지원하는 미리 빌드된 함수
- C# API 참조
- JavaScript API 참조