长话短说:你可能想要这个:https://cloud.google.com/dialogflow/docs/reference/rest/v2/projects.agent.intents
让我们清理甲板并解开这个结,因为有一些事情正在发生。
首先,让我们忘记上下文——输入和输出上下文——而只考虑披萨。
假设您构建了一个披萨店机器人,它只允许您订购一种披萨和一种饮料,并让您可以选择通过现金或信用卡付款。
没有任何问题的对话流程如下所示:
User: I want a pizza
Agent: Ok 1 pizza $5. Do you want a drink?
User: Yes
Agent: Ok, 1 pizza + 1 drink is $10. Do you want to pay with credit card?
Agent: If you say no you can pay with cash
User: No
Agent: Ok $10 cash (+ bot-tip of course)
您可以想象其他对话分支和选项,但要注意的主要事项是用户可以在多个点上表示“是”或“否”。由于上下文+会话,DialogFlow“知道”用户指的是什么。
例如。没有任何上下文
User: No.
Agent: What are you talking about?
Agent: Do you mean no drink? Do you mean no credit card? Do you mean no pizza?
3 个想法:
1) 会话:一个随机字符串(不超过 36 个字符),附加到会话的每个“轮次”,例如:1234567
2) 上下文:DialogFlow 中的一个想法,它做了两件事:(1) 在对话的“轮次”之间存储数据;(2) 如果多个意图有资格被调用,则影响哪个意图得到匹配。前任。 {name:'context name', parameters: {}, languageCode: 'en-US'}
3) 上下文路径/会话路径?这些只是 DialogFlow API 标识符,可将您的请求限定在与您的代理关联的任何项目。如果您正在使用 DialogFlow API 进行交互,您可能会使用这些
例如。会话路径
session id is 12456789
project id is gcp-abcbots-xxx-545
sessionPath would be:
projects/gcp-abcbots-xxx-545/agent/sessions/123456789
例如。上下文路径:会话路径+上下文
session id is 12456789
project id is gcp-abcbots-xxx-545
Context is : {name: 'context_1', parameters: {}, languageCode: 'en_US'}
ContextName is : context_1
contextPath is:
projects/gcp-abcbots-xxx-545/agent/sessions/123456789/contexts/context_1
ContextPath = sessionPath/contexts/context_1
上下文更广泛地涉及在用户和会话系统之间的一系列乒乓交互期间保持“状态”的想法。 (就我们而言,“对话”最终对我们来说只是在对话的每个“转折点”进行一系列 API 调用。)
示例如果你说“明尼阿波利斯的天气怎么样?”,你会得到答案,然后再问“下周那里的天气怎么样?”你应该合理地期望代理应该保持你所说的明尼阿波利斯的上下文。
您的问题:为什么 DialogFlow createContext API 需要会话?
使用 createContext,您真正要做的是使当前“对话”的上下文处于活动状态(这实际上意味着新上下文会附加到任何“会话”。)这就是您“需要”会话或 sessionPath 的原因,因为您正在做的是将上下文附加到会话。
如果您正在谈论将输入/输出上下文附加到不需要会话的意图。您可以通过 API 或 Web 控制台执行此操作
输出上下文/输入上下文
DialogFlow 中的输入和输出上下文都是关于影响将匹配哪些意图。但也可以这样想:输入/输出上下文实际上是关于在正确的时间将上下文附加到会话。
例如,如果 DialogFlow 中的意图具有输出上下文——只要它“完成”,该输出上下文就会变为“活动”或与当前用户的会话相关联。任何具有匹配 input 上下文且在会话中处于活动状态的意图更有可能被匹配。
tl;dr:您可以创建输入/输出上下文并将它们附加到意图——这不需要会话,您只需要一个意图。如果你想“创建”一个在对话中处于活动状态的上下文,你需要一个会话,或者你需要匹配一个具有输出上下文的意图,然后该上下文在会话中变为“活动”