IBM Cloud Docs
조치에 대한 표현식 언어 메소드

조치에 대한 표현식 언어 메소드

watsonx Assistant 표현식 언어를 사용하여 단계에서 수집되거나 세션 변수에 저장된 값과 독립적이거나 이 값에서 파생된 값을 지정할 수 있습니다. 표현식을 사용하여 단계 조건을 정의하거나 세션 변수 값을 정의할 수 있습니다.

watsonx Assistant 는 Spring Expression Language SpEL )를 기반으로 하지만, 구문상 몇 가지 중요한 차이점이 있습니다. SpEL, 자세한 배경 정보는 스프링 표현 언어 SpEL)를 참조하십시오.

다음 두 가지 방법으로 SpEL 표현식을 사용할 수 있습니다.

조치 변수 참조

조치 변수는 고객 입력을 예상하는 단계에 대해 내재적으로 작성되며 변수는 단계에 바인드됩니다. 표현식 안에 있는 액션 변수를 참조하려면, ${step_id} 형식을 사용하여 단계 ID를 지정해야 합니다(예: ${step_771}. 단계의 단계 ID를 찾으려면 단계를 선택한 다음 브라우저에서 URL의 끝을 확인하십시오.

세션 변수 참조

세션 변수는 단계의 변수 섹션에서 명시적으로 작성됩니다. 표현식 안에 세션 변수를 참조하려면 변수 ID를 다음과 같은 형식으로 지정해야 합니다. ${variable_id} (예: ${current_time}. 변수 목록에서 변수 ID를 찾을 수 있습니다. (자세한 정보는 변수를 사용하여 대화 정보 관리를 참조하십시오.)

표현식을 편집할 때, $ 를 입력하면 참조할 수 있는 변수 목록을 볼 수 있습니다. 목록에서 변수를 선택하여 단계 ID 또는 변수 ID를 자동으로 삽입하십시오.

지원되는 데이터 유형

표현식은 원자적 JSON 유형( integer, string, number, boolean 등)과 복합 데이터 유형(JSON 배열( [] ), 객체( {} ) 등)을 사용할 수 있습니다. 리터럴 문자열 값을 지정할 때는 작은따옴표( ' )나 큰따옴표( " )를 사용할 수 있습니다.

고객에서 수집하는 조치 단계가 고객 응답 유형(예: 날짜, 시간, 통화 또는 백분율)을 사용하는 값입니다. 이러한 값은 다음 형식에서 JSON 오브젝트로 저장됩니다.

{
  "system_type": "{system_type}",
  "value": "{value}"
}

여기서 {system_type}은(는) 다음 유형 중 하나입니다.

  • time
  • percentage
  • currency

날짜 및 시간 메소드

여러 개의 메소드는 날짜 및 시간 값에 대해 작업하는 데 사용할 수 있습니다.

now(String timezone)

now() 메소드는 yyyy-MM-dd HH:mm:ss 'GMT'XXX 형식으로 지정된 시간대의 현재 날짜 및 시간을 리턴합니다.

now('Australia/Sydney').

이 예제에서 현재 날짜 및 시간이 2021-11-26 11:41:00 인 경우 리턴되는 문자열은 일광 절약 시간에 따라 2021-11-26 21:41:00 GMT+10.00 또는 2021-11-26 21:41:00 GMT+11.00 입니다.

출력 문자열 형식 변경은 날짜 및 시간 계산 방법에도 적용됩니다. 예를 들어, 사용된 <date> 문자열이 yyyy-MM-dd HH:mm:ss 형식인 경우 (예: today() 메소드를 사용하는 경우) 출력은 동일한 형식 (yyyy-MM-dd HH:mm:ss) 입니다. 그러나 <date> 문자열이 yyyy-MM-dd HH:mm:ss 'GMT'XXX 형식인 경우 (예: now() 메소드를 사용하는 경우) 출력 형식은 yyyy-MM-dd HH:mm:ss 'GMT'XXX 입니다.

.reformatDateTime(String format)

출력에 대한 날짜 및 시간 문자열을 형식화합니다. 이 매개변수는 날짜 또는 시간 값의 형식을 지정하는 포맷 문자열입니다. 포맷 문자열은 SimpleDateFormat 구문을 사용하여 지정해야 합니다.

이 방법은 지정된 형식에 따라 포맷된 문자열을 반환합니다

  • 12/31/2016의 경우 MM/dd/yyyy
  • 10pm의 경우 h a

요일을 다음과 같이 리턴합니다.

  • EEEE-화요일
  • Tue의 경우 E
  • 요일 인덱스(1 = 월요일, ..., 7 = 일요일)의 경우 u

예를 들어, 이 표현식은 값 17:30:00을 5:30 PM(으)로 리턴합니다.

${system_current_date}.reformatDateTime('h:mm a')

입력 문자열에 시간만 포함되는 경우 기본 날짜 1970-01-01이(가) 출력에 사용됩니다. 입력 문자열에 날짜만 포함되는 경우 기본 시간 12 AM (00:00)이(가) 사용됩니다.

.before(String date/time)

  • 다음 예제에서와 같이 날짜 및 시간 값이 지정된 날짜 및 시간 인수 이전인지 여부를 판별합니다.
${system_current_date}.before('2021-11-19')

날짜를 다른 날짜와 비교하거나 시간을 다른 시간과 비교할 수 있습니다. 시간과 날짜 및 시간 값을 비교할 수도 있습니다. 이 경우 날짜는 무시되고 시간만 비교됩니다. 일치하지 않는 값의 기타 모든 비교(예를 들어, 날짜를 시간과 비교)는 false을(를) 리턴합니다. 예외는 output.debug.log_messages(어시스턴트 미리보기 또는 API 응답에서 볼 수 있음)에 로깅됩니다.

.after(String date/time)

  • 날짜 및 시간 값이 날짜 및 시간 인수 이후인지 여부를 판별합니다.

.sameMoment(String date/time)

  • 날짜 및 시간 값이 날짜 및 시간 인수와 동일한지 여부를 판별합니다.

.sameOrAfter(String date/time)

  • 날짜 및 시간 값이 날짜 및 시간 인수 이후인지 또는 동일한지 여부를 판별합니다.
  • .after()와 유사합니다.

.sameOrBefore(String date/time)

  • 날짜 및 시간 값이 날짜 및 시간 인수와 같거나 이전인지 여부를 판별합니다.

날짜 및 시간 계산

다음 메소드를 사용하여 날짜를 계산하십시오.

날짜 계산
메소드 설명
<date>.minusDays(_n_) 지정된 날짜에서 _n_일 전인 날짜를 리턴합니다.
<date>.minusMonths(_n_) 지정된 날짜에서 _n_개월 전인 날짜를 리턴합니다.
<date>.minusYears(_n_) 지정된 날짜에서 _n_년 전인 날짜를 리턴합니다.
<date>.plusDays(_n_) 지정된 날짜에서 _n_일 후인 날짜를 리턴합니다.
<date>.plusMonths(_n_) 지정된 날짜에서 _n_개월 후인 날짜를 리턴합니다.
<date>.plusYears(n) 지정된 날짜에서 _n_년 후인 날짜를 리턴합니다.

여기서 <date>의 경우 yyyy-MM-dd 또는 yyyy-MM-dd HH:mm:ss 형식으로 지정됩니다.

예를 들어, 내일 날짜를 가져오려면 다음 표현식을 지정하십시오.

${system_current_date}.plusDays(1)

다음 메소드를 사용하여 시간을 계산하십시오.

시간 계산
메소드 설명
<time>.minusHours(_n_) 지정된 시간에서 _n_시간 전인 시간을 리턴합니다.
<time>.minusMinutes(_n_) 지정된 시간에서 _n_분 전인 시간을 리턴합니다.
<time>.minusSeconds(_n_) 지정된 시간에서 _n_초 전인 시간을 리턴합니다.
<time>.plusHours(_n_) 지정된 시간에서 _n_시간 후인 시간을 리턴합니다.
<time>.plusMinutes(_n_) 지정된 시간에서 _n_분 후인 시간을 리턴합니다.
<time>.plusSeconds(_n_) 지정된 시간으로부터 n초 후의 시간을 반환합니다.

여기서 <time>의 경우 HH:mm:ss 형식으로 지정됩니다.

예를 들어, 지금부터 한 시간 뒤인 시간을 가져오려면 다음 표현식을 지정하십시오.

 now().plusHours(1)  

시간 범위에 대한 작업

오늘 날짜가 특정 시간 범위 내에 있는지 여부에 따라 응답을 표시하려면 시간 관련 메소드의 조합을 사용할 수 있습니다. 예를 들어, 매년 연휴 기간 동안 특별 판매를 실행하는 경우 오늘 날짜가 올해 11월 25일부터 12월 24일 사이에 있는지 여부를 확인할 수 있습니다.

먼저, 관심 있는 날짜를 세션 변수로 정의하십시오. 다음 시작 및 종료 날짜 세션 변수 표현식에서 날짜는 동적 현재 연도 값과 하드코딩된 월 및 일 값을 연결하여 구성됩니다

start_date = now().reformatDateTime('Y') + '-12-24'
end_date = now().reformatDateTime('Y') + '-11-25'

그런 다음, 단계 조건에서 현재 날짜가 세션 변수로 정의된 시작 및 종료 날짜 사이에 있는 경우에만 응답을 표시하려고 함을 나타낼 수 있습니다.

now().after(${start_date}) && now().before(${end_date})

java.util.Date 지원

내장 메소드 외에도, java.util.Date 클래스의 표준 메소드를 사용할 수 있습니다.

예를 들어, 오늘부터 일주일 뒤인 날짜를 가져오려면 다음 구문을 사용할 수 있습니다.

new Date(new Date().getTime() + (7 * (24*60*60*1000L)))

이 표현식은 먼저 밀리 초 단위로 현재 날짜를 가져옵니다(1970 년 1 월 1 일 00:00:00 GMT 이후). 또한 7일 후에 밀리초 수를 계산합니다((24*60*60*1000L)은(는) 하루를 밀리초로 표시함). 그런 다음 현재 날짜에 7일을 추가합니다. 결과는 오늘부터 일주일 뒤인 전체 날짜입니다(예: Fri Jan 26 16:30:37 UTC 2018).

숫자 메소드

이러한 메소드를 사용하여 숫자 값을 가져오고 재형식화할 수 있습니다.

고객 응답의 숫자 인식에 대한 정보는 응답 유형 선택을 참조하십시오.

숫자에 대한 소수점 배치를 변경하려면(예를 들어, 숫자를 통화 값으로 재형식화하기 위해) 문자열 format () 메소드를 참조하십시오.

toDouble()

오브젝트 또는 필드를 실수 유형으로 변환합니다. 오브젝트 또는 필드에서 이 메소드를 호출할 수 있습니다. 변환에 실패하면 null이(가) 리턴됩니다.

toInt()

오브젝트 또는 필드를 정수 유형으로 변환합니다. 오브젝트 또는 필드에서 이 메소드를 호출할 수 있습니다. 변환에 실패하면 null이(가) 리턴됩니다.

toLong()

오브젝트 또는 필드를 숫자(Long) 유형으로 변환합니다. 오브젝트 또는 필드에서 이 메소드를 호출할 수 있습니다. 변환에 실패하면 null이(가) 리턴됩니다.

SpEL 표현식에서 긴 숫자 유형을 지정하려면 숫자에 L을(를) 추가하여 이를 식별해야 합니다(예: 5000000000L). 이 구문은 32비트 정수 유형에 맞지 않는 모든 숫자에 필요합니다. 2^31(2,147,483,648)보다 크거나 -2 (-2 보다 작은 숫자는 긴 숫자 유형으로 간주됩니다. Long 숫자 형식의 최소 값은 -2 ^ 63이고 최대 값은 2 ^ 63-1(또는 9,223,372,036,854,775,807)입니다.

표준 수학

SpEL 표현식을 사용하여 표준 수학 방정식을 정의합니다. 여기서 연산자는 다음 기호를 사용하여 표시됩니다.

표준 수학
산술 연산 기호
더하기 +
나누기 /
곱하기 *
뺄셈 -

java.lang.Math()

java.lang.Math 클래스의 함수를 사용하여 기본적인 수치 연산을 수행할 수 있습니다.

다음과 같은 클래스 메서드를 사용할 수 있습니다

  • max():

    T(Math).max(${step_297},${step_569})
    
  • min():

    T(Math).min(${step_297},${step_569})
    
  • pow():

    T(Math).pow(${step_297}.toDouble(),2.toDouble())
    

다른 방법에 대한 정보는 java.lang.Math 참조 문서를 참조하십시오.

java.util.Random()

난수를 리턴합니다. 다음 구문 옵션 중 하나를 사용할 수 있습니다.

  • 무작위 부울 값(true 또는 false)을 리턴하려면 new Random().nextBoolean()을(를) 사용하십시오.
  • 0(포함됨) 및 1(제외됨) 사이의 무작위 배수를 리턴하려면 new Random().nextDouble() 항목을 사용하십시오.
  • 0(포함됨) 및 지정하는 숫자 사이에 무작위 정수를 리턴하려면 new Random().nextInt(_n_)을(를) 사용하십시오. 여기서 _n_은 원하는 숫자 범위에서 가장 큰 수보다 1이 더 큽니다. 예를 들어, 0 - 10 범위에서 난수를 리턴하려면 new Random().nextInt(11)을(를) 지정하십시오.
  • 전체 정수 값 범위(-2147483648 - 2147483648)에서 무작위 정수를 리턴하려면 new Random().nextInt()을(를) 사용하십시오.

예를 들어, 고객의 무작위로 선택된 서브세트에 대해서만 실행되는 단계를 작성할 수 있습니다. 다음 단계 조건은 단계의 실행 가능성이 50%임을 의미합니다.

new Random().nextInt(2) == 1

다른 방법에 대한 정보는 java.util.Random 참조 문서를 참조하십시오.

다음 클래스의 표준 메소드도 사용할 수 있습니다.

  • java.lang.Byte
  • java.lang.Integer
  • java.lang.Long
  • java.lang.Double
  • java.lang.Short
  • java.lang.Float

문자열 메소드

이 메소드는 텍스트로 작업하는 데 도움이 됩니다.

정규 표현식을 포함하는 메서드에서 사용하는 구문에 대한 자세한 내용은 RE2 구문 참조 를 참조하십시오.

String.append(Object)

이 메소드는 문자열에 입력 오브젝트(문자열로)를 추가하고 수정된 문자열을 리턴합니다.

${step_297}.append('next text')

String.contains(String)

이 메소드는 조치 변수 또는 세션 변수에 조건에 유용한 하위 문자열이 포함된 경우 true 를 리턴합니다.

${step_297}.contains('Yes')

String.endsWith(String)

문자열이 입력 하위 문자열로 끝나는 경우 이 메소드는 true을(를) 리턴합니다.

${step_297}.endsWith('?')

String.equals(String)

이 메소드는 지정된 문자열이 조치 변수 또는 세션 변수와 동일한 경우 true을(를) 리턴합니다.

${step_297}.equals('Yes')

String.equalsIgnoreCase(String)

이 메소드는 지정된 문자열이 대소문자에 관계 없이 조치 변수 또는 세션 변수와 동일한 경우 true을(를) 리턴합니다.

${step_297}.equalsIgnoreCase('Yes')

String.extract(String regexp, Integer groupIndex)

이 메소드는 지정된 정규식 그룹 패턴과 일치하는 입력의 문자열을 리턴합니다. 일치하는 항목이 없으면 빈 문자열을 리턴합니다.

이 메소드는 단일 regex 패턴에 대해 서로 다른 일치가 아니라 서로 다른 regex 패턴 그룹에 대한 일치를 추출하도록 설계되었습니다. 다른 매칭을 찾으려면 getMatch( 참조하십시오.

이 예제에서 조치 변수는 사용자가 지정하는 정규식 패턴 그룹과 일치하는 문자열을 저장합니다. 표현식에서 두 개의 regex 패턴 그룹이 정의되어 있으며 각 그룹은 소괄호로 묶입니다. 고유는 두 그룹으로 구성된 세 번째 그룹입니다. 이것은 첫 번째 groupIndex ) 정규식 그룹입니다. 전체 숫자 그룹과 텍스트 그룹을 포함하는 문자열과 일치합니다. 두 번째 regex 그룹(groupIndex 1)은 숫자 그룹의 첫 번째 발생과 일치합니다. 세 번째 그룹(groupIndex 2)은 숫자 그룹 다음에 있는 텍스트 그룹의 첫 번째 항목과 일치합니다.

${step_297}.extract('([\d]+)(\b [A-Za-z]+)', <n>)

조치 변수에 다음이 포함된 경우:

Hello 123 this is 456.

결과는 다음과 같습니다.

  • <n>= 0 인 경우, 값은 123 this 입니다.
  • <n>= 1 인 경우, 값은 123 입니다.
  • <n>= 2 인 경우, 값은 this 입니다.

String.find(String regexp)

이 메소드는 문자열의 세그먼트가 입력 정규식과 일치하는 경우 true을(를) 리턴합니다. 이 방법을 JSONArray 또는 JSONObject 요소에 적용할 수 있으며, 비교하기 전에 배열 또는 객체를 문자열로 변환합니다.

예를 들어, 조치 변수 ${step_297} 가 문자열 Hello 123456 를 수집하면 다음 표현식이 true 를 리턴합니다.

${step_297}.find('^[^\d]*[\d]{6}[^\d]*$')

입력 텍스트의 숫자 부분이 정규식 ^[^\d]*[\d]{6}[^\d]*$과(와) 일치하므로 조건은 true입니다.

String.getMatch(String regexp, Integer matchIndex)

이 메소드는 지정된 정규식 패턴의 발생과 일치하는 문자열을 리턴합니다. 일치하는 항목이 없으면 빈 문자열을 리턴합니다.

일치가 발견되면 일치하는 배열로 생각할 수 있는 항목에 추가됩니다. 배열 요소 수는 0에서 시작하므로 세 번째 일치 항목을 리턴하려는 경우 matchIndex 값으로 2를 지정합니다. 예를 들어, 지정된 패턴과 일치하는 세 개의 단어가 있는 텍스트 문자열을 입력하면 해당 인덱스 값을 지정하여 첫 번째, 두 번째 또는 세 번째 일치만 리턴할 수 있습니다.

예를 들어, 다음 예제는 조치 변수에서 숫자 그룹을 찾습니다.

${step_297}.getMatch('([\d]+)', 1)

조치 변수 ${step_297}에 문자열 hello 123 i said 456 and 8910이(가) 포함된 경우 이 표현식은 456을(를) 리턴합니다.

String.isEmpty()

다음 예제와 같이 문자열이 빈 문자열이지만 null이(가) 아닌 경우 이 메소드는 true을(를) 리턴합니다.

${step_297}.isEmpty()

String.length()

다음 예제와 같이 이 메소드는 문자열의 문자 길이를 리턴합니다.

${step_297}.length()

조치 변수 ${step_297}에 문자열 Hello이(가) 포함된 경우 이 표현식은 5를 리턴합니다.

String.matches(String regexp)

다음 예제와 같이 문자열이 입력 정규식과 일치하는 경우 이 메소드는 true을(를) 리턴합니다.

${step_297}.matches('^Hello$')

조치 변수 ${step_297}에 문자열 Hello이(가) 포함된 경우 이 표현식은 true(으)로 평가됩니다.

String.startsWith(String)

다음 예제와 같이 문자열이 지정된 하위 문자열로 시작하는 경우 이 메소드는 true을(를) 리턴합니다.

${step_297}.startsWith('What')

조치 변수 ${step_297}에 문자열 What is your name?이(가) 포함된 경우 이 표현식은 true을(를) 리턴합니다.

String.substring(Integer beginIndex, Integer endIndex)

이 메소드는 beginIndex에서 문자로 시작하고 endIndex 앞에서 문자로 끝나는 하위 문자열을 리턴합니다. (endIndex 문자 자체는 하위 문자열에 포함되지 않습니다.) 색인 값은 0부터 시작하므로 문자열의 첫 번째 문자는 색인 0에 있습니다.

이 예제에서는 색인 5(여섯 번째 문자)에서 시작하고 문자열의 끝까지 계속되는 하위 문자열을 리턴합니다.

${step_297}.substring(5, ${step_297}.length())

조치 변수 ${step_297}에 문자열 This is a string.이(가) 포함된 경우 이 표현식은 is a string.을(를) 리턴합니다.

String.toJson()

이 메소드는 JSON 데이터를 포함하는 문자열을 구문 분석하고 다음 예제와 같이 JSON 오브젝트 또는 배열을 리턴합니다.

${json_var}.toJson()

세션 변수 ${json_var} 에 다음 문자열이 포함된 경우:

"{ \"firstname\": \"John\", \"lastname\": \"Doe\" }"

toJson() 메소드는 다음 오브젝트를 리턴합니다.

{
  "firstname": "John",
  "lastname": "Doe"
}

String.toLowerCase()

이 방법은 아래 예와 같이 소문자로 변환된 지정된 문자열을 반환합니다

${step_297}.toLowerCase()

조치 변수 ${step_297}에 문자열 This is A DOG!이(가) 포함된 경우 이 표현식은 문자열 this is a dog!을(를) 리턴합니다.

String.toUpperCase()

이 방법은 다음과 같이 대문자로 변환된 원본 문자열을 반환합니다

${step_297}.toUpperCase()

조치 변수 ${step_297}에 문자열 hi there이(가) 포함된 경우 이 메소드는 문자열 HI THERE을(를) 리턴합니다.

String.trim()

다음 예제와 같이 이 메소드는 문자열의 시작 및 끝에 있는 모든 공백을 잘라내고 수정된 문자열을 리턴합니다.

${step_297}.trim()

조치 변수 ${step_297}에 문자열 something is here 이(가) 포함된 경우 이 메소드는 문자열 something is here을(를) 리턴합니다.

java.lang.String 지원

내장 메소드 외에도, java.lang.String 클래스의 표준 메소드를 사용할 수 있습니다.

java.lang.String.format()

표준 Java 문자열 format() 메소드를 텍스트에 적용할 수 있습니다. 사용할 구문에 대한 정보는 형식 문자열 구문을 참조하십시오.

이 예제에서는 세 개의 10진수 정수(1, 1 및 2)를 사용하여 문장에 추가합니다.

T(java.lang.String).format('%d + %d equals %d', 1, 1, 2)

결과 문자열은 1 + 1 equals 2입니다.

이 예는 단계별로 수집된 숫자의 소수점 위치를 변경합니다

T(String).format('%.2f',${step_297})

미국 달러로 형식화해야 하는 ${step_297} 변수가 4.5이면 결과 문자열은 4.50입니다.

배열 메소드

이 방법들은 배열 작업을 할 때 도움이 됩니다.

Array.add(value...)

이 메소드는 하나 이상의 새 값을 배열에 추가하고 조작이 성공하면 true 를 리턴합니다.

${Items}.add('four', 'five')

Items['one', 'two', 'three'] 인 경우 이 예제는 ['one', 'two', 'three', 'four', 'five'] 가 되도록 제자리에서 업데이트합니다.

Array.addAll(Array array)

이 메소드는 하나의 배열을 다른 배열에 추가하고 null 를 리턴합니다.

${Items}.addAll(${New_items})

Items['one', 'two', 'three'] 이고 New_items['four', 'five', 'six'] 인 경우, 이 예제는 ['one', 'two', 'three', 'four', 'five', 'six'] 가 되도록 Items 를 업데이트합니다.

Array.append(value...)

이 메소드는 하나 이상의 새 값을 배열에 추가하고 결과를 새 배열로 리턴합니다. 원래 배열은 수정되지 않습니다.

${Items}.append('four', 'five')

Items['one', 'two', 'three'] 인 경우 이 예제는 새 배열 ['one', 'two', 'three', 'four', 'five'] 를 리턴합니다.

Array.clear()

이 방법은 배열에서 모든 값을 제거하고 null을 반환합니다.

${Items}.clear()

이 표현식을 평가한 후 Items 는 비어 있는 배열 ([]) 입니다.

Array.contains(value)

이 메소드는 배열에 입력 값과 정확히 동일한 항목이 포함된 경우 true 를 리턴합니다. 지정된 값은 문자열 또는 숫자일 수 있습니다.

${Items}.contains(123)

Items[123, 456, 789] 인 경우 이 예제는 true 를 리턴합니다.

Array.containsIgnoreCase(value)

이 메소드는 배열에 입력 값과 동일한 항목이 포함된 경우 true 를 리턴합니다. 문자열은 값이 대문자로 지정되었는지 또는 소문자로 지정되었는지에 관계없이 일치됩니다. 지정된 값은 문자열 또는 숫자일 수 있습니다.

${Items}.contains('two')

이 예제는 Items 배열에 문자열 two 의 대소문자가 포함된 경우 true 를 리턴합니다 (예: TWO 또는 Two 도 일치함).

Array.filter(temp_var, "temp_var.property operator comparison_value")

각 배열 요소를 사용자가 지정하는 값과 비교하고 일치하는 요소만 포함하는 새 배열을 리턴하여 배열을 필터링합니다.

필터 표현식은 다음 값으로 구성됩니다.

  • temp_var: 평가될 때 각 배열 요소를 보유하는 데 사용되는 임시 변수의 임의의 이름입니다. 예를 들어, 원래 배열에 도시를 설명하는 오브젝트가 포함된 경우 임시 변수 이름으로 city 를 사용할 수 있습니다.

  • property: 필터링할 요소 특성입니다. 이는 소스 배열에 있는 요소의 특성이어야 합니다. temp_var.property 구문을 사용하여 특성을 temp_var 의 특성으로 지정하십시오. 예를 들어, latitude 이 소스 요소의 올바른 특성 이름인 경우 특성을 city.latitude 로 지정할 수 있습니다.

  • operator: 속성 값을 비교 값과 비교하는 데 사용할 연산자입니다. 다음 연산자를 사용할 수 있습니다:

    지원되는 필터 연산자
    운영자 설명
    == 같음
    > 초과함
    < 미만임
    >= 크거나 같음
    <= 작거나 같음
    != 같지 않음
  • comparison_value: 각 배열 요소의 속성 값을 비교할 값입니다. 리터럴 값을 지정하거나 변수를 참조할 수 있습니다.

필터 예제

예를 들어, 구/군/시 이름 및 해당 인구 번호를 포함하는 오브젝트의 배열이 있을 수 있습니다.

[
   {
      "name":"Tokyo",
      "population":13988129

   },
   {
      "name":"Rome",
      "population":2860009

   },
   {
      "name":"Beijing",
      "population":21893095

   },
   {
      "name":"Paris",
      "population":2165423

   }
]

소스 배열이 ${cities} 라는 변수에 저장되는 경우 다음 표현식은 모집단이 5백만을 초과하는 구/군/시만 포함하는 더 작은 배열을 리턴합니다.

${cities}.filter("city", "city.population > 5000000")

이 표현식은 다음과 같은 필터링된 배열을 리턴합니다.

[
   {
      "name":"Tokyo",
      "population":13988129

   },
   {
      "name":"Beijing",
      "population":21893095

   }
]

하드코딩된 비교 값 대신 변수에 저장된 동적 값을 기반으로 필터링할 수도 있습니다. 이 예제는 이전 단계에서 고객 응답으로 지정된 채우기 값을 사용하여 필터링합니다.

${cities}.filter("city", "city.population > ${step_123}")

숫자 값을 비교할 때는 필터 방법이 실행되기 전에 비교에 관련된 컨텍스트 변수를 유효한 값으로 설정해야 합니다. null을 비교하는 배열 요소에 null이 포함될 가능성이 있는 경우 이 값이 올바른 값일 수 있습니다.

Array.get(Integer index)

이 메소드는 지정된 색인 위치에 있는 배열에서 항목을 리턴합니다. 배열은 0으로 색인화되며, 이는 배열의 첫 번째 항목이 색인 위치 0 에 있음을 의미합니다.

${Items}.get(1)

Items['one', 'two', 'three'] 인 경우 이 예제는 two 를 리턴합니다.

get() 메소드는 대괄호 ([]) 를 사용하여 배열에서 항목을 검색하는 대신 사용할 수 있습니다. 다음 예제도 유효하며 동일한 결과를 리턴합니다.

${Items}[1]

고객이 지정한 값을 사용하여 배열에서 항목을 선택하는 경우 0색인 값으로 변환하려면 1을 빼야 합니다. 예를 들어, ${Items}.get(${step_123} - 1) 와 같은 표현식을 사용하여 원하는 값을 검색할 수 있습니다.

Array.getRandomItem()

이 메소드는 배열에서 무작위로 선택된 항목을 리턴합니다.

${Items}.getRandomItem()

Items['one', 'two', 'three'] 인 경우 이 예는 무작위로 one, two 또는 three 를 리턴합니다.

Array.indexOf(value)

이 메소드는 배열에서 입력 값의 첫 번째 어커런스의 색인 위치를 리턴하거나 배열에 입력 값이 없는 경우 -1 를 리턴합니다. 지정된 값은 문자열 또는 숫자일 수 있습니다.

${Items}.indexOf(`two`)

Items['one', 'two', 'three'] 인 경우 이 예는 정수 1 (0으로 인덱싱된 배열의 두 번째 위치를 표시함) 를 리턴합니다.

Array.join(String delimiter)

이 메소드는 이 배열의 모든 값을 하나의 문자열로 결합합니다. 값은 문자열로 변환되고 입력 구분 기호로 구분됩니다.

예를 들어, ["pepperoni", "ham", "mushrooms"] 배열을 포함하는 pizza_toppings 라는 변수를 사용할 수 있습니다. 다음 표현식은 이 배열을 문자열 pepperoni, ham, mushrooms 로 변환합니다.

${toppings_array}.join(', ')

해당 표현식을 사용하여 변수의 값을 정의하는 경우, 어시스턴트 출력에서 해당 변수를 참조하여 사용자가 읽을 수 있는 메시지 (예: You have selected the following toppings: pepperoni, ham, mushrooms) 를 작성할 수 있습니다.

JSONArray.joinToArray(template, retainDataType)

이 메소드는 배열의 각 항목에서 정보를 추출하고 사용자가 지정하는 템플리트에 따라 형식화된 새 배열을 빌드합니다. 템플리트는 문자열, JSON 오브젝트 또는 배열일 수 있습니다. 이 메소드는 템플리트의 유형에 따라 문자열의 배열, 오브젝트의 배열 또는 배열의 배열을 리턴합니다.

이 메소드는 단계 출력의 일부로 리턴할 수 있는 문자열로 정보를 형식화하거나 외부 API와 함께 사용할 수 있도록 데이터를 다른 구조로 변환하는 데 유용합니다.

템플리트에서 다음 구문을 사용하여 소스 배열의 값을 참조할 수 있습니다.

%e.{property}%

여기서 {property} 은 소스 배열의 특성 이름을 나타냅니다.

예를 들어, 어시스턴트가 세션 변수에 항공편 세부사항을 포함하는 배열을 저장한다고 가정합니다. 저장된 데이터는 다음과 같습니다.

"flights": [
      {
        "flight": "AZ1040",
        "origin": "JFK",
        "carrier": "Alitalia",
        "duration": 485,
        "destination": "FCO",
        "arrival_date": "2019-02-03",
        "arrival_time": "07:00",
        "departure_date": "2019-02-02",
        "departure_time": "16:45"
      },
      {
        "flight": "DL1710",
        "origin": "JFK",
        "carrier": "Delta",
        "duration": 379,
        "destination": "LAX",
        "arrival_date": "2019-02-02",
        "arrival_time": "10:19",
        "departure_date": "2019-02-02",
        "departure_time": "07:00"
      },
      {
        "flight": "VS4379",
        "origin": "BOS",
        "carrier": "Virgin Atlantic",
        "duration": 385,
        "destination": "LHR",
        "arrival_date": "2019-02-03",
        "arrival_time": "09:05",
        "departure_date": "2019-02-02",
        "departure_time": "21:40"
      }
    ]

이러한 플라이트를 사용자가 읽을 수 있는 양식으로 설명하는 문자열 배열을 빌드하려면 다음 표현식을 사용할 수 있습니다.

${Flight_data}.joinToArray("Flight %e.flight% to %e.destination%", true)

이 표현식은 다음 문자열 배열을 리턴합니다. ["Flight AZ1040 to FCO","Flight DL1710 to LAX","Flight VS4379 to LHR"].

선택적 retainDataType 매개변수는 메소드가 리턴된 배열에서 모든 입력 값의 데이터 유형을 보존하는지 여부를 지정합니다. retainDataTypefalse 로 설정되거나 생략된 경우, 일부 상황에서는 입력 배열의 문자열이 리턴된 배열의 숫자로 변환될 수 있습니다. 예를 들어, 입력 배열에서 선택된 값이 "1", "2""3" 인 경우 리턴되는 배열은 [ 1, 2, 3 ] 일 수 있습니다. 예기치 않은 유형 변환을 방지하려면 이 매개변수에 true 를 지정하십시오.

복합 템플리트

보다 복잡한 템플리트에는 읽기 쉬운 레이아웃으로 정보를 표시하는 형식화가 포함될 수 있습니다. 복합 템플리트의 경우 세션 변수에 템플리트를 저장할 수 있습니다. 그러면 문자열 대신 joinToArray 메소드로 전달할 수 있습니다.

예를 들어, 이 복합 템플리트에는 레이블 및 형식을 추가하는 배열 요소의 서브세트가 포함되어 있습니다.

<br/>Flight number: %e.flight% <br/> Airline: %e.carrier% <br/> Departure date: %e.departure_date% <br/> Departure time: %e.departure_time% <br/> Arrival time: %e.arrival_time% <br/>

템플리트에서 사용하는 형식이 어시스턴트 출력을 표시하는 채널 통합에서 지원되는지 확인하십시오.

Template 라는 세션 변수를 작성하고 이 템플리트를 해당 값으로 지정하는 경우 표현식에서 해당 변수를 사용할 수 있습니다.

${Flight_data}.joinToArray(${Template})

실행 시 응답은 다음과 같이 표시됩니다

Flight number: AZ1040
Airline: Alitalia
Departure date: 2019-02-02
Departure time: 16:45
Arrival time: 07:00

Flight number: DL1710
Airline: Delta
Departure date: 2019-02-02
Departure time: 07:00
Arrival time: 10:19

Flight number: VS4379
Airline: Virgin Atlantic
Departure date: 2019-02-02
Departure time: 21:40
Arrival time: 09:05

JSON 템플리트

문자열 대신 템플리트를 JSON 오브젝트로 정의할 수 있습니다. 이 오브젝트는 다른 시스템의 정보 형식을 표준화하거나 데이터를 외부 서비스에 필요한 형식으로 변환하는 방법을 제공합니다.

이 예에서 템플리트는 Flight data 세션 변수에 저장된 배열에 지정된 요소에서 항공편 세부사항을 추출하는 JSON 오브젝트로 정의됩니다.

{
  "departure": "Flight %e.flight% departs on %e.departure_date% at %e.departure_time%.",
  "arrival": "Flight %e.flight% arrives on %e.arrival_date% at %e.arrival_time%."
}

이 템플리트를 사용하여 joinToArray() 메소드는 지정된 구조의 새 오브젝트 배열을 리턴합니다.

Array.remove(Integer index)

이 방법은 배열에서 지정된 인덱스 위치의 항목을 제거하고 업데이트된 배열을 반환합니다.

${Items}.remove(1)

Items['one', 'two', 'three'] 인 경우 이 예제는 ['one', 'three'] 를 리턴합니다. 원래 Items 배열도 제자리에서 수정됩니다.

Array.removeValue(value)

이 방법은 배열에서 지정된 값의 첫 번째 발생을 제거하고 업데이트된 배열을 반환합니다. 지정된 값은 문자열 또는 숫자일 수 있습니다.

${Items}.removeValue('two')

Items['one', 'two', 'three'] 인 경우 이 예제는 ['one', 'three'] 를 리턴합니다. 원래 Items 배열도 제자리에서 수정됩니다.

Array.set(Integer index, value)

이 메소드는 지정된 색인 위치의 항목을 지정된 값으로 바꾸고 업데이트된 배열을 리턴합니다.

${Items}.set(2,'five')

Items['one', 'two', 'three'] 인 경우 이 예제는 ['one', 'two', 'five'] 를 리턴합니다. 원래 Items 배열도 제자리에서 수정됩니다.

Array.size()

이 메소드는 배열의 항목 수를 정수로 리턴합니다.

${Items}.size()

Items['one', 'two', 'three'] 인 경우 이 예제는 3 를 리턴합니다.

Array.sort()

이 메소드는 인플레이스 정렬을 수행하고 정렬된 배열을 리턴합니다. 기본 매개변수는 ascending 입니다. descending 를 지정하여 정렬 순서를 변경할 수 있습니다. 다른 모든 매개변수 항목은 무시되고 로그 오류가 표시됩니다.

${Items}.sort("ascending")

이 메소드는 숫자와 문자열을 비교합니다. 숫자는 항상 문자열보다 작습니다. 다른 모든 유형은 기본적으로 비교를 위해 문자열로 변환됩니다.

예를 들어, 다음과 같습니다.

정렬 예
원래 배열 정렬된 배열
[2,1,3,5,4,3] [1,2,2,3,3,4,5]
["바나나", "오렌지", "Apple", "망고"] ["Apple", "Banana", "Mango", "Orange"]
[3, 2, 4, "1", "10", "12", "Banana", "Orange", 0, "Apple", "Mango"] [0, 2, 3, 4, "1", "10", "12", "Apple", "Banana", "Mango", "Orange"]

Array.transform()

Array.transform() 메소드는 session_history 변수 와 함께만 사용됩니다. 특정 생성 AI 시스템과 일치하도록 변수의 출력을 변환할 수 있습니다.

테이블: 대화 형식의 서명 은 다른 대화 형식에 사용할 수 있는 서명을 표시합니다.

테이블: 대화 형식의 서명
상세 정보 OpenAI Google PaLM2 Llama2
Signature transform(String rolePrefix, String userPrefix, String assistantPrefix, optional Boolean currentAction=false) transform(String rolePrefix, String userPrefix, String assistantPrefix, optional Boolean currentAction=false) transform(optional String systemPrompt, optional Boolean currentAction=false)
고객 메시지 형식 {$rolePrefix: $userPrefix, "content": $content} {$rolePrefix: $userPrefix, "content": $content} <s>[INST] <<SYS>>{{ $systemPrompt }} <</SYS>>{{ $user_content }} [/INST] {{ $assistant_content }} </s><s>[INST] {{ $user_content }} [/INST]
지원 메시지 형식 {$rolePrefix: $assistantPrefix, "content": $content} {$rolePrefix: $assistantPrefix, "content": $content} 해당사항 없음
예제 ${system_session_history}.transform("role", "user", "assistant") ${system_session_history}.transform("author", "USER", "AI") ${system_session_history}.transform("<your system prompt>")

currentAction 가 참이면:

currentAction 이 true인 경우
어시스턴트 사용 설명
조치만 변환은 n 가 true인 모든 메시지를 제외합니다. 이는 고객 질문이 새 기본 조치를 트리거했음을 표시합니다.
대화 상자 전용 currentAction 는 무시되고 변환에는 session history 변수의 전체 컨텐츠가 포함됩니다.
대화 상자 및 조치 변환에는 대화 노드가 트리거되는지 여부에 관계없이 조치의 가장 최근 시작 이후 session_history 변수의 모든 항목이 포함됩니다.

n : true 플래그는 변환의 출력에 포함되지 않습니다.