A
Alice
四季酱,我喜欢你
四季酱
你就是桃饱网大会员?
TIP
本页中默认机器人的昵称为“四季酱”。
我们有时也希望某些回答按照特定的概率进行触发。这个时候我们可以使用 -p prob
的语法进行设置。例如 # 问题 回答 -p 0.2
设置的问题的触发概率即为 20%。
那么如果一个问题存在多个回答,每个回答的触发概率又是如何计算的呢?Koishi 会求出所有问答的触发概率之和,因此得到两种处理方式:
举个例子。如果一个问题有两个回答,概率分别为 0.3 和 0.5,则实际操作中这两个回答的触发概率就是 0.3 和 0.5。但是如果一个问题有两个回答,概率分别是 0.6 和 1,因为总概率超过 1,因此两个问答的触发概率将被标准化,实际操作中它们的触发概率分别为 0.375 和 0.625 以保证总概率正好为 1。
Koishi 的指令可以通过 @bot 或使用昵称进行调用。同理,教学系统中也有一套类似的机制用于匹配含有称呼的指令。
我们认为,每一个问题都拥有两个概率,一个是严格匹配(说是严格实际上包含了上文所介绍的 模糊匹配 机制),我们称为概率 S;另一个是称呼匹配,我们称之为概率 A。我们举一些例子:
这里对前缀的严格定义是,一个问题以称呼开头,且之后还有其他字符。因此昵称本身不属于含有前缀的问题。
当一个问题被创建或修改时,-p 会被理解成概率 S,-P 会被理解成概率 A。如果问题存在前缀,则其将被删除,且默认概率为 p=0, P=1;否则默认概率为 p=1, P=0。当机器人收到一条消息时,如果该消息含有前缀,则其将被删除。之后正常获取可能触发的问答列表。如果之前没有删除前缀,则使用这些问答的概率 S 执行上文中的概率机制;否则使用这些问答的概率 A 执行上文中的概率机制。
举个例子,假设问答 1 和问答 2 的问题都是“早上好”,且问答 1 的触发概率为 S=0.6,A=0.8,问答 2 的触发概率为 S=1,A=0。则输入“早上好”时,问答 1, 2 分别取概率 0.6, 1,最终经过标准化,以 0.375 的概率触发问答 1,以 0.625 的概率触发问答 2。输入“@bot,早上好”时,问答 1, 2 分别取概率 0.8, 0,最终以 0.8 的概率触发问答 1。
上面已经介绍过了,昵称本身不属于含有前缀的问题,因此比较特殊。如果它本身作为问题被触发,则该会话的短时间内,即使没有前缀,获得的问题也会取 S, A 两个概率的最大值为最终概率。为什么这样设计呢?因为现实中,许多人会把话拆开说。举下面的例子:
我们可以看到,虽然单独的“我喜欢你”不能触发“你就是桃饱网大会员”的回应(S=0),但是如果“我喜欢你”紧跟在一句“四季酱”之后,显然这句话是对机器人说的。因此在 Koishi 的教学系统中,称呼问题本身能够激活当前会话的 A 概率。
如果要重定向到称呼匹配的问答时,请在目标问题上也加上前缀,否则将无法触发下一个问题。例如,下面的例子将无法工作:
反过来,利用这种特性,我们也可以实现一些更加高级的效果。假如我们希望构造一个问答,使得其在正常情况下只能带称呼触发;但是在特定问题触发后可以不带称呼触发(参见 前置和后继机制)。在正常情况下这是做不到的,因为 Koishi 不会接受问题和回答都相同的两个教学问答。但有了重定向语法之后,只需结合重定向语法和后继机制就可以实现这种需求: