Dialogflow Fulfillment:将多项选择题分解为单个问题
Dialogflow Fulfillment: Breaking multiple choice questions into single questions
我对 Dialogflow 比较陌生,我正在尝试创建一个医疗保健诊断语音聊天机器人,其工作方式如下。
用户体验
- 用户调用系统并受到聊天机器人的欢迎。
- Chatbot 开始询问与分类相关的问题(例如,"do you have a history of chronic kidney disease?")。
- 用户会回答问题并最终收到某种建议(例如,自我隔离,或打电话给医生接受 XYZ 检测)。
系统设置
- Dialogflow 代理欢迎用户,说明我们将提出一系列问题,并提示第一个问题 ("How old are you?")。
- 一个不同的意图匹配用户的响应(例如,"I'm 40 years old")并向我的 webhook 服务器发送一个 webhook 请求。
- 我的 webhook 服务器收到请求,这会触发对第三方医疗 API 提供商的 REST API 请求。
- 第三方 API 提供者以多项选择题 ("Please select all statements that apply to you") 回复。这就是事情对我来说变得复杂的地方。
问题
将多项选择题分解为单个 "yes/no" 问题的最佳方法是什么?鉴于我正在处理一个语音聊天机器人,我不能连续向呼叫者播放 10 个问题并期望他们正确回答。我必须一次向来电者发送一个问题。
我最初的想法是我需要在我的 webhook 服务器中创建某种会话管理,以便它可以一次发送一个 question/response 并跟踪他们的回答。但是,鉴于 Dialogflow 已经在进行会话管理,这听起来有些多余。我的偏好是让我的 webhook 服务器保持无状态并从 webhook 请求的上下文对象中提取我需要的所有数据。
我不想将所有可能的分类问题硬编码为意图内的“必需参数”。相反,出于显而易见的原因,我希望第三方 API 提供商处理 content/questions。
一个理想的解决方案是,如果我的实现 webhook 服务器有办法在每个会话的基础上为意图提供所需参数的动态列表。换句话说,webhook 响应将包括所需参数列表和每个参数的 question/text。然后,Intent 将使用此列表一次提示呼叫者一个问题。
我不认为这是可能的,但我想尝试一下也没什么坏处...最有可能的是,我将不得不在我的 webhook 服务器中进行一些会话管理和提示流控制。不过,我愿意接受您可能有的任何新想法或建议。
你走在正确的轨道上。虽然您无法动态创建 Dialogflow 询问的提示,但您 可以 将您需要询问的信息存储在上下文中,并且当他们回答上一个问题时,检查上下文是否还有其他内容你需要问问清单上的下一个问题。
这个方案可能看起来像这样:
- 当您进行到需要提出分类问题的面试部分时,您将进行 API 调用,获取要问的问题列表,并将它们存储在 "triage" 上下文在 "questions" 参数下具有很长的生命周期。
- 然后你问第一个问题,把它放在 "current" 参数中,这样你就知道回答的是哪个问题。
- 您将拥有一个将 "triage" 作为输入上下文并具有 "yes"、"no" 和 "I don't know" 等响应作为训练实体的 Intent短语。此 Intent 将触发您的 webhook。
- 当你的 webhook 被调用时,你将从参数中得到响应,从 "current" 上下文参数中得到被问到的问题,并将这两个存储在 "answers" 参数中相同的上下文。 (或者使用不同的上下文。没关系。)
- 然后您将从上下文中的 "questions" 参数中提取下一个问题,将其设为 "current",并将其作为下一个问题提出。
- 然后每次使用相同的 Intent 重复步骤 3-5,直到所有问题都有答案。
您的服务器保持无状态 - 下一个问题所需的所有状态都在 "triage" 上下文中
我对 Dialogflow 比较陌生,我正在尝试创建一个医疗保健诊断语音聊天机器人,其工作方式如下。
用户体验
- 用户调用系统并受到聊天机器人的欢迎。
- Chatbot 开始询问与分类相关的问题(例如,"do you have a history of chronic kidney disease?")。
- 用户会回答问题并最终收到某种建议(例如,自我隔离,或打电话给医生接受 XYZ 检测)。
系统设置
- Dialogflow 代理欢迎用户,说明我们将提出一系列问题,并提示第一个问题 ("How old are you?")。
- 一个不同的意图匹配用户的响应(例如,"I'm 40 years old")并向我的 webhook 服务器发送一个 webhook 请求。
- 我的 webhook 服务器收到请求,这会触发对第三方医疗 API 提供商的 REST API 请求。
- 第三方 API 提供者以多项选择题 ("Please select all statements that apply to you") 回复。这就是事情对我来说变得复杂的地方。
问题
将多项选择题分解为单个 "yes/no" 问题的最佳方法是什么?鉴于我正在处理一个语音聊天机器人,我不能连续向呼叫者播放 10 个问题并期望他们正确回答。我必须一次向来电者发送一个问题。
我最初的想法是我需要在我的 webhook 服务器中创建某种会话管理,以便它可以一次发送一个 question/response 并跟踪他们的回答。但是,鉴于 Dialogflow 已经在进行会话管理,这听起来有些多余。我的偏好是让我的 webhook 服务器保持无状态并从 webhook 请求的上下文对象中提取我需要的所有数据。
我不想将所有可能的分类问题硬编码为意图内的“必需参数”。相反,出于显而易见的原因,我希望第三方 API 提供商处理 content/questions。
一个理想的解决方案是,如果我的实现 webhook 服务器有办法在每个会话的基础上为意图提供所需参数的动态列表。换句话说,webhook 响应将包括所需参数列表和每个参数的 question/text。然后,Intent 将使用此列表一次提示呼叫者一个问题。
我不认为这是可能的,但我想尝试一下也没什么坏处...最有可能的是,我将不得不在我的 webhook 服务器中进行一些会话管理和提示流控制。不过,我愿意接受您可能有的任何新想法或建议。
你走在正确的轨道上。虽然您无法动态创建 Dialogflow 询问的提示,但您 可以 将您需要询问的信息存储在上下文中,并且当他们回答上一个问题时,检查上下文是否还有其他内容你需要问问清单上的下一个问题。
这个方案可能看起来像这样:
- 当您进行到需要提出分类问题的面试部分时,您将进行 API 调用,获取要问的问题列表,并将它们存储在 "triage" 上下文在 "questions" 参数下具有很长的生命周期。
- 然后你问第一个问题,把它放在 "current" 参数中,这样你就知道回答的是哪个问题。
- 您将拥有一个将 "triage" 作为输入上下文并具有 "yes"、"no" 和 "I don't know" 等响应作为训练实体的 Intent短语。此 Intent 将触发您的 webhook。
- 当你的 webhook 被调用时,你将从参数中得到响应,从 "current" 上下文参数中得到被问到的问题,并将这两个存储在 "answers" 参数中相同的上下文。 (或者使用不同的上下文。没关系。)
- 然后您将从上下文中的 "questions" 参数中提取下一个问题,将其设为 "current",并将其作为下一个问题提出。
- 然后每次使用相同的 Intent 重复步骤 3-5,直到所有问题都有答案。
您的服务器保持无状态 - 下一个问题所需的所有状态都在 "triage" 上下文中