> For the complete documentation index, see [llms.txt](https://bothub.gitbook.io/project/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bothub.gitbook.io/project/basic-knowledge/ai/context.md).

# 对话管理

用户与机器人进行互动时，除了通过各种按钮与快捷回复的「点击」，还可以通过直接「输入文本」来进行。这就需要我们在设置机器人的时候，对用户可能会输入的问题，进行相应的回复设置，也就是设置「对话」。

下面，我们将从具体的使用场景来介绍，如何通过「对话管理」来让机器人可以理解用户输入的文本内容，并同用户进行「对话」

## 基本概念介绍

### 语境

即用户会话的上下文。使用语境，可以帮助我们在复杂的对话中，更好地理解用户的意思，从而提供更智能的回复。

#### 语境的有效期

每个语境，都有一个「有效期」，即在设定的规则范围内，该语境生效；在设定的规则范围外，该语境失效。 目前，我们支持「有效期限」的设置方式包括：&#x20;

1\. 对话时间：从用户进入这个语境里开始计时，当用户在当前语境下的累计时长超过您设定的时间时，则当前语境失效，用户会自动跳转回默认语境。

2\. 用户发送的消息数：用户可以触发该语境下 Fallback 的次数。如果用户在一个语境下反复提问均无法得到您设置好的回复，只能走 Fallback 时，当 Fallback 触发的次数达到了您设定的范围，则当前语境失效，用户会自动跳转回默认语境 设置好有效期限，可以防止用户一直陷入死循环中，从而可以根据实际情况开始新的对话。

这两个条件，可以任选其一，也可以两者都选，然后设置成“或”或者“且”的关系。

![鼠标 Hover 到您想设置的语境上方，点击「设置」按钮](https://3545383198-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LBxiFMKIFEMsz8J7IuU%2F-LJmhwh-CikNzVVlQJol%2F-LJmjGFKohLpFRQX_Yo8%2Fimage.png?alt=media\&token=fa3c25dc-5a97-49e9-90a6-c89268a4020d)

![在这里，您可以修改语境的名称 和 有效期](https://3545383198-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LBxiFMKIFEMsz8J7IuU%2F-LJmhwh-CikNzVVlQJol%2F-LJmioSaZdAXYw5qFBnE%2Fimage.png?alt=media\&token=08737e52-15b2-4902-a995-0b6df545dd92)

值得注意的是：

1. 新建的语境我们会默认把有效期限设置为：当对话时间超过20分钟后，当前语境失效
2. 「默认语境」不支持修改有效期限

## 对话基本概念

一个完整的对话，需要至少包括：

![对话详情页](https://3545383198-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LBxiFMKIFEMsz8J7IuU%2F-LJq87X0gKdTsu8s5OKH%2F-LJmkq-8VyE_6wJDCuHH%2Fimage.png?alt=media\&token=d4858d74-12ee-4e49-96c2-16f3e28f85cf)

&#x20;**1. 当前语境**：用户当前所在的语境。 用户同机器人开始对话后，则他一定会在一个「语境」中。我们给所有机器人都预置了一个「默认语境」（将在下文继续讲述如何使用）&#x20;

**2. 用户说**：即在「当前语境」下，用户输入了哪些内容，会触发相应的回复内容或者语境的改变 我们目前支持两种处理方式，关键词与意图。

* 关键词：您可以在这里输入多个关键词，并选择一个匹配方式。当用户输入的内容与您设置的关键词相匹配时，则会触发后续的内容；
  * 模糊匹配：用户输入的内容和您设置的关键词大体一样
  * 精确匹配：用户输入的内容和您设置的关键词一模一样（不区分大小写）
  * 包含匹配：用户输入的内容「包含」您设置的关键词
* 意图：如果您配置了 NLP 引擎，则可以在这里选择您已经训练好的意图，通过 NLP 引擎来识别用户输入的内容。

**3. 机器人回复内容块**：即当用户输入的内容符合「用户说」的设置时，机器人会回复什么内容块。您也可以不设置任何内容块，则意味机器人不回复任何内容。

**4. 后续语境**：即当用户输入的内容符合「用户说」的设置时，需要从「当前语境」切换到哪一个「后续语境」。

## **基本的对话设置**

### **默认语境**

系统为您的机器人预置了一个「默认语境」，当用户同机器人开始对话后，则会自动进行「默认语境」。您可以在「默认语境」中设置一些基本的「对话」，来响应用户输入的内容。

### **场景：响应用户输入的问候语**

#### 场景描述

希望当用户输入类似于“Hi”，”Hello” 的短语时，回复用户“欢迎消息”

#### 场景设置

1. 前往「人工智能」 -> 「对话管理」
2. 在中部「默认语境」这个组下面，点击「+对话」，输入名称“问候语”
3. 在右侧「对话设置」页面，「用户说」这个区域内，选择「模糊匹配」，然后在后面的输入框中输入“Hi”，点击回车后输入下一个关键词 “Hello”
4. 「机器人回复内容块」中，选择「欢迎消息」
5. 「后续语境」选择「默认语境」
6. 确保开关打开，并点击「保存」按钮

![](https://3545383198-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LBxiFMKIFEMsz8J7IuU%2F-LJq87X0gKdTsu8s5OKH%2F-LJmllP9e0zagvbsiaQO%2Fimage.png?alt=media\&token=e3598a23-4b9e-452c-ace7-d6b023062297)

#### 场景测试

![](https://3545383198-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LBxiFMKIFEMsz8J7IuU%2F-LJq87X0gKdTsu8s5OKH%2F-LJmrurjkzDzQ-aYQwNJ%2Fimage.png?alt=media\&token=e138bdb4-32b5-42ea-bdd7-c75aba27c1a4)

### **Fallback**

当用户在一个「语境」下，只有触发了您在该「语境」设置中的一个「用户说」，才可以得到相应的「机器人回复」。但，我们总会遇到用户说的内容系统暂时无法覆盖的情况。对于这种情况，我们可以使用 Fallback，设置一个回复来处理用户的问题。

这样，当用户在这个语境下说的内容无法被机器人理解的时候，就会触发 Fallback 的对话设置，给到相应的回复。 每个语境在创建的时候都会有一个 Fallback 对话，您可以配置这个对话里，希望机器人回复的内容和后续语境（我们建议设置为当前所在的语境）。

{% hint style="info" %}
原有的「默认回复」，现在的 Fallback

如果您是之前在使用 Bothub 产品的用户，一定记得在「内容管理」-「系统内容」中有一个叫做「默认回复」的设置。如果您仍需要设置一个回复内容，来处理用户说的内容无法识别的情况，则可以在不同的语境下设置各自的 Fallback 即可。
{% endhint %}

### **场景：设置引导内容，引导用户**

#### 场景描述

希望当用户输入了机器人目前不能理解的问题时，委婉地回复用户等待人工客服的解决。

#### 场景设置

&#x20;1\. 在「内容管理」 -> 「自定义内容组」中，添加内容块 “引导内容”。在内容块中设置，当机器人无法理解用户的内容时，您希望回复给用户的消息；&#x20;

2\. 前往「人工智能」 -> 「对话管理」，在中部「默认语境」这个组下面，点击“Fallback”

&#x20;3\. 「机器人回复内容块」中，选择「引导内容」

&#x20;4\. 「后续语境」选择「默认语境」&#x20;

5\. 确保开关打开，并点击「保存」按钮&#x20;

![](https://3545383198-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LBxiFMKIFEMsz8J7IuU%2F-LJq87X0gKdTsu8s5OKH%2F-LJmsGbE_Jl1uoWVe_z8%2Fimage.png?alt=media\&token=7495fa94-9594-4c43-8850-9801377b1ced)

#### 场景测试&#x20;

![](https://3545383198-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LBxiFMKIFEMsz8J7IuU%2F-LJq87X0gKdTsu8s5OKH%2F-LJmsPbwZnPdlrrY9e6-%2Fimage.png?alt=media\&token=54d3c4cb-4185-4483-8714-a307f5aaaf99)

## 高级对话设置

我们在上文讲述了如何使用「对话管理」，来让机器人可以回复基本的用户输入的内容，但实际的场景可能会比较复杂。 下面，我们将从两个常见的实际场景开始，来讲述如何通过设置「语境」来解决用户的实际问题

### 场景一：同一个意图或关键词，在不同语境下给到不同回复

假设我们在运营一个酒店类的机器人，一个常见的用户问题是询问价格。当用户询问“Can you tell me the price?”的时候，可能是询问酒店房间的价格，也可能是询问餐厅的价格。如果没有区分不同的语境的话，则往往需要二次询问用户才可以确定用户到底在问哪个的价格。

通过设置场景，我们可以支持用户在不同场景下，询问相同的问题，可以根据用户当前场景直接给到正确的回复，而不需要再次询问。

#### 场景设置&#x20;

1\. 新建内容块，分别设置当用户询问「酒店价格」与「餐厅价格」的相应回复&#x20;

2\. 新建两个语境：点击「+语境」，输入「预订酒店」与「预订餐厅」 。在「预订酒店」与 「预订餐厅」语境中，分别新建对话，设置当用户询问价格时的回复&#x20;

![预订酒店语境](https://3545383198-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LBxiFMKIFEMsz8J7IuU%2F-LJq87X0gKdTsu8s5OKH%2F-LJmxxWA3pL4SJNYaHTw%2Fimage.png?alt=media\&token=042d91b1-c373-44e6-8955-af50aac33ca4)

![预订餐厅语境](https://3545383198-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LBxiFMKIFEMsz8J7IuU%2F-LJq87X0gKdTsu8s5OKH%2F-LJmy35tbspHFDNrUEbJ%2Fimage.png?alt=media\&token=3e994517-b7ed-4083-a935-0bd0a7713c40)

3\. 「默认语境」下设置对话「预订酒店」与 「预订餐厅」，来决定当用户输入什么内容的时候将进入相应的语境

![默认语境-预订酒店](https://3545383198-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LBxiFMKIFEMsz8J7IuU%2F-LJq87X0gKdTsu8s5OKH%2F-LJmwHSbgp6710r7YBxN%2Fimage.png?alt=media\&token=f94bb308-da3f-4850-ae51-9b0c2a6b3b48)

![默认语境-预订餐厅](https://3545383198-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LBxiFMKIFEMsz8J7IuU%2F-LJq87X0gKdTsu8s5OKH%2F-LJmwJRa3B_gvHIFUJJ1%2Fimage.png?alt=media\&token=7e102748-2342-4de2-b3ba-f55ecf5296ea)

#### 场景测试

![预订酒店的场景下，询问价格时](https://3545383198-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LBxiFMKIFEMsz8J7IuU%2F-LJq87X0gKdTsu8s5OKH%2F-LJmyc-2cVGtB0zWvUcW%2Fimage.png?alt=media\&token=e9235f3e-52ef-41ac-a11b-a46ffb63a0a2)

![预订餐厅的场景下，询问价格时](https://3545383198-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LBxiFMKIFEMsz8J7IuU%2F-LJq87X0gKdTsu8s5OKH%2F-LJmyfwf8McjXaJQUG5t%2Fimage.png?alt=media\&token=46574a6b-9c12-462d-b50f-2477bd00e5fb)

### 场景二：从用户输入的内容中，提取有效的参数并引用

当用户预订完酒店，需要查询「预订状态」的时候，需要根据用户的订单号码或者留下的邮箱地址来查询。

为了实现上述内容，我们需要引入一个新的概念「参数提取」

#### 参数提取

1. **提取与引用：**&#x5373;您需要在用户输入的内容中提取到的参数，常见的场景是「预订单查询」。如果用户输入的内容符合「预订单查询」这个意图，则他需要输入自己的「预订单号」才可以成功查询到内容。这时，您就可以使用「参数提取」，来设置您需要提取的参数，并保存成一个自定义名称。接着，在后续的「机器人回复」的内容块中，引用这个参数即可。
2. **参数存储在「语境」或者「全局」**&#x20;
   1. &#x20;对于像“订单号码”、“物流号码”等用户会经常修改的信息，我们建议存储在「语境」中。这意味着，只有当用户在这个「语境」下的时候，这个参数才生效，才能被内容块引用；且当用户离开这个「语境」的时候，这个参数便失效。&#x20;
   2. 对于像“邮箱地址”“账号名称”等用户很少会修改的信息，我们建议存储在「全局」中。这意味着，即使用户离开了这个「语境」，这个参数也一直生效，可以被任意内容块引用。
3. **提示：**
   1. 当您设置了「参数提取」的规则后，我们的系统会在触发「用户说」的那一句用户输入的内容开始提取有效的参数。但实际上，用户可能不会在第一句话中就带有有效的参数。因此，您可以通过设置「提示」，来提示用户需要填写哪些参数（比如，订单号）。
   2. 「提示」的内容需要通过选择「内容块」来设置。您可以设置多个内容块，所有内容将会按照顺序依次呈现，每个内容块只呈现一次，直到参数成功提取。
4. **失败时提示：**&#x6240;有「提示」内容都呈现之后，仍没有成功提取到参数，则当前对话会失效，会触发此处设置的「失败时提示」内容（也是选择一个内容块）并自动跳转回「默认语境」。

![](https://3545383198-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LBxiFMKIFEMsz8J7IuU%2F-LJq87X0gKdTsu8s5OKH%2F-LJmztiGtM6HMNDqR7m0%2Fimage.png?alt=media\&token=65bb7784-a5cc-4590-a7d2-2defab96dd33)

**场景设置**

1\. 在「内容管理」中添加内容块，用来查询和回复用户的预订单信息

2\. 在「默认语境」里添加对话「预订查询」

3\. 设置参数提取：添加一个必填项，选择格式为「正则表达式」并输入订单号的格式，设置存储为的参数名称为{{order\_num}}，添加一句「提取失败时询问」，点击保存。

![](https://3545383198-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LBxiFMKIFEMsz8J7IuU%2F-LJq87X0gKdTsu8s5OKH%2F-LJn-rshF7lt8_9jn6Xw%2Fimage.png?alt=media\&token=142749ad-eee1-434a-97ca-f4d294492338)

**场景测试**

![](https://3545383198-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LBxiFMKIFEMsz8J7IuU%2F-LJq87X0gKdTsu8s5OKH%2F-LJn0ALGxlwW84kEiJS4%2Fimage.png?alt=media\&token=b4319bf3-80f7-4d9a-ab66-3d25b9f0c7b9)

### 场景三：全局对话，全局生效

比如，您希望当用户输入了一些负面情绪的内容，比如“I’m angry”，则立刻转接人工客服。 这时，您可以在「全局对话」进行设置。

「全局对话」中设置的对话规则，是当用户无论在哪个场景下，都可以触发的。

**场景设置**

1\. 在「内容管理」中添加内容块，设置当用户生气时给到的回复

2\. 在「全局对话」里添加对话「愤怒情绪处理」

&#x20;3\. 设置参数提取：添加一个必填项，选择格式为「正则表达式」并输入订单号的格式，设置存储为的参数名称为，添加一句「提取失败时询问」，点击保存。

![](https://3545383198-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LBxiFMKIFEMsz8J7IuU%2F-LJq87X0gKdTsu8s5OKH%2F-LJqQOl5Ur3AG4axuIWh%2Fimage.png?alt=media\&token=5eecb181-14ea-445d-8b59-827de9bfa236)

**场景测试**

![当用户在「默认语境」中，输入了可以触发「全局对话」的内容，会给到相应回复](https://3545383198-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LBxiFMKIFEMsz8J7IuU%2F-LJqR8Dybrdpetc7aKSJ%2F-LJqRAo-U0GDfjHs_GEJ%2Fimage.png?alt=media\&token=60d9c130-ade4-46b4-95e9-2f8a2a42bf15)

![用户在「预订酒店」语境下，输入可触发「全局对话」的内容，也会给到相应回复](https://3545383198-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LBxiFMKIFEMsz8J7IuU%2F-LJqR8Dybrdpetc7aKSJ%2F-LJqRVfe-ddFgEtuYzZ5%2Fimage.png?alt=media\&token=6291765c-d848-4283-8427-27bb17e3b8ea)

#### 需要注意的⚠️： <a href="#xu-yao-zhu-yi-de" id="xu-yao-zhu-yi-de"></a>

* 全局对话的识别优先级高于默认语境与其他语境，意味着在全局和默认语境下设置相同意图或关键词的对话，全局下的对话会优先进行识别。
* 除全局对话与默认语境之外，其他新建语境下的对话，需要勾选“设置为入口对话”，才能开启识别效果，否则只能通过成为“后续语境”来开启入口。

![G\_general\_problem语境下的对话G\_general\_problem](https://3545383198-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LBxiFMKIFEMsz8J7IuU%2F-LTLr6B6K7G-pkuzBlaL%2F-LTLssX0ppUxkMQBJsYN%2F10.png?alt=media\&token=c6d8b538-ff01-474d-9358-f46d7e03cc89)

使用「对话管理」，我们可以配置内容来处理「用户输入」的消息。对于用户「点击按钮」的消息，我们则可以使用「语境跳转插件」来处理语境和对话的切换。

{% content-ref url="/pages/-LM0JOmrdvVQPdb2flu8" %}
[语境跳转插件](/project/advanced-tool/plugin/yu-jing-tiao-zhuan-cha-jian.md)
{% endcontent-ref %}
