跳到主要内容
返回课程

第 4 周 · 第 1 课 · 50-60 分钟

搭一个基于规则的聊天机器人

用老派的方式设计一个聊天机器人,靠关键词、意图和决策树,并发现它为什么需要一条兜底回复,来应付所有它没被设计去处理的情况。

材料
在网页浏览器中打开的这节课 · 纸和笔,或者一个记事应用
本课
进行中

会自动保存在这台设备上

你将能够做到

  • 说明基于规则的聊天机器人如何用关键词猜出用户的意图。
  • 把一组意图和回复画成一棵决策树。
  • 说明聊天机器人为什么需要一条兜底回复,来应对它听不懂的消息。
  • 把基于规则的聊天机器人和从样例中学习的人工智能作比较。

想一想

一家比萨店的聊天窗口对「你们几点关门?」立刻作答,可当你打「你们开到什么时候?」时,它却回「抱歉,我没听懂」。这两个问题意思一样。为什么一个管用,另一个却失灵?

记住你的猜想,到最后你就能准确说出问题出在哪里。

做个预测

预测一下:如果一个聊天机器人只认识关键词「关门」,顾客能用多少种不同的说法问到打烊时间,却一次都不用这个词?

关键词
聊天机器人在消息里寻找的重要词语,用来弄清这个人想要什么,比如「营业时间」或「价格」。
意图
这个人真正想做或想问的事情,比如「查营业时间」,哪怕他用了很多不同的说法。
决策树
一组分叉的「是/否」或「如果/那么」选择,把一条消息一路引到一个回复,就像流程图一样。
兜底回复
当聊天机器人没匹配上任何关键词或意图时给出的保底回答,比如「抱歉,我没听懂。」

关键词:聊天机器人盯着的那些词

基于规则的聊天机器人并不像你那样理解语言。相反,是由人给它一份要寻找的关键词清单。当你的消息里含有「营业时间」「开门」或「关门」这样的关键词时,机器人就挑出人为那个词写好的回复。

这样又快又好预料,但很脆弱。如果你换个说法问同一件事,关键词不在其中,机器人就完全察觉不到。

  • 关键词「营业时间」→ 回复营业时间
  • 关键词「价格」或「多少钱」→ 回复菜单价格
  • 关键词「退款」→ 回复退换货政策

意图:这个人真正想要的东西

词语背后是意图,也就是这个人真正想做的事。「你们几点关门?」「你们开到很晚吗?」和「你们开到什么时候?」是三句不同的话,却只有一个意图:查清营业时间。

好的聊天机器人设计,会把许多关键词和说法归到同一个意图之下。你给一个意图挂上的关键词越多,机器人能接住的提问方式就越多,但仍然得由人事先把它们都想到。

  • 意图「查营业时间」匹配的关键词:营业时间、开门、关门、打烊、多晚、什么时候
  • 意图「找地址」匹配:在哪、地址、怎么走、位置
  • 意图「下单」匹配:下单、买、外送、自取

决策树与兜底回复:把一条消息送到一个回复

基于规则的聊天机器人沿着决策树走:先查第一个意图的关键词;找到了就给出那个回复;没找到就查下一个意图,依次沿着分支往下。每个分支的末端,都是一条由人写好的回复。

但没有哪份关键词清单能覆盖所有可能的消息。当什么都匹配不上时,这棵树就走到了最后一个分支:兜底回复。它是一句诚实的「我没听懂」,在好的设计里还会加上一点提示,说明机器人能帮上什么。要是没有兜底回复,一条没匹配上的消息就会得不到任何回应。

  • 消息「你们开到什么时候?」里没有「营业时间」这个关键词 → 落到兜底回复
  • 兜底回复:「抱歉,我可以帮你查营业时间、地址和订单。可以试着问问这几项。」

例题讲解

跟着一条消息走过这棵树

  1. 有人给机器人设好了三个意图:「查营业时间」(关键词:营业时间、开门、关门)、「找地址」(在哪、地址)和「下单」(下单、外送)。
  2. 一位顾客打字:「大号比萨多少钱?」
  3. 分支 1:里面有营业时间、开门或关门吗?没有。继续。
  4. 分支 2:里面有在哪或地址吗?没有。继续。
  5. 分支 3:里面有下单或外送吗?没有。继续。
  6. 没有任何分支匹配上,于是这棵树走到兜底回复:「抱歉,我没听懂。我可以帮你查营业时间、地址和订单。」而顾客真正想要的是价格,那是一个从没被赋予机器人的意图。

要点:基于规则的机器人只能回答有人事先设好的意图;其他任何内容都会落到兜底回复,哪怕在人看来那个问题清清楚楚。

基于规则的聊天机器人如何把消息导向回复

收到的消息

  • If 提到营业时间、开门或关门:

    回复:「我们上午 11 点到晚上 10 点营业。」

  • If 提到在哪或地址:

    回复:「我们在主街 5 号。」

  • If 提到下单或外送:

    回复:「上网下单或拨打 555-1234。」

  • If 以上都没匹配上:

    兜底回复:「抱歉,我没听懂。我可以帮你查营业时间、地址和订单。」

一棵决策树,从顶部收到的消息开始,向下依次经过每个意图的一次判断。节点 1 问:「这条消息里有营业时间、开门或关门吗?」如果有,该分支止于回复「我们上午 11 点到晚上 10 点营业。」如果没有,就往下到节点 2:「里面有在哪或地址吗?」如果有,该分支止于「我们在主街 5 号。」如果没有,就到节点 3:「里面有下单或外送吗?」如果有,该分支止于「上网下单或拨打 555-1234。」如果没有,最后一个分支就是兜底回复:「抱歉,我没听懂。我可以帮你查营业时间、地址和订单。」每一个「是」分支都是一片叶子,带着人写好的回复;最后那个「否」分支永远是兜底回复,好让任何消息都不会没人应答。

每个意图就是一次判断;最后一个分支是兜底回复,接住所有没匹配上的内容。

同一个意图,许多种说法
顾客的消息找到关键词了吗?结果
你们几点关门?关门匹配「查营业时间」
你们开到很晚吗?开门匹配「查营业时间」
你们开到什么时候?none落到兜底回复
还在供餐吗?none落到兜底回复

一张表,显示同一个意图「查营业时间」可以有很多种问法。各行:「你们几点关门?」含有关键词「关门」,所以匹配上了。「你们开到很晚吗?」含有「开门」,所以匹配上了。「你们开到什么时候?」不含任何列出的关键词,所以没匹配上,落到兜底回复。「还在营业吗?」同样不含任何列出的关键词,也没匹配上。这一课的启示是:多加关键词能接住更多说法,但得由人把它们全都想到。

活动

基于规则的聊天机器人搭建器

从一个模板出发,搭出一个能用的基于规则的聊天机器人,包含意图、关键词、一个追问分支和一条兜底回复,并在实时预览中测试它,预览会明确显示是哪条规则匹配上了。

  1. 先选一个模板,然后编辑欢迎语、意图(关键词 + 回复)、一个追问分支,以及兜底回复。
  2. 留意决策树的结构图和检查结果:死路、无法到达的节点,以及缺少兜底回复。
  3. 在实时预览里测试你的机器人:试试普通问题、意料之外的输入,以及要求找真人。

从模板开始

回答开放时间、借书和借书证的问题。

搭建你的机器人

意图(按顺序检查)

  1. 追问分支

决策树结构

  • ▸ Welcome: Welcome to the school library helper! I can help with hours, renewing a book, or getting a library card.
  • If keyword [hours, open, close, time] → Opening hours
  • If keyword [renew, overdue, extend, keep] → Renew a book
    • ? Is your book already overdue? (type 'yes' or 'no')
    • → [yes, overdue, late] Overdue
    • → [no, not] Not overdue
  • If keyword [card, join, sign up, register] → Library card
  • ▸ Fallback: Sorry, I didn't catch that. I can only help with a few topics — try a keyword, or type 'help' to reach a person.

检查

所有检查都通过:没有死路、没有到不了的节点,也不缺兜底回复。

实时预览

Please don't type personal information (full name, address, phone). I only answer general questions.

发一条消息来测试你的机器人。可以试关键词、意料之外的消息,或者「找真人」。

检查你的理解

回答这些题,检验你是否理解基于规则的聊天机器人怎样工作。

  1. Question 1. 在聊天机器人里,「意图」是什么?

  2. Question 2. 判断这句话是对还是错。

    基于规则的聊天机器人需要一条兜底回复,好让它匹配不上的消息也能得到某种回应。

  3. Question 3. 把基于规则的聊天机器人回复一条消息的各个步骤排成正确顺序。

    1. 1.收到来自这个人的一条消息
    2. 2.机器人逐个分支地,拿消息去比对每个意图的关键词
    3. 3.如果某个分支匹配上了,机器人就发出那个分支的回复
    4. 4.如果没有分支匹配上,机器人就发出兜底回复

已回答 0 / 3

自己动手试试

把你自己的聊天机器人难住

拿上你设计的聊天机器人,试着把它难住。找出三条真人可能会发、而你的关键词却接不住的消息。

  1. 写出三条消息,它们表达的都是你的机器人本该处理的意思,却避开了你所有的关键词。
  2. 把每一条都在你的树里走一遍,确认它确实落到了兜底回复。
  3. 对每一条判断:加一个关键词就能解决吗,还是它差别太大、根本没法靠规则接住?

做到这样就算成功

  • 三条消息,人一看就懂,却都落到了兜底回复。
  • 对每一条,都注明加个关键词能否解决。
  • 一个明确的、单靠关键词解决不了的例子。

反思

输入时会保存在这台设备上

请不要写私人信息。你的回答只保存在这个浏览器里,不会发送到任何地方。

小结

基于规则的聊天机器人用关键词匹配来猜出用户的意图,把消息沿决策树导向回复,并对所有匹配不上的内容使用兜底回复。

  • 关键词是机器人盯着的那些词;意图才是这个人真正想要的东西。
  • 决策树每个分支检查一个意图,最后止于一条兜底回复。
  • 基于规则的机器人只处理有人设好的意图,其余的全都会漏掉。

七至八年级延伸内容

从规则走向学习

大型的真实聊天机器人并不只靠关键词清单。许多都使用在成千上万条真实消息上训练出来的机器学习,因此即便是没人手工录入过的说法,它们也能识别出意图。

与你那个基于规则的机器人相比,说出基于学习的聊天机器人的一个优点和一个风险。想一想,如果训练用的消息里没有包含某些人的说话方式,会发生什么。

完成这一课

  • Attempt the knowledge check(未完成)
  • Save a reflection (recommended)(未完成)

先做一下知识检查,才能完成这一课。