跳到主要内容
返回项目

编程

一个只认识你家人的聊天机器人

用 Python 写一个只知道你家里的事、别的一概不懂的聊天机器人,然后拿同样的问题去问真正的人工智能助手,看看两者各自会在哪里出错。

中等 · 2小时

一个只认识你家人的聊天机器人

简介

一个什么都知道的聊天机器人令人惊叹,也几乎无法看懂。一个只知道你家狗的名字和你奶奶生日的聊天机器人,这两样都算不上,而这正是它值得动手做的原因。

你的机器人大约三十行 Python,写在本站的编辑器里,什么都不用安装。之后你会把你的机器人能回答的那些问题,原封不动地拿去问一个真正的人工智能助手,并记下各自在哪里翻车。

原理说明

你的机器人是在查表。它保存着一本事实字典,当一个问题和其中任何一条都对不上时,它就拿不出任何东西。大型语言模型做的是完全不同的事:它预测下一段可能出现的文字,这既是它几乎什么都能回答的原因,也是它有时会满怀自信地编造答案的原因。在你本来就知道正确答案的问题上,把这两种行为并排放在一起看,是理解这些工具究竟在做什么的最清楚的方式。

分步说明

  1. 1

    打开本站的 Python 编辑器,把下面的起始程序敲进去,或者直接粘贴。运行它,先问问那只狗。然后问一个它从没听说过的东西,看看它会怎么做。

  2. 2

    把三条事实全部换成你自己家里的真事。每个关键词都要短、要用小写,因为那正是你的机器人在问题里搜索的那个词。

  3. 3

    再加七条事实,凑成十条。每加两三条就运行一次,因为只加了两行的时候,找出漏掉的那个逗号要容易得多。

  4. 4

    试着把它弄坏。不用“狗”这个字去问那只狗。在一句话里问两件事。把每一个本该奏效却没奏效的问题都记下来。

  5. 5

    修好其中一处失败。让两个不同的关键词指向同一个答案是最简单的修法,比如让“狗”和你家狗的真实名字都返回同一条事实。

  6. 6

    现在在大人在场的情况下,把这十个问题原样问给人工智能助手。它根本不可能知道正确答案。不管它说什么,都照样记下来。

  7. 7

    填写对比表。你的机器人不知道的时候就会说自己不知道。记下助手在这种情况下会做什么,然后决定:在你要依赖的东西里,你更愿意要哪一种行为。

起始程序

三十行,每一行都能用手指出来它在干什么。最上面的字典就是你的机器人知道的全部内容;下面全都是读取问题并搜索匹配关键词的循环。

facts = {
    "dog": "我们家的狗叫 Pepper,今年4岁。",
    "car": "家里的车是一辆蓝色的本田。",
    "birthday": "奶奶的生日是3月2日。",
}

print("问我关于我家人的事吧。输入 bye 结束。")

while True:
    question = input("> ").lower()

    if question == "bye":
        print("回头见。")
        break

    answer = "这个我不知道。"

    for keyword in facts:
        if keyword in question:
            answer = facts[keyword]

    print(answer)

最重要的一行,是在搜索开始之前先把答案设成“这个我不知道”的那一行。正是这个默认值让你的机器人在没有内容时会承认自己不知道,而这恰恰是语言模型所没有的行为。

你的机器人对阵助手

十个你本来就知道正确答案的问题。每一个都要把四列都填满。

问题正确答案你的机器人说了什么助手说了什么
行 1, 问题行 1, 正确答案行 1, 你的机器人说了什么行 1, 助手说了什么
行 2, 问题行 2, 正确答案行 2, 你的机器人说了什么行 2, 助手说了什么
行 3, 问题行 3, 正确答案行 3, 你的机器人说了什么行 3, 助手说了什么
行 4, 问题行 4, 正确答案行 4, 你的机器人说了什么行 4, 助手说了什么
行 5, 问题行 5, 正确答案行 5, 你的机器人说了什么行 5, 助手说了什么
行 6, 问题行 6, 正确答案行 6, 你的机器人说了什么行 6, 助手说了什么
行 7, 问题行 7, 正确答案行 7, 你的机器人说了什么行 7, 助手说了什么
行 8, 问题行 8, 正确答案行 8, 你的机器人说了什么行 8, 助手说了什么
行 9, 问题行 9, 正确答案行 9, 你的机器人说了什么行 9, 助手说了什么
行 10, 问题行 10, 正确答案行 10, 你的机器人说了什么行 10, 助手说了什么

把助手给出了自信却不属实的答案的每一行都标出来。这种行为有个名字,叫幻觉,而这张表就是你亲手记录下来的证据。