在本章中,我们将深入探讨构成智能体核心的基本组成部分。就像人类身体有骨架提供结构和支撑一样,智能体也有某些基本元素,使其能够适应、独立行动并在复杂环境中追求目标。
我们将研究使智能体“栩栩如生”的重要部分——它们如何表示和存储知识,指导决策的推理过程,帮助它们学习和成长的算法,以及选择正确行动的机制。你还将看到,生成式AI这一激动人心的领域如何为这些组件赋能,赋予智能体更强大的能力,帮助它们理解周围环境、从经验中学习并与周围世界进行有意义的互动。
本章将覆盖以下主要内容:
- 智能体中的知识表示
- 智能体中的推理
- 自适应智能体的学习机制
- 智能体系统中的决策和规划
- 使用生成式AI增强智能体能力
到本章结束时,你将理解智能体中的知识表示方法、推理和学习机制、决策和规划技术,并且探索一个由生成式AI增强的智能体示例。
技术要求
你可以在GitHub上找到本章的代码文件,网址为:github.com/PacktPublis…。
智能体中的知识表示
存储和操作信息的能力是任何智能体的基础。知识表示提供了将智能体对其环境的理解编码成适合推理和决策过程的格式的机制。这是使智能体能够建立其周围环境模型的最基本方式。
知识表示可以正式定义为以一种结构化和组织化的数据方法,使智能体能够有效地利用这些信息来进行推理、解决问题和确定行动路线等任务。知识表示有几种成熟的方式,每种方式都有其自身的优势和理想应用,接下来我们将讨论这些方法。
语义网络
语义网络提供了表示智能体内部知识的一种最直观且灵活的方法。从本质上讲,语义网络是基于图的结构,由节点组成,这些节点代表世界中的概念、实体、事件或状态。这些节点通过标记的边连接,明确地定义了表示的概念之间的语义关系。
语义网络的简洁性和表达性使它们能够自然地捕捉我们复杂世界中存在的丰富、多样的关系和相互联系。例如,表示“狗”概念的节点可以通过一个“is-a”关系边连接到“动物”节点,表示狗是动物的一种。同一个“狗”节点也可以通过其他类型的关系链接,连接到“哺乳动物”、“家养的”、“犬科”和“宠物”等节点。
与严格的逻辑或刚性数据库模式不同,语义网络提供了一种灵活的知识表示,其中任何概念都可以通过适当的语义关系与其他概念关联。这种灵活性使得语义网络能够以直观的图形形式表示非常细致的领域。作为一个现实世界的例子,医学语义网络可以模拟疾病、症状、治疗和解剖学概念,并使用诸如“引起”、“被诊断为”、“与...相互作用”等关系类型:
语义网络的强大之处在于它们能够通过沿关系路径继承属性来进行概化。如果网络指定狗是动物的子类,而动物需要呼吸空气,那么智能体可以通过继承推理出狗也需要呼吸空气。算法可以遍历图表,串联关系序列,从表示的知识中推导出新的事实和结论。例如,在一个家庭关系的语义网络中,人们可以推断出一个人的配偶的父母也是他们的岳父母。
此外,语义网络自然地与其他符号推理技术集成。它们基于图的结构很好地映射到像一阶逻辑这样的演绎方法,其中节点变成常量或谓词,边变成可以参与逻辑证明和推理规则的关系。一个智能辅导系统可以利用这种结合的表示能力,基于语义知识图谱为学生提供逻辑推理解释,并教授学生新的概念。
语义网络为智能体提供了一种强大而直观的机制,来构建其环境的丰富、表达性模型。它们固有的支持捕捉相互关联的概念并通过关系组合和继承推导出新知识,使它们在许多现实世界领域中成为极其强大的知识表示形式。
框架
框架知识表示范式为智能体提供了一种结构化的方式来建模概念及其相关属性。在这种形式中,有关对象、情境或事件的知识存储在被称为“框架”的数据结构中。
每个框架由一组属性-值对组成,用来描述所表示概念的属性和特征。例如,“汽车”概念的框架可能包含诸如“品牌”、“型号”、“年份”、“颜色”、“燃料类型”等属性,且每个属性都对应一个特定汽车实例的值。
框架是按层次结构组织的,允许从更高层次、更通用的框架向下继承属性到它们的子框架。“汽车”框架可以继承自父级“交通工具”框架的属性,同时添加独特于汽车的新属性。这种层次化的分类法通过避免在相关概念中重复定义属性,从而促进了高效的知识存储。
框架的一个关键优势是它们能够灵活地表示程序性知识和事实信息。除了简单的属性-值插槽外,框架还可以包含动态提供属性值的过程或表示与所表示概念相关的操作。例如,“汽车”框架可以包含计算燃油效率或查询维修记录的方法。以下图示说明了框架概念,使用了我们的交通工具示例:
框架提供了一种直观的表示模型,反映了人类如何构思关于世界的知识。它们的层次化特性与人们如何基于共享的属性和关系形成概念抽象以及分类思想的方式相一致。
在实际应用中,框架表示广泛用于以下领域:
- 自然语言处理:语言框架建模从文本数据中提取的语义概念、角色和关系
- 专家系统:框架捕捉领域专业知识和用于基于知识的推理引擎的规则
- 面向对象编程:面向对象编程语言中的类本质上是封装属性和方法的框架结构
- 计算机视觉:物体检测系统使用框架层次结构,根据形状、颜色、纹理等属性识别和描述视觉实体
- 机器人学:框架使机器人能够表示物体/环境及其相关的动作、运动模型和约束
框架知识表示形式为智能体提供了一种高效、结构化且与人类兼容的方式,用于捕捉适合基于知识的推理和决策的丰富概念信息。
基于逻辑的表示
虽然语义网络和框架提供了直观的知识表示方式,但基于逻辑的方法采用了更正式、数学化的路径。基于逻辑的知识表示使用符号逻辑的机制来编码关于领域的事实、规则和公理。
在这一范式中,表示知识的语句被转化为形式逻辑语言中的良构公式,如命题逻辑、一阶逻辑或专门的模态/时间逻辑。例如:
- “所有人都是凡人”可以在一阶逻辑中表示为 ∀x (Human(x) → Mortal(x))
- “正在下雨或者是晴天”可以在命题逻辑中表示为 Rain ∨ Sunny
- “最终,系统将稳定”可以在时间逻辑中表示为 ◇ Stable
这里:
- ∀x:全称量词,表示“对于所有x”。 例如:∀x (Human(x) → Mortal(x))。翻译:对于所有x,如果x是人类,那么x是凡人。
- ∨:逻辑析取,表示“或者”。 例如:Rain ∨ Sunny。翻译:要么下雨,要么晴天。
- ◇:时间逻辑中的钻石运算符,表示“最终”。 例如:◇Stable。翻译:最终,系统将稳定。
这些逻辑公式作为构建综合知识库的基石,通过严格的逻辑演绎系统,明确的公理、推理规则和形式语义进行推导。然后,推理引擎可以通过应用逻辑推理规则,从现有知识中推导出新的事实和结论。
基于逻辑的表示的一个关键优势是它们的形式严谨性和相关的强理论特性。基于逻辑的系统可以提供关于正确性(仅推导逻辑上有效的结论)和完备性(推导所有可能的有效结论)的保证。这种数学基础使得逻辑在安全关键领域的知识表示中具有吸引力。基于逻辑的表示在许多现实世界的应用中得到广泛使用,例如:
- 专家系统:基于规则的专家系统引擎本质上是操作在逻辑知识库上的定理证明器,用于编码领域专业知识
- 数据库系统:关系型数据库使用关系代数/微积分——一阶逻辑的子集——作为数学基础
- 自动化推理:从软件验证到机器人规划,逻辑为自动化推理系统提供表示基础
- 法律/监管领域:法律、政策和法规可以被精确地表示为逻辑规则,便于正式分析
- 语义网:描述逻辑,如OWL(Web本体语言),构成本体和语义网的知识表示基础
尽管基于逻辑的表示不像语义网络或框架那样直观,但它们的数学严谨性和支持健全、自动化推理的能力使它们在需要正式验证、一致性和完备性保证的应用中不可或缺。
在探索了知识表示的基础结构后,这些结构构成了智能体知识库的基础,我们现在转向研究智能体如何利用这些表示进行推理任务、推导结论和解决复杂问题。
智能体中的推理
通过运用逻辑语言,智能体可以构建强大的知识库,从而实现复杂的查询、演绎推理和推理,这些都是较低表达能力的表示形式无法实现的。一旦智能体有了稳健的知识表示方式,推理机制便使其能够智能地操作和利用这些信息。推理能力使智能体能够得出新的见解、做出逻辑结论、解释观察结果,并最终做出知情决策,以实现其目标。
智能体中的推理过程很少是单一的、单一的过程。复杂的智能体架构往往采用多方面的推理方法,结合不同的推理风格、数据驱动的、分析性和学习型组件。例如,问答系统可以使用语义解析将问题映射到逻辑形式,应用演绎推理在逻辑知识库上进行推理,然后调用神经序列到序列模型流畅地生成最终答案。推理有几种基本范式,分别是演绎推理、归纳推理和溯因推理。
演绎推理
演绎推理是一种基本的逻辑推理形式,它遵循自上而下的方法。在演绎推理中,智能体从有关领域的普遍前提或规则出发,应用它们得出具体的、逻辑上无法避免的结论。以下是经典的演绎推理示例:
“所有人都是凡人。 苏格拉底是人。 因此,苏格拉底是凡人。”
如果初始前提(“所有人都是凡人”和“苏格拉底是人”)是正确的,那么通过应用演绎逻辑规则,结论“苏格拉底是凡人”是不可避免的。演绎推理提供了一种达成无法反驳的结论的方法,只要原始前提和规则是正确且真实的。以下图示说明了演绎推理,使用了该示例:
演绎推理在许多领域中都有应用,例如:
- 数学/几何:正式的数学证明是演绎推理的典型例子,从一般公理和先前证明的陈述中推导出具体的定理。
- 法律:法律推理通过应用法典化的法律和先例,通过演绎推导出关于特定案件的判决。
- 软件验证:形式验证技术通过对逻辑规范进行演绎推理,证明硬件/软件系统的正确性属性。
- 网络路由:路由协议通过演绎应用关于网络拓扑、带宽等的规则/约束来确定最优路径。
当与其他形式的推理(如溯因推理或归纳推理)结合时,演绎推理特别强大。例如,一个医学诊断系统可能会执行以下操作:
- 从症状中推断出可能的疾病假设(最优解释推理)
- 使用关于疾病模型的规则推导每个假设的预期结果
- 将推导出的结果与实际患者数据进行比较,以确认或拒绝假设
虽然仅凭演绎推理无法获得全新的知识,但它对于智能体逻辑地扩展其知识是不可或缺的,能保持一致性并支持理性决策。演绎推理提供了严格性,确保智能体结论的可信度。
归纳推理
与演绎推理的自上而下方法相对,归纳推理遵循自下而上的方法。归纳推理涉及从一组特定的观察或数据点中做出概括或推导出可能的结论。以下是一个示例: “过去一百万天里,太阳每天都会升起。 因此,太阳明天很可能还会升起。”
基于太阳升起的重复实例,归纳推理过程使智能体能够假设或推断太阳将继续升起。然而,与演绎推理不同,归纳结论并不逻辑上保证为真——它们只是基于观察到的证据提出一个可能性。以下图示通过该示例说明了这一概念:
归纳推理在以下实际领域中具有广泛的应用,数据驱动的学习和理论形成在这些领域中至关重要:
- 科学方法:制定科学定律/理论的过程在很大程度上依赖于从实验观察和数据中归纳出一般性规律。
- 机器学习:机器学习算法本质上执行归纳推理,从训练数据中推导出通用模型,这些模型可以对新实例做出预测。
- 模式识别:计算机视觉、信号处理和其他模式识别任务使用归纳技术根据检测到的统计规律对输入进行分类。
- 数据挖掘:例如关联规则挖掘的方法通过归纳推理识别大数据集中频繁出现的模式、关联或关系。
- 语言习得:儿童通过从他们接收到的语言输入中进行归纳推理,学习语法规则和语言模型。
尽管归纳推理非常强大,但它也有局限性,因为如果观察到的实例是一个不完美的样本,无法代表整个空间,那么结论可能是错误的。因此,它通常与其他推理方法,如溯因推理(最优解释推理)和演绎推理(验证假设)结合使用,在智能体架构中形成综合推理系统。尽管归纳推理不保证结论的真理性,但它从特定数据中提取知识、识别模式并形成理论的能力,使其在智能体处理嘈杂、不确定的环境中不可或缺,尤其是在知识尚未完全获取的情况下。
溯因推理
溯因推理是一种倒推的推理形式——尝试找到最可能的解释或前提,以解释一组给定的观察或数据。它通常被描述为“最优解释推理”。与从一般规则出发并得出有保障的具体结论的演绎推理不同,溯因推理从观察到的效应或现象开始,并根据当前的知识假设最可能的潜在原因。溯因推理的一个例子是:
“草坪是湿的。 一个合理的解释:昨晚下雨了。”
这里,观察到的效应是湿草坪。溯因推理使智能体能够理性地推断出,根据过去的经验,最可能的解释是昨晚下了雨,尽管这一点没有直接观察到。以下图示通过这一反向推理概念加以说明:
溯因推理在诊断领域和根本原因分析至关重要的应用中非常有用,例如:
- 医学诊断:给定一组症状,医生通过溯因推理并调查最可能的疾病或状况,以解释这些症状。
- 故障检测:制造业中的监控系统使用溯因推理来隔离导致观察到的异常的最可能的故障或失效。
- 法医/刑事调查:根据犯罪现场证据,侦探通过溯因推理推测可能的情景和嫌疑人特征,以确定发生了什么。
- AI规划:为了实现预期目标,智能体必须通过从目标倒推推理出可行的行动序列。
- 科学发现:新的科学理论通常是通过为当前无法解释的观察或现象找到解释性假设来初步推断出来的。
溯因推理的一个关键优势是它能够生成新的合理前提,这些前提是演绎推理或归纳推理仅凭现有知识和数据无法产生的。它有助于跳出框架思考,探索新的可能解释。然而,溯因推理并不保证正确的解释——可能有多个与观察一致的假设。这就是为什么溯因推理通常与演绎推理结合使用,以验证所形成的解释假设的连贯性和合理性。
在这里需要记住的几点是,在智能体系统中实现溯因推理是具有挑战性的,因为它的计算复杂性,生成和评估多个假设可能需要大量资源。它还处理不确定性和不完整数据,这使得很难确定最合理的解释。适当的知识表示至关重要,但很难保持,而且评估假设通常需要主观标准。将溯因推理与其他推理模式结合使用可能会导致冲突,随着领域的增长,扩展性也成为一个问题。此外,处理动态环境并确保用户可以理解推理过程可能会增加额外的复杂性。然而,通过应用溯因推理,智能体能够展现更深的理解,创造性地提出假设解释,并在不确定的环境中具有更强的操作能力,在部分可观察性和信息不完整的情况下有效地运作。通过强大的知识表示形式和多面向的推理能力,智能体获得了建立环境丰富模型、洞察、解释观察结果,并最终做出明智决策的能力。这些能力构成了更高级智能体功能的基石。
适应性智能体的学习机制
学习机制是使智能体能够适应环境变化或随着时间推移不断改进的关键。学习的能力使得智能体能够基于新的经验和数据持续地改进其知识和行为。学习有许多方法,每种方法都有其自身的优点和应用领域:
监督学习:这种学习范式涉及在数据集上训练智能体,其中输入与相应的标签输出或目标值配对。目标是让智能体学习一个映射函数,能够准确地预测新的、未见过的输入的输出。监督学习广泛用于分类和回归任务,应用领域包括:
- 图像分类(例如,识别图像中的物体和数字)
- 垃圾邮件检测(将电子邮件分类为垃圾邮件或非垃圾邮件)
- 机器翻译(学习将一种语言的文本映射到另一种语言)
- 医学诊断(将患者的症状/测试映射到疾病标签)
无监督学习:在这种方法中,智能体在没有标签的数据上进行训练,没有任何相关的目标输出。目标是在数据中发现内在的模式、关联或分组,以无监督的方式进行学习。主要应用包括:
- 客户细分(根据购买行为对客户进行分组)
- 异常检测(识别不同于正常模式的异常数据点)
- 主题建模(从文档集合中提取主题/主题)
- 降维(寻找高维数据的低维表示)
强化学习:这种学习方法受到人类和动物如何通过试错并使用来自环境的反馈(奖励或惩罚)进行学习的启发。强化学习智能体通过尝试不同的动作并根据观察到的奖励更新其策略,学习最优的行为/策略。强化学习在以下领域取得了巨大成功:
- 游戏玩耍(学习掌握棋类、围棋和视频游戏等游戏)
- 机器人学(学习机器人导航和操作的控制策略)
- 供应链优化(寻找最大化效率的策略)
- 交通信号控制(学习时序策略以改善交通流量)
迁移学习:这种技术侧重于将一个环境中学到的知识迁移到不同但相关的环境中,以促进新环境中的学习。通过利用先前学到的模式和表示,迁移学习可以显著加速新任务的训练速度和样本效率。应用领域包括:
- 自然语言处理(在不同领域之间迁移语言模型)
- 计算机视觉(使用预训练模型作为新视觉任务的初始化)
- 推荐系统(跨平台迁移用户/产品嵌入)
这些学习机制通常以混合组合的方式使用,使智能体具备不断扩展知识、精细化行为和提高问题解决能力的能力——这是智能的关键特征。随着学习算法的发展,智能体在面对新挑战时将变得更加适应和强大。
在探索了使适应性智能体获取知识和技能的学习机制后,我们现在将关注这些智能体如何利用这些学习成果在复杂环境中做出决策并规划行动。
智能体系统中的决策和规划
决策和规划是智能体在复杂环境中有效实现目标的关键能力。智能体需要分析各种可能的情境、评估结果,并根据其偏好和约束选择能够带来最理想结果的行动。尽管工具和规划将在后续章节中详细讨论,以下部分将简要讨论智能体决策中涉及的关键组成部分。
效用函数
效用函数通过将结果映射到效用值,量化智能体的偏好,使智能体能够比较并选择最大化期望效用的行动。效用函数在智能体的决策过程中起着核心作用,通过提供一种定量的方法来表示并推理不同结果或世界状态的偏好。
效用函数将任何给定的状态或结果映射到一个实数效用值,反映了根据智能体的目标、奖励和惩罚,该状态的可取性或偏好。正式地,这可以数学表达为:
这个表达式看起来可能有些复杂,但其概念其实非常简单。我们使用一些Python代码示例来进一步解释:
def travel_utility_function(travel_option):
price_utility = (1000 - travel_option['price']) * 0.05
comfort_utility = travel_option['comfort_rating'] * 10
conv_utility = travel_option['convenience_score'] * 15
total_utility = price_utility + \
comfort_utility + \
convenience_utility
return total_utility
为了说明这个效用函数,让我们回到旅行预订的例子。给定的Python效用函数根据价格、舒适度和便利性来评估旅行选项。函数的第2、3和4行分别为价格、舒适度和便利性分配一个实数效用值。数字0.05、10和15是完全任意的,但它们代表了在个人旅行决策中,每三个因素的重要性顺序。例如,在第2行,我们将价格效用分配为一个数字;请注意,我们从1000的任意值中减去价格,因为价格越低越好,这意味着较低的价格会贡献更多的效用。因此,如果价格较低,价格效用数字会更高,即存在反向关系。类似地,舒适度和便利性效用也被分配了相应的效用得分。舒适度和便利性得分通常由用户提供。例如,旅行点评网站如Tripadvisor允许用户通过星级评价发布他们的旅行体验。
应用我们的效用函数来评估几种旅行选项,将清晰地展示该函数的工作方式。让我们将效用函数应用于两个旅行选项:廉价航空与公路旅行。
效用函数的示例输入如下:
[{ 'name': 'Budget Airline', 'price': 300, 'comfort_rating': 3, 'convenience_score': 2},{ 'name': 'Road Trip', 'price': 150, 'comfort_rating': 4, 'convenience_score': 3}]
这是效用函数的输出:
Budget Airline – Utility: 95.00
Road Trip – Utility: 127.50
输出清楚地显示,公路旅行选项由于更高的便利性、舒适性和更低的价格,相较于廉价航空得到了更高的效用分数。完整代码可以在我们的GitHub仓库中的Chapter_03.ipynb Python笔记本中找到。
效用函数通过将状态或结果映射到效用值,编码智能体的偏好,从而允许任何两个状态根据其分配的效用进行排序或比较。较高的效用值对应于更受偏好的状态或结果。这使得理性智能体能够选择最大化期望效用的行动,期望效用通过计算所有可能结果状态的效用的概率加权和得出。通过这种方式量化偏好,效用函数为智能体提供了一种系统的机制,以在追求最理想结果的过程中做出理性决策。
效用函数可以根据领域的不同采用许多数学形式,例如:
- 简单的评分函数,应用权重来量化属性之间的偏好
- 约束满足函数,当所有硬性约束满足时最大化
- 经济效用函数,建模定价、利润、成本等
- 乘法函数,建模独立效用影响之间的偏好
更复杂的效用函数可以建模不确定性、风险偏好、多属性权衡、随时间变化的偏好以及属性之间的依赖关系。在多属性权衡的情况下,智能体必须在做决策时权衡不同的属性(例如成本、质量、时间或安全性)。这些属性通常存在冲突,智能体必须在它们之间找到平衡,例如选择一个更快但更昂贵的选项与一个较慢、便宜的选项之间的权衡。这里的挑战在于量化智能体如何相对其他属性来评估每个属性,以及一个属性的变化如何影响整体效用。
定义一个准确的量化效用函数以捕捉智能体所有的偏好通常是一个主要挑战,因为偏好往往是复杂且依赖于情境的。智能体可能对风险有不同的态度(例如,厌恶风险或寻求风险),偏好可能会根据情况或时间发生变化。此外,属性之间的依赖关系——例如一个属性的增加(例如速度)可能会对另一个属性(例如成本)产生负面影响——可能会使建模过程复杂化。此外,在变化条件下预测结果或偏好的不确定性进一步增加了创建一个完全反映智能体决策过程的效用函数的难度。在这种情况下,偏好引导、逆向强化学习和从人类反馈中学习等技术被广泛应用。
规划算法
规划算法是为智能体推导出一系列行动的算法,旨在从给定的初始状态实现其目标。最常见的规划方法包括基于图的规划、启发式搜索、蒙特卡洛树搜索(MCTS)、分层规划和约束满足。接下来我们将讨论这些规划算法。
基于图的规划
基于图的规划将规划问题表示为图,其中节点对应可能的状态或配置,边代表可以采取的行动或状态之间的转换。图形规划算法中的一个基本概念是状态空间图,它是一个图表示,节点代表问题领域中的所有可能状态。在这样的表示中,边代表状态之间的行动或转换。此图表示有效地描绘了整个“空间”中可能的情境,以及它们如何通过边连接在一起。
边成本是加权图中边的一个属性。每条边都可以有一个相关的成本(或权重),表示采取该行动或进行该转换的“费用”。成本可以表示诸如距离、时间、能量消耗、财务成本或其他适用于用例的相关度量。
使用状态空间图、边和边成本,有两大类基于图的规划算法:
- 图搜索:在图搜索中,规划过程涉及搜索图数据结构,以从初始状态找到通向目标状态的路径。路径定义了智能体执行的行动序列,用于在状态之间转换并达到目标。此类别下的一些常见算法包括深度优先搜索(DFS)、广度优先搜索(BFS)和Dijkstra算法。
- 最优路径寻找:这是一种特定类型的图搜索,旨在找到不仅仅是任何路径,而是根据某些标准(通常是最小化总边成本)找到最佳路径。该类别的算法包括贝尔曼-福特算法和A*搜索算法。
使用基于图的规划算法的缺点包括提前固定状态表示(状态空间)以及随着问题复杂度增加,表示和存储状态数量的指数级增长。
基于图的规划技术在多个领域找到广泛应用,这些领域中寻找实现目标的最优行动序列至关重要。这些应用包括导航和路线规划,例如GPS系统使用道路网络的图表示来找到最小化旅行时间或距离的最优路线。物流和供应链应用涉及规划制造产品的最佳操作序列或寻找最低成本的运输路线和交付计划。AI规划使用基于图的方法进行棋类、视频游戏和实时战略游戏中的游戏AI移动序列规划,以及在AI助手中的任务规划。
启发式搜索
启发式搜索技术在通过穷举搜索找到最优解变得计算上不可行时被广泛使用,因为搜索空间的指数增长。通过使用启发式函数来引导搜索朝着有希望的区域,这些方法可以更快地找到合理的近似解。
启发式搜索技术在路线规划和导航应用中得到广泛应用。当找到真正最优的路线计算成本过高时,启发式方法(例如估计到目的地的直线距离)可以有效地引导搜索朝着合理的短路径前进。视频游戏中的AI智能体也常常采用启发式路径寻找算法,在虚拟环境中高效导航。
启发式搜索的关键优势是能够在计算效率和最优性之间进行权衡,使得通过找到近似解可以在有限的时间/内存约束下解决更大的问题实例。启发式设计仍然是一个关键挑战,需要针对每个应用领域进行定制。
蒙特卡洛树搜索(MCTS)
MCTS的核心思想是通过从当前状态运行许多随机模拟(回放)来迭代地构建一个不对称的搜索树。一个不对称的树意味着树的结构不是平衡或统一的。这些模拟的结果用于在每次迭代时引导树中最有前景的分支生长。
MCTS在涉及不确定性下的顺序决策的各种实际应用中得到了广泛采用。这个算法在AI智能体在可能遇到不确定性且包含大状态空间的情况中,具有特别的优势,即有大量可能的结果。即使在计算资源有限的情况下,MCTS也能产生合理的结果。
MCTS的关键优势包括随时行为、能够处理大规模行动空间以及通过模拟推理长远结果。然而,其效率依赖于有效的模拟模型,并设计出适合该领域的良好探索策略。该算法的一些常见缺点包括对复杂问题的模拟所需的计算强度以及帮助在模拟过程中选择结果的难以调整的树策略。
分层规划
分层规划方法将复杂问题分解为多个层次的高层任务或目标,以及实现这些高层目标的子任务或子目标。这种分层分解使得可以更抽象地推理问题,并且可以重复使用常见子问题的解决方案。
分层方法的核心优势包括通过重用子计划解决方案实现计算效率、在多个抽象层次上进行知识表示,并通过分层推理处理高度复杂问题,尽管并不总是最优的。这种结构也与人类如何构思和解决复杂任务的方式高度一致。分层方法的核心优势包括:
- 通过重用子计划解决方案并避免同时推理所有细节,提升计算效率
- 在多个抽象层次上进行知识表示
- 提高处理非常复杂问题的扩展性
虽然分层计划并不总是最优的,但它可以为那些最优解可能在计算上无法处理的大问题提供良好的近似解。该结构也与人类处理复杂任务的方式高度契合。
约束满足
约束满足问题(CSPs)涉及将问题表述为一组必须满足的约束,然后使用约束传播技术从搜索空间中排除不一致的可能性。CSPs是AI中解决各种复杂问题的强大框架。其核心思想是将问题定义为需要为其分配值的变量,并在一组限制这些值的组合的约束下进行求解。这种方法自然地表示了许多现实世界的问题,从调度和资源分配到解谜和配置任务。
CSPs的美妙之处在于它们能够将问题表示与求解方法分开。一旦问题被表述为CSP,可以应用多种通用算法来找到解决方案。这种分离使得研究人员和从业者能够专注于准确地建模问题,而不必担心求解算法的复杂性。
智能体需要灵活的决策能力,能够权衡约束、处理不确定性、从经验中学习,并在追求目标时扩展到复杂的现实问题中。规划、搜索、推理和学习算法的进展不断增强这些关键的认知能力。
在探讨了智能体的基础方面——从知识表示和推理到学习机制和决策过程——之后,我们将继续关注一个前沿发展,这一发展有望显著扩展这些能力:将生成式AI集成到智能体系统中。
通过生成式AI增强智能体能力
生成式AI正在通过提高学习效率、改善智能体对环境的理解,并通过生成模型使得智能体能够进行更复杂的互动,从而改变智能体的发展。引入生成式AI到智能体领域的一些重要进展如下:
- 数据增强:通过生成模型创建合成训练数据,可以补充数据集,提高机器学习智能体的鲁棒性和效率。例如,自动驾驶汽车智能体可以使用生成的场景图像来学习更好的物体检测和导航策略。
- 上下文理解:生成式AI构建模拟环境,详细地模拟现实世界的复杂性,帮助智能体进行上下文理解,从而做出明智的决策。例如,虚拟助手(如聊天机器人)可以使用生成式AI模拟不同情境下的对话,帮助它们更好地理解用户意图,在与真实用户互动之前提供更准确的上下文感知响应。
- 自然语言处理:生成式语言模型通过提高理解和生成能力,简化了人与智能体的互动。虚拟助手(如Alexa)和聊天机器人利用生成式自然语言处理进行自然对话。
- 创造性问题解决:通过生成多种可能的解决方案,生成式AI使智能体能够探索创造性思维并评估其可行性。这可以使AI架构师在遵守结构约束的同时,创造性地设计创新的建筑布局。
生成式AI与知识表示、学习机制和决策过程的深度融合,产生了高度响应和适应的智能体,这些智能体能够在动态、复杂的环境中有效操作。以下是这种协同组合如何使得智能体具备高级能力的示例:
- 学习:智能体可以从各种来源(如传感器、人类互动或模拟)收集数据,通过强化学习等机器学习技术基于操作环境构建模型。
- 知识表示:学习到的环境数据被结构化为可用的表示方式,如语义网络、逻辑规则或概率图模型,以捕捉关系、约束和不确定性。
- 决策过程:基于表示的知识,智能体使用规划和决策算法(例如,马尔可夫决策过程和蒙特卡洛树搜索)推导出一系列行动,旨在最优地实现其目标。
- 生成模型:提供上下文模拟,通过生成的情境增强智能体的理解,考虑到诸如噪声传感器数据、随机动态或训练数据中缺失的外部因素。
- 反馈回路:通过将现实世界互动结果反馈到学习机制中,使智能体能够基于经验不断调整其知识和决策模型。
开始构建智能体AI
我们已经了解了智能体的特点、如何构建它们、如何与不同的算法合作,以及它们的基本组成部分。现在是时候进入智能体AI的世界,并开始使用不同的框架构建应用程序了。
在本书的后续章节中,我们将广泛使用几个开源框架。构建智能体和多智能体AI系统最流行的框架是LangChain的LangGraph框架,尽管其他一些值得注意的框架(截至写作时)包括AutoGen、CrewAI和MetaGPT。这不是开源框架的完整列表;这些仅是允许您使用LLM构建智能体和多智能体系统的最流行框架。请注意,虽然这些框架支持不同的编程语言,但我们主要将使用Python编程语言进行本书的示范。为了保持一致性,我们将在全书中使用LangGraph和OpenAI GPT模型;然而,还有许多其他LLM可以与智能体AI框架一起使用。
重要提示
尽管代码示例是专门使用OpenAI GPT模型创建的,但您可以使用任何LangGraph支持的模型。LangGraph还与多个云提供商(如Amazon Web Services(AWS)、Microsoft Azure和Google Cloud Platform(GCP))提供的LLM兼容。使用AI模型或云平台可能会产生一些费用。有关更多详情,请参阅各自的AI模型文档。
现在,我们已经概述了框架和LLM的内容,让我们从构建基本的旅行代理预订开始。在这个阶段,我们只希望模型能回应问候并提出后续问题。例如,如果我们让代理“为我预订航班”,我们希望模型能回应一个关于旅行城市、日期等的后续问题。对于以下代码,我们将直接使用OpenAI的Python SDK来构建此功能,并使用其函数调用功能,即LLM模型代表用户调用函数的能力。以下是代码示例:
import openai from OpenAI
def book_flight(passenger_name: str,
from_city: str,
to_city: str,
travel_date: str) -> str:
return "A flight has been booked"
tools = [{ "type":"function",
"function":{ "name": "book_flight", … }}]
def travel_agent(user_message: str, messages: list) -> str:
messages.append({"role": "user", "content": user_message})
try:
response = openai.chat.completions.create(
model="gpt-4-turbo",
messages=messages,
tools=tools)
if response.choices[0].message.content:
return response.choices[0].message.content
elif response.choices[0].message.tool_calls:
[ … ]
confirmation = book_flight(…)
[ … ]
response = openai.chat.completions.create(
model="gpt-4-turbo",
messages=messages)
return response.choices[0].message.content
让我们分解一下这段代码的工作原理。我们首先在第3行定义了一个book_flight函数——目前,这个函数只是返回一条信息,表示航班预订已完成。第12行的travel_agent函数是我们调用LLM的地方,在这种情况下是OpenAI的gpt-4-turbo模型。我们通过OpenAI SDK在第15行调用LLM的API,在此处传递用户的消息、模型名称和一组工具。请注意,我们将book_flight函数作为智能体的工具使用,并且API接收工具作为参数。
我们将在后续章节中详细讨论工具,但目前理解工具是智能体与外部世界(或外部系统)进行交互以完成任务的机制是足够的。在这种情况下,任务是预订航班。LLM足够智能,能在收集到乘客的所有详细信息后告诉我们何时调用book_flight工具函数。在未来章节中,我们将看到,像book_flight这样的函数将用于与外部系统交互,例如调用API完成航班预订等。以下是使用此代码进行对话的示例:
几点需要注意的事项:在第一次用户消息之后,我们的智能体并没有直接调用book_flight函数,因为它没有所有必要的参数值来成功调用该函数。在典型的基于启发式的方法中,你可以使用字符串解析来查找用户是否提供了他们的姓名、旅行城市和旅行日期。但这种逻辑可能会过于复杂且容易出错。此时,智能体的优势体现出来了。LLM具有更强的语言理解能力,并且能够知道在对话过程中何时调用book_flight函数,如果用户没有提供所需的值,它可以提示用户提供这些值,即姓名、旅行城市和旅行日期。它还可以从用户的回应中准确提取这些值,从而允许我们调用book_flight函数。有关智能体完整代码,请参考GitHub仓库中的Chapter_03.ipynb Python笔记本。
总结
在本章中,我们讨论了智能体的几个方面和关键组成部分。我们首先理解了各种知识表示机制的重要性,如语义网络、框架和基于逻辑的表示。我们还了解了各种推理技术,如演绎推理、归纳推理和溯因推理,以理解智能体如何使用这些技术进行决策,完成任务。我们简要了解了智能体可能使用的学习机制,以便让它们适应不同的使用场景,并探索了通过效用函数和各种规划算法的智能体决策过程。最后,我们通过介绍使用LLM的生成式AI智能体,讨论了一个简单的智能体示例,该示例能够从用户查询中收集信息,用于我们的旅行预订代理示例。
在下一章中,我们将深入探讨高级智能体概念,如反思和自省。我们将学习反思和自省如何影响智能体的决策能力。在结束本章之前,花点时间尝试回答随后的问题。