我们有一个简单的 AppIntent 让用户在我们的应用程序中提问。
意图有一个参数:Prompt,由 requestValueDialog 检索,并且需要是自由格式的字符串。
用户报告称,在使用 Siri 时,会出现“您想问什么?”的对话框。出现,但如果他们用诸如“Sting 的最后一张专辑是什么”之类的短语进行响应,它只会再次显示提示对话框。
所有 Siri 交互都发生在我们的代码之外,因此我看不到任何方法来调试或确定提示被拒绝的原因。是否有不同的方法来指定参数来指示提示字符串可以包含任何任意文本 - 包括“最近”或“最后”?
我的预感是这些词正在触发系统响应或消除歧义,从而踩在 requestValueDialog 上?
这是一个视频,显示了两个失败案例,然后是一个接受的提示: https://youtube.com/shorts/v2j51T7Kdxw
测试它,我发现如果我包含“最近”或“最后”等词,我可以重现该行为。仅单独提供这些单词会导致对话一遍又一遍地呈现。使用快捷方式中的相同意图似乎没有这种限制,只有在提供语音识别的口语单词时才会出现这种情况。
AppIntent 和参数的设置方式如下:
struct AskAI: AppIntent {
static var title: LocalizedStringResource = "Ask"
static var description: IntentDescription = IntentDescription("This will ask the A.I. app")
static var openAppWhenRun = false
@Parameter(title: "Prompt", description: "The prompt to send", requestValueDialog: IntentDialog("What would you like to ask?"))
var prompt: String
@MainActor
func perform() async throws -> some IntentResult & ProvidesDialog & ShowsSnippetView {
var response = ""
...
response = "You asked: \"\(prompt)\" \n"
...
return .result(dialog: "\(response)")
}
static var parameterSummary: some ParameterSummary {
Summary("Ask \(\.$prompt)")
}
}
目标是让 Siri 询问用户提示并接受用户所说的字符串而不进行过滤。
我遇到了同样的事情:Siri 不断重复这个问题。然而,我发现如果我在
requestValueDialog
宏中省略 @Parameter
,它就会按预期工作。 Siri 会生成一个通用问题(我对此不满意)。
这失败了,就像 Siri 不断重复这个问题一样:
@Parameter(title: "Journal", requestValueDialog: IntentDialog("Which journal do you want to update?"))
这是有效的,因为 Siri 会获取用户对问题的答案并继续:
@Parameter(title: "Journal")