本章内容概述
本章将深入探讨构成智能体核心的关键组成部分。正如人体有骨骼提供结构和支撑,智能体也拥有某些基础元素,使其能够适应环境、独立行动并在复杂环境中追求目标。
我们将剖析赋予智能体“生命”的重要部分——它们如何表示和存储知识、指导决策的推理过程、帮助学习与成长的算法,以及选择合适行动的机制。你还将了解到生成式人工智能这一令人兴奋的领域如何赋能这些组件,使智能体更强大地理解环境、从经验中学习,并与周围世界进行有意义的交互。
本章主要内容包括:
- 智能体中的知识表示
- 智能体中的推理机制
- 自适应智能体的学习机制
- 主体系统中的决策与规划
- 利用生成式AI增强智能体能力
通过本章学习,你将理解智能体的知识表示方法、推理与学习机制,以及决策与规划技术,并且会接触到一个基于生成式AI强化的智能体示例。
技术要求:
本章的代码文件可在GitHub上找到,链接为:github.com/PacktPublis…。
智能体中的知识表示
信息的存储与操作能力是任何智能体的基础。知识表示为智能体将其对环境的理解编码为适合推理和决策处理的格式提供了机制。这是智能体构建环境模型的最基本手段。
知识表示可形式化定义为对数据进行结构化和组织的方式,使智能体能够有效利用这些信息完成推理、解决问题和制定行动方案。接下来我们将介绍几种成熟的知识表示方法,它们各具优势和适用场景。
语义网络
语义网络是智能体知识表示中最直观且灵活的方法之一。其核心是基于图的结构,由表示世界中概念、实体、事件或状态的节点组成。节点之间通过带标签的边连接,明确表达节点所代表概念之间的语义关系。
语义网络简洁而富有表现力,能够自然捕捉复杂世界中丰富多样的关系与联系。例如,代表“狗”的节点可以通过“是一个(is-a)”关系边连接到“动物”节点,表明狗属于动物。该“狗”节点还可通过其他类型的关系链接,连接到“哺乳动物”、“家养”、“犬科”、“宠物”等节点:
与严格的逻辑体系或僵硬的数据库模式不同,语义网络提供了一种灵活的知识表示方式,允许任何概念通过适当的语义关系与其他概念相连接。这种灵活性使得语义网络能够以直观的图形形式表达极为细致复杂的领域知识。举一个现实中的例子,医学语义网络可以用来建模疾病、症状、治疗方法和解剖学概念,并使用诸如“引起”、“被诊断为”、“相互作用”等关系类型:
语义网络的强大之处在于其通过关系路径上的属性继承实现泛化的能力。如果网络中指定“狗”是“动物”的子类,而“动物”会呼吸空气,那么智能体可以通过继承语义推断出“狗”也会呼吸空气。算法可以遍历图结构,将一系列关系连接起来,从所表示的知识中推导出新的事实和结论。例如,在一个描述家庭关系的语义网络中,可以推断出某人的配偶的父母也是其亲家。
此外,语义网络能够自然地与其他符号推理技术结合。其基于图的结构与一阶逻辑等演绎方法高度契合,其中节点对应常量或谓词,边则对应可参与逻辑证明和推理规则的关系。智能辅导系统可以利用这种结合的表示能力,基于语义知识图谱进行逻辑解释,并教授学生新的概念。
语义网络为智能体构建丰富且表达力强的环境模型提供了既稳健又直观的机制。它们固有地支持捕捉互联概念,并通过关系组合与继承推导新知识,使其成为众多现实领域中极具威力的知识表示形式。
框架(Frames)
框架知识表示范式为智能体建模概念及其相关属性提供了一种结构化的方法。在该形式中,关于对象、情境或事件的知识存储于称为框架的数据结构中。
每个框架由一组属性-值对组成,用以描述所表示概念的性质和特征。例如,“汽车”概念的框架可能包含“品牌”、“型号”、“年份”、“颜色”、“燃料类型”等属性,其对应的值则具体说明某一辆汽车的细节。
框架呈层级组织结构,允许属性从更高层次、更通用的框架继承至其专门化子框架。例如,“汽车”框架可以继承自“车辆”父框架,同时添加汽车独有的新属性。这种层级分类通过避免相关概念间冗余属性定义,提高了知识存储的效率。
框架的一大优势是其灵活性,不仅能表示事实性知识,还能表示过程性知识。除了简单的属性-值槽外,框架还能包含动态提供属性值的过程或描述相关操作的方法。例如,“汽车”框架可以拥有计算燃油效率或查询保养记录的方法。下图以车辆示例展示了框架的概念:
框架提供了一种直观的表示模型,反映了人类如何概念化对世界的认知。其层级结构与人们基于共享属性和关系形成概念抽象与分类的方式相契合。
在实际应用中,框架表示广泛应用于以下领域:
- 自然语言处理:语言框架建模从文本数据中提取的语义概念、角色和关系。
- 专家系统:框架捕捉领域专业知识及基于知识的推理引擎规则。
- 面向对象编程:面向对象语言中的类本质上是类似框架的结构,封装属性和方法。
- 计算机视觉:目标检测系统利用框架层级结构,根据形状、颜色、纹理等属性识别和描述视觉实体。
- 机器人技术:框架使机器人能够表示对象/环境及其相关动作、运动模型和约束。
框架知识表示范式为智能体捕捉丰富的概念信息,支持基于知识的推理和决策,提供了一种高效、结构化且符合人类认知习惯的方式。
基于逻辑的表示
尽管语义网络和框架提供了形象直观的知识表示方式,基于逻辑的方法则采取更正式的数学路径。基于逻辑的知识表示利用符号逻辑的机制来编码关于领域的事实、规则和公理。
在这一范式中,知识陈述被转化为形式逻辑语言中符合规范的公式,如命题逻辑、一阶逻辑或专门的模态/时态逻辑。例如:
- “所有人类都是会死的”可用一阶逻辑表示为 ∀x (Human(x) → Mortal(x))
- “要么下雨,要么晴天”可用命题逻辑表示为 Rain ∨ Sunny
- “系统最终会稳定”可用时态逻辑表示为 ◇ Stable
其中:
- ∀x:全称量词,表示“对于所有 x”。
例:∀x (Human(x) → Mortal(x)) 表示“对于所有 x,如果 x 是人类,则 x 会死。” - ∨:逻辑析取,表示“或”。
例:Rain ∨ Sunny 表示“要么下雨,要么晴天。” - ◇:时态逻辑中的“钻石”算子,表示“最终会”。
例:◇Stable 表示“系统最终会稳定。”
这些逻辑公式作为构建全面知识库的基础,结合严格的逻辑演绎系统、明确定义的公理、推理规则和形式语义。推理引擎通过应用逻辑推理规则,从现有知识中推导新事实和结论。
基于逻辑表示的主要优势在于其形式严谨性及强大的理论属性。基于逻辑的系统能够保证健全性(仅推导逻辑有效结论)和完备性(推导所有可能有效结论)。这种数学基础使逻辑在安全关键领域的知识表示中极具吸引力。基于逻辑的表示广泛应用于诸多实际领域,例如:
- 专家系统:基于规则的专家系统引擎本质上是运行在逻辑知识库上的定理证明器,编码领域专业知识。
- 数据库系统:关系数据库采用关系代数/微积分——一阶逻辑的子集——作为数学基础。
- 自动推理:从软件验证到机器人规划,逻辑为自动推理系统提供表示基础。
- 法律与监管领域:法律、政策和法规可以精确定义为逻辑规则,便于形式化分析。
- 语义网:如OWL(Web本体语言)等描述逻辑构成本体和语义网的知识表示骨干。
虽然基于逻辑的表示不如语义网络或框架直观,但其数学严谨性和支持可靠自动推理的能力,使其在需要形式验证、一致性和完备性保证的应用中不可或缺。
在探讨了构成智能体知识库基础的知识表示结构后,接下来我们将考察智能体如何利用这些表示执行推理任务、进行推断并解决复杂问题。
智能体中的推理
通过使用逻辑语言,智能体能够构建稳健的知识库,从而实现复杂的查询、演绎推理和逻辑推断,这些都是表达能力较弱的表示形式无法做到的。一旦智能体拥有了强有力的知识表示方式,推理机制就能让它智能地操作和利用这些信息。推理能力使智能体能够获得新的洞见、得出逻辑结论、解释观察结果,并最终做出明智决策以实现其目标。
智能体中的推理通常不是单一、整体的过程。复杂的智能体架构往往采用多方面的推理方法,结合不同的推理风格以及数据驱动、分析性和学习型组件。例如,一个问答系统可能会先用语义解析将问题映射成逻辑形式,再基于逻辑知识库进行演绎推理,最后调用神经序列到序列模型以流畅生成最终答案。推理的基本范式主要包括演绎推理、归纳推理和溯因推理。
演绎推理
演绎推理是一种基本的逻辑推理形式,遵循自上而下的推理路径。智能体从领域的一般前提或规则出发,应用这些规则推导出具体且逻辑上不可避免的结论。演绎推理的经典例子是下面的三段论:
“所有人都会死。
苏格拉底是人。
因此,苏格拉底会死。”
如果最初的前提(“所有人都会死”和“苏格拉底是人”)为真,则结论“苏格拉底会死”必然根据演绎逻辑规则得出。只要原始前提和规则正确且真实,演绎推理就能得出不可反驳的结论。下图以该示例说明了演绎推理过程:
演绎推理在许多领域都有广泛应用,例如:
- 数学/几何学:形式化的数学证明是演绎推理的典范,从一般公理和已证明的命题推导出具体定理。
- 法律:法律推理通过应用成文法和判例,利用演绎法对具体案件作出裁决。
- 软件验证:形式验证技术基于逻辑规范进行演绎推理,以证明硬件或软件系统的正确性属性。
- 网络路由:路由协议通过演绎地应用关于网络拓扑、带宽等规则和约束,确定最优路径。
演绎推理在与其他推理形式(如溯因或归纳)结合时尤其强大。例如,医疗诊断系统可能采用如下流程:
- 根据症状溯因推断可能的疾病假设(最佳解释推断)。
- 利用疾病模型相关规则演绎出每个假设应有的预期发现。
- 将推导出的发现与患者实际数据进行比较,以确认或排除假设。
虽然单靠演绎无法获得全新的知识,但它对于智能体逻辑地扩展知识、保证一致性和实现理性决策不可或缺。演绎推理为智能体结论的可信度提供了严格保障。
归纳推理
与自上而下的演绎推理相反,归纳推理采用自下而上的方法。归纳推理是基于一组具体观察或数据点进行归纳总结,推导出一般性或概率性的结论。举例来说:
“过去一百万天太阳每天都升起。
因此,太阳明天很可能还会升起。”
基于太阳升起的重复实例,归纳推理使智能体能够假设或归纳出太阳未来将持续升起的可能性。然而,与演绎不同,归纳结论并非逻辑上必然为真——它们仅基于观察证据暗示一种可能性。下图以此例说明了归纳推理的概念:
归纳推理在以下真实世界领域中具有广泛的应用,这些领域对数据驱动的学习和理论形成至关重要:
- 科学方法:科学定律和理论的制定过程,主要依赖于从实验观察和数据中归纳总结。
- 机器学习:机器学习算法本质上执行归纳推理,从训练数据中推断通用模型,以对新实例进行预测。
- 模式识别:计算机视觉、信号处理及其他模式识别任务利用归纳技术,根据检测到的统计规律对输入进行分类。
- 数据挖掘:关联规则挖掘等方法通过归纳发现大型数据集中频繁出现的模式、相关性或关系。
- 自然语言习得:儿童通过对所接受的语言输入进行归纳总结,学习语法规则和语言模型。
尽管归纳推理功能强大,但其结论可能因观察样本不完善或不能代表整体而出现错误。因此,归纳推理常与其他推理方法结合使用,如溯因推理(最佳解释推断)和演绎推理(验证假设),共同构建智能体架构。尽管归纳推理无法保证结论的绝对真理性,但其从具体数据中提取知识、识别模式和形成理论的能力,使其成为在知识不完全、环境噪声大且不确定的场景下运行的智能体不可或缺的工具。
溯因推理
溯因推理是一种逆向推理方法,试图找到最合理的解释或前提,以说明已观察到的现象或数据。它通常被描述为“最佳解释推断”。不同于从一般规则出发得出必然结论的演绎推理,溯因推理从观察到的结果或现象出发,基于当前知识假设最可能的根本原因。
溯因推理的一个例子是:
“草坪是湿的。
一个合理的解释:昨晚下雨了。”
这里,观察到的结果是草坪湿润。溯因推理使智能体能够理性地推断或假设,根据过往经验,最可能的解释是昨晚下过雨,尽管这并非直接观察到的事实。下图展示了这种逆向推理的概念:
溯因推理在诊断领域及根因分析至关重要的应用中极为有用,例如:
- 医疗诊断:医生根据一组症状进行溯因推断,调查最可能导致这些症状的疾病或病症。
- 故障检测:制造业中的监控系统利用溯因推断隔离导致异常的最可能故障或失效。
- 法医/刑事侦查:侦探根据犯罪现场证据溯因推断可能的案发情景和嫌疑人画像,以确定案件经过。
- 人工智能规划:智能体为实现目标,通过逆向推理推断可行动作序列。
- 科学发现:新科学理论常通过为当前未解现象寻找解释假设而被初步推断。
溯因推理的关键优势在于其能够生成演绎或归纳方法仅凭现有知识和数据无法产生的新合理前提。它促进了跳出传统框架的思考,探索新颖可能的解释。然而,溯因推理并不保证解释的正确性——可能存在多个与观察一致的假设。这也是溯因推理通常与演绎推理配合使用,以验证形成的解释假设的一致性和合理性的原因。
需要注意的是,由于生成和评估多重假设计算资源密集,溯因推理在主体系统中的实现具有挑战性。它还需处理不确定性和不完整数据,难以确定最合理的解释。恰当的知识表示至关重要但难以维护,假设评估常涉及主观标准。溯因推理与其他推理模式的整合可能产生冲突,且随着领域规模扩大,扩展性成为问题。此外,应对动态环境和确保用户可解释性也增加了过程复杂度。尽管如此,应用溯因推理的智能体能展现更深层次的理解能力,具备创造性地提出假设的能力,且在不确定且部分可观测的环境中更有效地运作。通过稳健的知识表示形式和多元推理能力,智能体能够构建丰富的环境模型,洞察信息,解释观察,最终做出明智的交互决策。这些能力构成了更高级智能体功能的基石。
自适应智能体的学习机制
学习机制是使智能体适应环境变化或随着时间提升能力的关键。学习能力使智能体能基于新经验和数据持续优化其知识和行为。学习方法多样,各具优势和适用场景:
-
监督学习:该范式基于带标注的训练数据,训练智能体学习输入到对应输出的映射函数,目标是准确预测未见新输入的输出。监督学习广泛用于分类和回归任务,如:
- 图像分类(识别图像中的物体和数字)
- 垃圾邮件检测(分类邮件是否为垃圾邮件)
- 机器翻译(学习不同语言文本间的映射)
- 医疗诊断(将患者症状/检测映射到疾病标签)
-
无监督学习:智能体在无标注数据上训练,目标是无监督发现数据内在模式、相关性或分组。关键应用包括:
- 客户细分(基于购买行为对客户分组)
- 异常检测(识别偏离常规的异常数据点)
- 主题建模(从文档集合中提取主题/话题)
- 降维(寻找高维数据的低维表示)
-
强化学习:该方法受人类和动物通过环境反馈(奖励或惩罚)进行试错学习启发。强化学习智能体通过尝试不同动作,依据奖励调整策略,学习最优行为。成功应用领域有:
- 游戏(掌握国际象棋、围棋及电子游戏)
- 机器人(学习机器人导航和操控策略)
- 供应链优化(制定最大化效率的策略)
- 交通信号控制(学习改善交通流量的时序策略)
-
迁移学习:此技术侧重于将一个环境中学得的知识迁移至另一个相关环境,以加速新任务的训练速度和样本效率。应用领域包括:
- 自然语言处理(跨领域迁移语言模型)
- 计算机视觉(使用预训练模型初始化新视觉任务)
- 推荐系统(跨平台迁移用户/产品嵌入)
这些学习机制常以混合方式使用,赋予智能体持续扩展知识、优化行为和增强问题解决能力的能力,成为智能的重要标志。随着学习算法的进步,智能体在面对新挑战时将更加适应和稳健。
在探讨了使自适应智能体获得知识和技能的学习机制后,接下来我们将关注智能体如何利用所学知识进行决策和规划,以应对复杂环境中的行动。
主体系统中的决策与规划
决策与规划是智能体在复杂环境中有效实现目标的关键能力。智能体需要分析各种可能的情境,评估不同结果,并根据自身偏好和约束选择能够带来最理想结果的行动。尽管效用函数和规划将在后续章节详细讲解,这里我们先对智能体决策中的这些关键组成部分做一个高层次的介绍。
效用函数
效用函数通过将结果映射为效用值来量化智能体的偏好,使智能体能够比较并选择最大化期望效用的行动。效用函数在智能体决策中起核心作用,提供了一种定量表示和推理不同结果或世界状态偏好的方式。
效用函数将任一给定状态或结果映射为实数效用值,反映该状态根据智能体的目标、奖励和惩罚的可取性。其数学表达形式为:
虽然该表达式初看可能略显复杂,但其核心概念非常简单。以下示例Python代码可帮助进一步说明:
def travel_utility_function(travel_option):
price_utility = (1000 - travel_option['price']) * 0.05
comfort_utility = travel_option['comfort_rating'] * 10
convenience_utility = travel_option['convenience_score'] * 15
total_utility = price_utility + comfort_utility + convenience_utility
return total_utility
解释该效用函数,我们回到旅行预订示例。此函数基于价格、便利性和舒适度评估旅行选项。第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。
效用函数通过映射状态或结果到效用值,允许对任意两状态基于效用大小进行排序或比较。效用值越高,状态越被偏好。智能体据此选择能最大化期望效用的行动,期望效用为所有可能结果状态效用的概率加权和。通过量化偏好,效用函数为智能体追求最优结果提供了系统化的理性决策机制。
效用函数的数学形式多样,视领域而定,例如:
- 通过加权量化属性偏好的简单评分函数
- 满足所有硬性约束时达到最大值的约束满足函数
- 模拟价格、利润、成本等的经济效用函数
- 建模属性间独立效用影响的乘法函数
更复杂的效用函数能模拟不确定性、风险偏好、多属性权衡、偏好随时间变化以及属性间依赖性。在多属性权衡中,智能体需在成本、质量、时间、安全等属性间取舍。这些属性往往相互冲突,智能体需权衡平衡,例如选择更快但更贵的方案或更慢但更便宜的方案。挑战在于如何量化智能体对各属性的相对重视,以及属性变动如何影响整体效用。
准确刻画所有偏好的定量效用函数通常面临挑战,因偏好复杂且依赖上下文。智能体可能有不同风险态度(如风险厌恶或风险偏好),且偏好可能随情境或时间变化。此外,属性间的依赖关系(如速度提升可能增加成本)使建模更复杂。环境变化导致结果和偏好预测不确定,进一步增加效用函数设计难度。为此,常采用偏好启发、逆强化学习及人类反馈学习等技术。
规划算法
规划算法是为智能体从给定的初始状态推导出一系列动作,以实现其目标的算法。一些常见的规划方法包括基于图的规划、启发式搜索、蒙特卡洛树搜索(MCTS)、分层规划和约束满足。下面我们将逐一介绍这些规划算法。
基于图的规划
基于图的规划将规划问题表示为一个图,图中的节点对应可能的状态或配置,边表示可执行的动作或状态间的转换。基于图的规划算法的核心概念是状态空间图,该图表示问题域中所有可能的状态,边则表示状态间的动作或转移。该图结构有效地映射了所有可能情况的“空间”以及它们之间通过边的连接关系。
边的代价是加权图中边的属性,每条边关联一个代价(或权重),代表执行该动作或转换所需的“成本”,如距离、时间、能耗、财务成本等,具体视用例而定。
利用状态空间图、边及边代价,基于图的规划算法大致分为两类:
- 图搜索:规划过程通过搜索图数据结构,找到从初始状态到目标状态的路径。路径定义了智能体执行动作的序列,用以状态转换并达到目标。常见算法包括深度优先搜索(DFS)、广度优先搜索(BFS)和迪杰斯特拉算法(Dijkstra’s algorithm)。
- 最优路径寻找:这是图搜索的特殊类型,目标不仅是找到任意路径,而是依据某些标准(通常是最小总边代价)寻找最优路径。此类算法包括贝尔曼-福特算法(Bellman-Ford)和A*搜索。
基于图的规划的缺点包括需事先固定状态表示(状态空间),随着问题复杂度增加,状态数量可能呈指数增长,导致表示和存储困难。
基于图的规划技术在众多实际领域应用广泛,如导航和路径规划,GPS系统利用道路网络的图表示寻找最优路径,最小化旅行时间或距离;物流和供应链规划最优制造流程、最低成本运输路线及配送时间;AI规划则用基于图的方法进行棋类、电子游戏和即时战略游戏的动作序列规划,以及AI助手的任务规划。
启发式搜索
启发式搜索技术在通过穷举搜索寻找最优解计算量过大、搜索空间指数级增长时得到广泛应用。通过启发式函数引导搜索聚焦有希望的区域,此类方法能更快找到较优的近似解。
启发式搜索广泛用于路径规划和导航应用中。当计算寻找真正最优路径代价过高时,估算到目标的直线距离等启发式方法能有效引导搜索得到合理短的路线。视频游戏中的AI智能体也常用启发式寻路算法高效导航虚拟环境。
启发式搜索的主要优势是以计算效率换取最优性,使更大规模问题在有限时间和内存内找到近似解。启发式函数的设计仍是关键挑战,需要针对具体应用领域进行调整。
蒙特卡洛树搜索(MCTS)
MCTS的核心思想是通过大量随机模拟(演练)从当前状态迭代构建非对称搜索树。非对称树指结构不均衡、不规则。模拟结果用于指导每次迭代中最有前景分支的扩展。
MCTS在诸多涉及不确定性和大状态空间的序列决策应用中得到广泛采用。该算法在资源有限的情况下也能产生合理结果,适合处理大量可能结果。MCTS的优势包括随时可停止的性质(anytime behavior)、处理大动作空间的能力及通过模拟进行长期结果推理。然而,其效率依赖于有效的模拟模型和针对领域设计的探索策略。常见缺点包括复杂问题模拟的计算开销大,以及模拟过程中的树策略难以调优。
分层规划
分层规划将复杂问题分解为更高层次的任务或目标及实现这些目标的子任务或子目标。层级分解使问题推理更具抽象性,并能重用公共子问题的解决方案。
分层方法的核心优势包括通过复用子规划方案提高计算效率、多层次抽象的知识表示,以及通过层级推理提升处理高度复杂问题的可扩展性,尽管未必总能达到最优。该结构也符合人类对复杂任务的认知与处理方式。具体优势包括:
- 通过复用子规划避免同时考虑所有细节,提高计算效率
- 支持多层抽象的知识表示
- 提升处理极其复杂问题的可扩展性
尽管分层规划不总是最优,但在最优解计算不可行的复杂问题上能提供较好近似。其结构也契合人类处理复杂任务的认知模式。
约束满足
约束满足问题(CSP)通过将问题表述为一组必须满足的约束,并运用约束传播技术消除不一致可能性,从而求解问题。CSP是人工智能中解决各类复杂问题的强大框架。其核心是定义问题变量及需为变量赋值的约束条件,限制值的可能组合。这一方法天然适合表示许多现实问题,如调度、资源分配、拼图和配置任务。
CSP的优点在于它将问题表示与求解方法分离。一旦将问题形式化为CSP,即可应用多种通用算法寻找解。这种分离使研究者和工程师能专注于准确建模,而无需担心求解算法的复杂细节。
智能体需要灵活的决策能力,能够权衡约束、处理不确定性、从经验中学习,并应对复杂的现实问题以实现目标。规划、搜索、推理和学习算法的进步不断提升这些关键认知能力。
在探讨了智能体的基础组成——从知识表示、推理、学习机制到决策过程——后,下一步我们将关注一项前沿发展,它有望显著拓展这些能力:生成式人工智能与主体系统的融合。
利用生成式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支持的LLM来自多个云服务提供商,如亚马逊AWS、微软Azure和谷歌云GCP。使用AI模型或云平台可能产生费用,详情请参考相关模型文档。
构建基础旅行预订智能体
我们先实现一个基础的旅行预订智能体,此时仅希望模型能够回复问候语及后续询问。例如,当用户说“帮我订机票”时,模型应回复关于出发城市、目的地、日期等的后续问题。
下面代码示例直接使用OpenAI的Python SDK构建此功能,并利用其函数调用特性,即大型语言模型代表用户调用函数的能力。代码片段如下:
import 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模型。 - 第15行通过OpenAI SDK调用LLM的API,传入用户消息、模型名和工具集。
- 这里将
book_flight函数作为智能体的工具,API通过参数接收工具列表。
后续章节将详细介绍工具机制,当前理解工具是智能体与外部世界或系统交互以完成任务的机制即可。此处任务是订机票。LLM足够智能,能在获取乘客信息后决定何时调用book_flight函数。在未来更完整的方案中,此类函数将调用外部系统API完成真实预订。
以下为该代码可能的对话示例:
这里有几点需要注意:在用户第一次发送消息后,我们的智能体不会立即调用 book_flight 函数,因为它尚未获取调用该函数所需的所有参数值。通常,基于启发式的方法可能会通过字符串解析来判断用户是否提供了姓名、出发地、目的地和出行日期等信息,但这种逻辑往往过于复杂且容易出错。而这正是智能体优势所在。大型语言模型(LLM)具有更强的语言理解能力,能够在对话过程中判断何时调用 book_flight 函数;如果用户未提供所需信息,它还能主动提示用户补充这些信息,如姓名、出发地、目的地和出行日期,并且能准确地从用户回复中提取这些值,从而成功调用该函数。完整的智能体代码请参考GitHub仓库中的 Chapter_03.ipynb Python笔记本。
总结
本章讨论了智能体的多个方面及关键组成部分。我们首先了解了各种知识表示机制的重要性,如语义网络、框架和基于逻辑的表示;随后学习了多种推理技术,包括演绎、归纳和溯因推理,了解智能体如何利用这些技术进行决策以完成任务;简要介绍了智能体适应不同场景可能使用的学习机制,并探讨了基于效用函数的决策与多种规划算法;最后,我们通过一个结合大型语言模型的生成式AI智能体示例,介绍了智能体如何从用户查询中收集信息,应用于旅行预订代理的案例。
下一章,我们将深入探讨更高级的智能体概念,如反思与内省,学习它们如何影响智能体的决策能力。在本章结束之前,请花些时间尝试回答后续章节中列出的问题。