Bixby Developer Center

Guides
References

기본값 (Default Value)

캡슐이 사용자에게 표시할 프롬프트의 기본값을 제공해야 하거나, 제공되는 값이 없을 경우 적절한 값을 가정해야 할 수도 있습니다. 팁 계산기 캡슐을 예로 들어보겠습니다. 사용자가 "음식값 100달러면 팁이 얼마야?"라고 물어보았을 때 캡슐은 총 청구 금액은 알고 있지만 팁을 몇 퍼센트로 계산할 것인지를 알아야 합니다. 이러한 경우 사용자에게 팁을 몇 퍼센트로 계산할지 말해달라고 하거나 매번 퍼센트를 프롬프트로 물어보는 방식을 사용하는 대신에, 인스턴스화 전략(instantiation strategy)을 구현할 수 있습니다. 이를 통해 사용자가 제공하지 않은 값을 제안하도록 하거나, 아니면 input에 대한 기본 초기화(default initialization)를 구현하여 특정 기본값이 설정되도록 할 수 있습니다.

기본 초기화(Default Initialization)

아래에 설명된 CheckStatus action에는 receipt input이 필요합니다. 이 input이 제공되지 않을 경우 마지막으로 생성된 receipt를 기본값으로 사용합니다.

action (CheckStatus) {
type (RefreshActivity)
collect {
input (receipt) {
type (Receipt)
min (Required)
default-init {
intent {
goal: FindLastReceipt
}
}
}
}
output (Receipt)
}

View on GitHub

default-init는 Bixby의 planner가 FindLastReceipt action을 사용하여 Receipt concept을 기본값으로 제공하도록 새 인텐트(intent)를 지정합니다.

default-init 블록이 지정되면 Bixby는 먼저 default-init 인텐트(intent)를 전달하여 누락된 required value를 찾습니다. 현재 요청에 적용되는 것이 없거나 값이 제공되지 않은 경우, Bixby는 인스턴스화 전략(instantiation strategy)을 고려합니다. 참고로, default-init 블록은 instantiation-strategy와 동일한 결과를 반환할 수 있다는 점에서 기능적으로 동일하다고 볼 수 있습니다.

인스턴스화 동작(Instantiation Behavior)

ShowDefaultValueDecision enum과 함께 instantiation-behavior 키(key)를 사용하여 기본 초기화 값을 표시하고 사용자가 이를 오버라이딩할 수 있도록 만들 수 있습니다.

action (GetDeliveryAddress) {
type (Search)
collect {
input (address) {
instantiation-behavior (ShowDefaultValueDecision)
type (Address)
min (Required)
default-init {
intent {
goal: GetHomeAddress
}
}
}
}
output (Address)
}
Note

instantiation-behavior (ShowDefaultValueDecision)을 사용할 때는 유효성 검사(validation)가 없다는 사실을 명심하세요.

인스턴스화 전략(Instantiation Strategy)

인스턴스화 전략(instantiation strategy)은 매치 패턴(match pattern)을 사용하여 선택됩니다. 인스턴스화 전략(instantiation strategy)은 Bixby에 있는 다른 전략의 공통 구성 요소를 모두 갖습니다. 다만 가장 큰 차이점은 strategy 블록으로, 이 블록은 사용할 값을 결정하거나 선택한 값을 intent 형식으로 가져올 위치를 결정합니다.

전략은 캡슐의 /resources/base 폴더에 저장됩니다. Bixby Developer Studio의 Create New File 대화 상자에서 "Strategy"를 파일 타입으로 선택하면 적절한 위치에 파일이 생성됩니다.

여러 선택 옵션 중에서 선택하기

팁 계산기 예에서는 다음과 같은 전략을 생각해볼 수 있습니다.

instantiation-strategy {
id (init-tip-percent-from-dflt-enum)
match {
gratuity.TipPercent (this)
}
strategy {
intent {
value: gratuity.TipPercent(10)
value: gratuity.TipPercent(15)
value: gratuity.TipPercent(18)
value: gratuity.TipPercent(20)
value: gratuity.TipPercent(25)
goal: gratuity.TipPercent
}
}
}

이 전략은 TipPercent goal에 둘 이상의 가능한 값을 제공하므로 Bixby의 Selection Learning을 호출하여 하나를 선택하게 됩니다.

단일 기본값 설정하기

사용자가 "날씨가 어때?"라고 물을 경우 캡슐은 사용자가 현재 위치의 날씨 정보를 원한다고 가정할 수 있습니다. 이 예에서 인스턴스화 전략(instantiation strategy)은 사용자의 현재 위치를 기본값으로 설정합니다.

instantiation-strategy {
id (current-location-value)
match: geo.CurrentLocation
strategy {
intent {
value-set: geo.CurrentLocation { $expr($user.currentLocation) }
goal: geo.CurrentLocation
}
}
}

위치에 종속된 인텔리전스의 유사한 예로, 사용자 locale을 기반으로 트랜잭션 통화를 선택하는 것이 있습니다.

instantiation-strategy {
id (money.Currency_Instantiation)
match {
viv.money.Currency
}
strategy {
intent {
subplan {
value-set {
geo.ISOCountryCode2 {
$expr($user.locale.country)
}
}
goal { viv.money.CurrencyType }
}
goal { viv.money.Currency }
}
}
}

여러 개의 인스턴스화 전략(Instantiation Strategy) 사용하기

둘 이상의 패턴이 일치하는 경우 하나의 요청에 여러 개의 전략을 적용할 수 있습니다. 그러한 경우, Bixby는 모든 전략을 실행한 후 이를 통해 생성되는 모든 결과를 병합합니다.

인스턴스화 전략(instantiation strategy) 간을 구별하는 학습은 따로 없습니다. 하지만 팁 계산기 캡슐 예처럼, 여러 전략의 결과를 결합하면 필요 이상으로 많은 옵션이 생성되므로 사용자에게 가장 적합한 옵션을 선택하도록 Selection Learning이 호출됩니다.