# 基础概念

技能的交互逻辑可以通过创建语言交互模型实现。 用户的请求在交互模型中通过一个或多个意图来表示。意图是技能实现用户请求的基本单元，意图中包括槽位、问法等概念。与用户交互过程中的多轮对话在交互模型中通过对话模型来体现，包括必填槽位的追问、槽位意图的确认、上下文等。本文阐述技能配置环节相关基础名词解释。



## 意图 Intent

意图就是用户在说每个指令的时候，想要做的事情。例如用户说“嗨小微，今天天气怎么样？”时，他的意图就是查询天气。同时查询天气这个意图包含的不仅仅是代表刚刚那一句话，而是所有【问法】相关句式的合集。

![Skill、意图和槽位](https://res8.wxqcloud.qq.com.cn/wxdoc/5b8e507c-b26c-46d0-adea-8836d5704c60.jpg)

一个技能里可以包含多个意图，一个意图可以包含多个关键字。这些关键字称为槽位，这部分会在后续的`槽位`章节说明。例如在音乐这个技能里，可以包含点播、询问歌名、收藏歌曲、分享歌曲这4个意图。而在天气技能里可以包含普通询问、下雨查询、空气质量查询这3个意图。意图的数量完全有技能的开发者定义。

![Skill、意图和槽位分析](https://res8.wxqcloud.qq.com.cn/wxdoc/2a78ba1d-74cc-43a5-a6b3-a060b65e1f16.jpg)

在音乐技能里，用户说“我要听周杰伦的歌”就会被匹配到点播意图中。“这是什么歌”则会被匹配到询问歌曲名称这个意图。这意图和用户说的话中间的对应关系由各个意图里填写的句式定义，这部分会在后续的`问法句式`章节说明。



### 问法句式

技能的可用性完全依赖句式和意图的匹配。如果开发者能够提供更多更口语化的句式，系统将会更准确得匹配意图。开发者最好能提供不同的用户说法，覆盖用户的不同语法形式。

开发者需要预设好用户在对话中，可能会使用各种语法类型，例如：

问句式：

> 今天有什么体育新闻？
>
> 有没有体育新闻？

命令式：

> 播放体育新闻。
>
> 我要听体育新闻。

名词式：

> 体育新闻。
>
> 今天的体育新闻。

但是不需要填写所有的槽位值，例如：

>我想查询北京的天气；
>
>我想查询上海的天气。

以上两句可以使用槽位合并为："我想查询{城市}的天气 "。但是：“我想查询{城市}的天气”和“{城市}天气怎么样”，是两个不同的句式，需要分开填写。



### 正则规范

为了方便开发者快速编写句式相同的用户问法，平台支持在问法中使用正则规范：“()”、“|”、“&&”三种规则符号。

```text
"()"=条件分隔：
将用户问法分割为多个条件，必选符号，必须成对出现，不允许嵌套；

”{}“=槽位
可通过大括号来描述槽位

“|” =或：
定义条件可选，仅出现在括号内；

“&&”=无序：
调试条件之间可以相互替换位置；
```

注：以上正则符号均必须为英文符号。



**例如：**

> (打开|想看|)&&(视频)({节目名称})

- 表示当前规则有三个条件：(打开|想看|)、(视频)、({节目名称})

- 其中(打开|想看|)条件最后的“|”表示的是可选条件，“想看”和“打开”出现一个即可； (视频)({节目名称})是必选条件，即用户问法中“视频”和“{节目名称}”必须都出现才能命中。

- &&表示前后两个条件是无序的，即“想看视频…”、“视频打开…”均可以命中；

- (视频)({节目名称})表示这两个条件是有序的，必须连续出现才能命中，即“视频xxx”可命中，“xxx视频”不可命中。



### 槽位 Slot

某些意图里会包含和意图强相关的关键字，这些关键字称为槽位，例如点播意图可以包含歌手名槽位。

[](http://qzonestyle.gtimg.cn/qzone/vas/opensns/res/img/intentandslot2.jpg)

一个意图里可以包含多个槽位，例如查询天气的意图必须包含时间和地点两个关键字才能完成，也就是包含了时间和地点这两个槽位。当然时间我们可以默认是当前时间，地点我们可以根据设备的位置获得，所以这两个槽位是非必须的槽位，用户可以不提供。

每个槽位必须关联词典，一个槽位可以同时关联多个词典。



### 槽位追问

但是如果用户要发送微信消息，发送的对象会是一个必须的槽位，如果用户不提供发送的对象，这个任务将无法完成。您可以在小微技能平台上设置某个意图是否必须，被设置成必须的槽位如果用户没有提供，机器人会自动反问用户槽位内容（可配置多条，追问时随机选取）。

**例如：**

在查询星座幸运数字时，如果用户问法是“我要查星座幸运数字”，而没有提供星座类型，该任务也就无法执行。若开发者配置追问话术后，系统就会向用户发送追问语句以获取该语义槽值。





## 词典

词典是一个规范的自然语言短语集合，通常定义为应用所在领域的术语的集合，可用于用户说法中的关键信息提取和语义槽调用。例如“刮风”、“降雨”属于“天气”这个词典，“跑步”、“游泳”属于“运动”这个词典。每个词典均可在多个技能中重复使用。



### 系统词典

系统词典以" sys."为标识，是平台为开发者预置的词典（如：时间、数字、国家、城市等）。可直接使用，但不支持编辑。每个系统词典内已包含丰富的词条，平台提供了词条示例，便于开发者理解系统词典含义。

**例如：**

“商场8点开门吗”和“商场9点开门吗”，这两句用户问法中，时间点就是可以不断变化的关键词，我们就可以用一个系统词典  {sys.具体时间点} 来代替用户可能询问的所有时间点。即可写成：“商场 {sys.具体时间点} 开门吗”，这样用户再问 商场任一时间点开门吗 都能匹配到。



### 自定义词典

如果系统词典不能满足技能开发需要，开发者还可以创建自定义词典，自定义词典以 user.为标识，开发者可根据需要，增删改词典和词条。

例如星座建议的技能需要一个槽位类型是星座名。这时候开发者可以新建一个自定义的词典，名字由开发者自定义，比如“constellation”，同时需要在平台上配置该“词典”对应的“词条”内容。

| constellation的值 |
| :---------------: |
|      白羊座       |
|      金牛座       |
|      双子座       |
|      巨蟹座       |
|      狮子座       |
|      处女座       |
|      天秤座       |
|      天蝎座       |
|      射手座       |
|      摩羯座       |
|      水瓶座       |
|      双鱼座       |

注意：新建自定义词典时，一定要把这个类型所有可能的值都填写全，避免意图识别的错误。



### 同义词

一些词典中的词条值包含多种同义词，可以在词条中里添加上同义词。更全的同义词覆盖可以保证意图的更好的命中。例如：”中央一台“的同义词可以包含：”中央一套“、”中央电视台“、”中央一台“、”中央广播电视台“、”央视一套“、”央视一台“，等等。
