上传intent数据

什么是intent?intent 是搜索需求(搜索词)的正规化和结构化的 JSON 表示,在每个卡片的 intent 有其特定的结构。例如,”景点门票“卡片下,intent 的结构是 {“scenic_spot”:””}。那么,”故宫怎么买票“这个搜索词表达成 intent 就是:{“scenic_spot”:”故宫”}

intent有什么用?用户在搜索框中输入的搜索词表达方式多种多样,需要经过复杂的语义分析才能确定用户的意图。例如同样是查故宫门票,有人搜”故宫门票“,有人搜”故宫买票“,可能还有人搜”故宫怎么买票“。如果我们将原始搜索词发送给开发者,那就意味着所有的开发者都需要实现复杂的语义分析,才能确定用户的意图。为了降低开发者的实现代价,我们将分析出来的正规化 intent 而不是原始搜索词发送给开发者服务。开发者只需要用 intent 中正规化的参数进行简单的 KV 或者数据库检索即可命中需求数据。例如原始搜索词: “故宫门票“ 、 “故宫买票“和”故宫怎么买票“,经过我们意图分析它都是景点门票类需求,对应到”景点门票“卡片;通过语义分析出来的 intent都是 “{“scenic_spot”:”故宫”}“。这样开发者收到的请求参数就很简单,对于这些搜索词都只需要用”故宫“做数据库检索就好。

由于各类目的 intent 结构不同,开发者在上传 intent 前需要阅读对应的接入细则,确定该类目 intent 的数据字段。同时,开发者需要根据小程序本身的资源覆盖情况,确定能够提供的所有 intent 字段组合。

当前支持使用 txt 文件上传,开发者需要将所有 intent 序列化后的 JSON 串写入 txt 文件中。上传intent数据 - 图1

为避免解析出错,我们对 txt 文件格式有以下要求:

  • 编码采用 UTF-8 无 BOM 编码;
  • 文件大小不得超过 4MB,超过 4MB 的请选择使用 API 上传;
  • 换行符使用 Linux 风格,使用 \n 表示一行的结束;
  • 每行一个完整的 JSON 序列化串,JSON 串中不得有换行、TAB 等不可打印字符;
  • 当 intent 要求多个 key 时,JSON 里必须含有所有 key,部分 value 内容可以为空;
  • 内容不得有重复的行,除尾部外不得有空行。

例如:景点门票卡片下的 intent 仅要求一个景点名字段,开发者需要将小程序覆盖的所有景点名都列入到上传的 txt 文件里,形如:

{“scenic_spot”:”故宫”}{“scenic_spot”:”故宫博物院”}{“scenic_spot”:”天坛”}{“scenic_spot”:”颐和园”}…