智能代理需要有关现实世界的知识才能做出决策和推理以有效地采取行动。
基于知识的代理是那些能够保持内部知识状态、对该知识进行推理、在观察后更新知识并采取行动的代理。这些代理可以用一些正式的表示来代表世界并智能地行动。
基于知识的代理由两个主要部分组成:
知识库和
推理系统。
基于知识的代理必须能够执行以下操作:
代理应该能够表示状态、动作等。
代理应该能够融入新的感知
代理可以更新世界的内部表示
代理可以推断出世界的内部表示
代理可以推断出适当的动作。
上图表示基于知识的代理的通用架构。基于知识的代理(KBA)通过感知环境从环境中获取输入。输入由代理的推理引擎获取,并且还与 KB 通信以根据 KB 中的知识存储做出决定。KBA 的学习元素通过学习新知识定期更新知识库。
知识库:知识库是基于知识的代理的核心组件,也称为 KB。它是一个句子的集合(这里的“句子”是一个技术术语,它与英语中的句子不同)。这些句子用一种称为知识表示语言的语言来表达。高宝知识库存储有关世界的事实。
需要知识库来更新知识,以便智能体从经验中学习并根据知识采取行动。
推理意味着从旧句子中推导出新句子。推理系统允许我们在知识库中添加一个新句子。一个句子是一个关于世界的命题。推理系统将逻辑规则应用于知识库以推断新信息。
推理系统生成新的事实,以便代理可以更新知识库。推理系统主要按照以下两个规则工作:
正向链接
反向链接
以下是高宝为了显示智能行为而执行的三个操作:
TELL:这个操作告诉知识库它从环境中感知到什么。
ASK:这个操作询问知识库它应该执行什么操作。
执行:它执行选定的操作。
以下是基于通用知识的代理程序的结构大纲:
function KB-AGENT(percept): persistent: KB, a knowledge base t, a counter, initially 0, indicating time TELL(KB, MAKE-PERCEPT-SENTENCE(percept, t)) Action = ASK(KB, MAKE-ACTION-QUERY(t)) TELL(KB, MAKE-ACTION-SENTENCE(action, t)) t = t + 1 return action
基于知识的代理将感知作为输入并返回一个动作作为输出。代理维护知识库 KB,并且它最初具有一些现实世界的背景知识。它还有一个计数器来指示整个过程的时间,这个计数器初始化为零。
每次调用该函数时,它都会执行三个操作:
首先,它告诉知识库它所感知的。
其次,它询问 KB 应该采取什么行动
第三个代理程序告诉 KB 选择了哪个动作。
MAKE-PERCEPT-SENTENCE 生成一个句子作为代理在给定时间感知给定感知的设置。
MAKE-ACTION-QUERY 生成一个句子来询问当前应该执行哪个操作。
MAKE-ACTION-SENTENCE 生成一个句子,断言所选操作已执行。
可以在不同级别查看基于知识的代理,如下所示:
知识层是基于知识的智能体的第一层,在这一层中,我们需要明确智能体知道什么,以及智能体的目标是什么。有了这些规范,我们就可以修复它的行为。例如,假设一个自动出租车代理需要从 A 站到 B 站,并且他知道从 A 到 B 的路,所以这是知识层面的。
在这个层面上,我们了解知识的知识表示是如何存储的。在这个层次上,句子被编码成不同的逻辑。在逻辑层面,将知识编码为逻辑句子。在逻辑层面,我们可以期望自动出租车代理到达目的地 B。
这是逻辑和知识的物理表示。在实现级别,代理根据逻辑和知识级别执行操作。在这个层面上,一个自动出租车代理实际上实现了他的知识和逻辑,以便他可以到达目的地。
构建基于知识的代理主要有两种方法:
1. 声明式方法:我们可以通过用一个空的知识库初始化并告诉代理我们想要开始的所有句子来创建一个基于知识的代理。这种方法称为声明式方法。
2. 程序方法:在程序方法中,我们直接将所需行为编码为程序代码。这意味着我们只需要编写一个已经对所需行为或代理进行编码的程序。
然而,在现实世界中,可以通过结合声明式和程序式方法来构建成功的代理,并且声明式知识通常可以编译成更有效的程序代码。