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 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이 호출됩니다.