Chapter2 智能体发展史

1. 文档阅读

1.1 基于符号和逻辑的早期智能体【符号主义时代】

其“智慧”完全来源于设计者预先编码的知识库和推理规则,而非通过自主学习获得

典型理论以及成果

  1. 物理符号系统假说: 包含两个核心论断
    • 充分性论断:任何一个物理符号系统都具备产生通用智能行为的充分手段
    • 必要性论断:任何一个能够展现通用智能行为的系统,其本质必然是一个物理符号系统
  2. 专家系统:智能=知识库+推理机
  3. SHRDLU:首次将多个独立的人工智能模块集成在一个同一的系统中

面临的根本性挑战

  1. 常识知识与知识获取瓶颈
  2. 框架问题与系统脆弱性

1.2 马文·明斯基的心智社会【心智社会】

复杂的、有目的性的智能行为并非由某个高级智能体预先规划,而是从大量简单的底层智能体的局部交互中自发产生的。

心智社会理论对分布式人工智能(Distributed Artificial Intelligence, DAI),以及后来的**多智能体系统(Multi-Agent System,MAS)**提供了重要的概念基础。在一下几个方面启发了多智能体系统的研究:

  1. 去中心化控制
  2. 涌现式控制
  3. 智能体的社会性

1.3 学习范式的演进【学习范式】

核心目标:构建能从经验和数据中自动获取知识和能力的系统

  1. 从符号到联结:联结主义是一种自下而上的方法,灵感来源于对生物大脑神经网络结构的模仿。核心思想概况为:

    (1) 知识的分布式表示

    (2) 简单的处理单元

    (3) 通过学习调整权重

  2. 基于强化学习的智能体:**强化学习(Reinforcement Learning ,RL)**是专注于解决序贯决策问题的学习范式。并非直接从标注好的静态数据集中学习,而是通过智能体与环境的直接交互,在“试错”中学习如何最大化其长期收益。

    强化学习的框架:

    • 智能体(Agent):学习者和决策者
    • 环境(Environment):智能体外部的一切,是智能体与之交互的对象。
    • 状态(State):对环境在某一时刻的特定描述,是智能体做出决策的依据。
    • 行动(Action): 智能体根据当前状态所能采取的操作。
    • 奖励(Reward):环境在智能体执行一个行动后,反馈给智能体的一个标量信号,用于评价该行动在特定状态下的好坏。

    强化学习智能体在一个“感知-行动-学习”的闭环中持续迭代

    在这里插入图片描述
    循环具体步骤如下:

    1. 在时间步 t t t,智能体观察到环境的当前状态 S t S_t St
    2. 基于状态 S t S_t St,智能体根据其内部的策略,选择一个行动 A t A_t At并执行它。策略本质是一个从状态到行动的映射,定义了智能体的行为方式。
    3. 环境接受到行动 A t A_t At后,会转移到一个新的状态 S t + 1 S_{t+1} St+1
    4. 同时环境会反馈给智能体一个即时奖励 R t + 1 R_{t+1} Rt+1
    5. 智能体利用这个反馈( S t + 1 、 R t + 1 S_{t+1}、R_{t+1} St+1Rt+1)来更新和优化其内部策略,以便在未来做出更好的决策。更新过程就是学习
  3. 基于大规模数据的预训练:自然语言处理(Natural language Processing,NLP)解决智能体在开始学习具体任务前,具备对世界的广泛理解,核心是基于大规模数据的预训练(Pre-training)

    预训练和微调(Pre-training ,Fine-tuning)范式核心思想:

    1. 预训练阶段:首先在一个包含互联网级别海量文本数据的通用语料库上,通过自监督学习(Self-supervised Learning)的方式训练一个超大规模的神经网络模型。
    2. 微调阶段:完成预训练之后,这个模型就已经学到了和数据集有关的丰富知识。之后针对特定的下游任务只需要少量该任务的标注数据对模型进行微调,即可让模型适应对应任务。

大模型通过大量预训练,展现出了例如上下文学习思维链推理涌现能力(Emergent Abilities)

1.4 基于大语言模型的智能体【LLM智能体】

LLM驱动的智能体通过一个由多个模块协同工作的、持续迭代的闭环流程来完成任务。具体步骤如下:
在这里插入图片描述

  1. 感知 (Perception) :流程始于感知模块 (Perception Module)。它通过传感器从外部环境 (Environment) 接收原始输入,形成观察 (Observation)。这些观察信息(如用户指令、API返回的数据或环境状态的变化)是智能体决策的起点,处理后将被传递给思考阶段。
  2. 思考 (Thought) :这是智能体的认知核心,对应图中的规划模块 (Planning Module)大型语言模型 (LLM) 的协同工作。
    • 规划与分解:首先,规划模块接收观察信息,进行高级策略制定。它通过反思 (Reflection)自我批判 (Self-criticism) 等机制,将宏观目标分解为更具体、可执行的步骤。
    • 推理与决策:随后,作为中枢的LLM 接收来自规划模块的指令,并与记忆模块 (Memory) 交互以整合历史信息。LLM进行深度推理,最终决策出下一步要执行的具体操作,这通常表现为一个工具调用 (Tool Call)
  3. 行动 (Action) :决策完成后,便进入行动阶段,由执行模块 (Execution Module) 负责。LLM生成的工具调用指令被发送到执行模块。该模块解析指令,从工具箱 (Tool Use) 中选择并调用合适的工具(如代码执行器、搜索引擎、API等)来与环境交互或执行任务。这个与环境的实际交互就是智能体的行动 (Action)
  4. 观察 (Observation) 与循环 :行动会改变环境的状态,并产生结果。
    • 工具执行后会返回一个工具结果 (Tool Result) 给LLM,这构成了对行动效果的直接反馈。同时,智能体的行动改变了环境,从而产生了一个全新的环境状态
    • 这个“工具结果”和“新的环境状态”共同构成了一轮全新的观察 (Observation)。这个新的观察会被感知模块再次捕获,同时LLM会根据行动结果更新记忆 (Memory Update),从而启动下一轮“感知-思考-行动”的循环。

2. 代码学习

构建基于规则的聊天机器人

设计思想:通过识别用户输入的关键词,然后应用预设的转换规则,将用户的陈述转化为一个开放式的提问

算法流程基于模式匹配文本替换

工作流程的伪代码如下:

FUNCTION generate_response(user_input):
	# 将用户输入拆分成单词
	words = SPLIT(user_input)
	
	# 寻找优先级最高的关键词规则
	best_rule = FIND_BEST_RULE(words)
	IF best_rule is NULL:
		RETURN a_generic_response() # 例如:“Please go on”
	
	# 使用规则分解用户输入
	
	decomposed_parts = DECOMPOSE(user_input,best_rule,decomposition_pattern)
	IF decomposition_failed:
		RETURN a_generic_response()
	
	# 对分解出的部分进行代词转换
	transformed_parts = TRANSFORM_PRONOUNS(decomposed_parts)
	
	# 使用重组规则生成回应
	
	response = REASSEMBLE(transformed_parts,best_rule.reassembly_patterns)
	RETURN response

运行Eliza,结果也是她只能基于一定的规则进行回答
在这里插入图片描述

3. 习题

  1. 物理符号系统假说[1]是符号主义时代的理论基石。请分析:

    • 该假说的"充分性论断"和"必要性论断"分别是什么含义?

      answer

      1. 充分性论断:任何一个物理符号系统,都具备产生通用智能行为的充分手段。
      2. 必要性论断:任何一个能够展现通用智能行为的系统,其本质必然是一个物理符号系统。
    • 结合本章内容,说明符号主义智能体在实践中遇到的哪些问题对该假说的"充分性"提出了挑战?

      answer

      1. 知识获取瓶颈:无法对世界上所有的知识都进行符号化
      2. 常识问题:为常识建立完备的知识库是重大挑战

      所以符号主义智能体要具备产生通用智能行为的手段是困难的

    • 大语言模型驱动的智能体是否符合物理符号系统假说?

      answer:不符合,大语言模型的“智能”来源于预训练的数据资料、外界交互和自主的学习。不符合物理符号系统的定义。

  2. 专家系统MYCIN[2]在医疗诊断领域取得了显著成功,但最终并未大规模应用于临床实践。请思考:

    提示:可以从技术、伦理、法律、用户接受度等多个角度分析

    • 除了本章提到的"知识获取瓶颈"和"脆弱性",还有哪些因素可能阻碍了专家系统在医疗等高风险领域的应用?

      answer

      1. 技术:MYCIN仅在一些领域表现超过非专业医生,获达到人类专家水平。但是医疗是一个复杂庞大的体系,有许多细分领域,对于不同的疾病也许要调整专家系统的知识库来进行更适合的诊断。
      2. 伦理:机器诊断可能并不被大众所接受和认可
      3. 法律:相关法律不完善,如果直接大规模应用于临床实践,对于诊断失误造成的用户财产损失、身体健康被破坏等问题,法律无法对机器进行处理。
    • 如果让现在的你设计一个医疗诊断智能体,你会如何设计系统来克服MYCIN的局限?

      answer:内置模型采用大语言模型,能够通过与医生患者互动,根据反馈的信息来自主学习,来突破知识获取的瓶颈。

    • 在哪些垂直领域中,基于规则的专家系统至今仍然是比深度学习更好的选择?请举例说明。

      answer

      1. 工业控制与自动化
      2. 法律法规与合规审查
  3. 在2.2节中,我们实现了一个简化版的ELIZA聊天机器人。请在此基础上进行扩展实践:

    提示:这是一道动手实践题,建议实际编写代码

    • 为ELIZA添加3-5条新的规则,使其能够处理更多样化的对话场景(如谈论工作、学习、爱好等)

      answer

      # 谈论工作
          r'.* job .*': [
              "What do you do for a living?",
              "Do you enjoy your job?",
              "How do you feel about your work?"
          ],
          # 谈论情绪
          r'.* sad .*': [
              "I'm sorry to hear that you're feeling sad.",
              "What do you think is making you feel sad?",
              "Have you felt this way before?"
          ],
          # 谈论学习
          r'.* study .*': [
              "What subject are you studying?",
              "How do you find your studies?",
              "Do you enjoy learning new things?"
          ],
      

      在这里插入图片描述

    • 实现一个简单的"上下文记忆"功能:让ELIZA能够记住用户在对话中提到的关键信息(如姓名、年龄、职业),并在后续对话中引用

      answer

      添加上下文记忆功能:

      # 字典存储memory = {}def store_memory(user_input):    key_patterns = {        "name": r"(?:my name is|i am called|i'm)\s+(\w+)",        "age": r"(?:i am|I'm)\s+(\d+)\s+(?:years old|year old)",        "job": r"(?:i work as|my job is|I am a)\s+(\w+(?:\s+\w+)*)"    }    # re.search() 在字符串中搜索第一个匹配的位置    # re.IGNORECASE 忽略大小写    for key, pattern in key_patterns.items():        match = re.search(pattern, user_input, re.IGNORECASE)        if match:            memory[key] = match.group(1)            print(f"记忆更新:{key} = {memory[key]}")  # 调试输出,确认存储    if memory is None:        print("当前记忆为空")  # 调试输出,确认记忆状态def find_memory(key):    return memory.get(key, None)# 字典存储
      memory = {}
      
      def store_memory(user_input):
          key_patterns = {
              "name":r"(?:my name is|i am called|i'm)(\w+)",
              "age":r"(?: i am|I'm) (\d+)(?:years? old|year old)",
              "job":r"(?:i work as|my job is|I am a)(\w+)"
          }
          # re.search() 在字符串中搜索第一个匹配的位置
          # re.IGNORECASE 忽略大小写
          for key, pattern in key_patterns.items():
              match = re.search(pattern, user_input, re.IGNORECASE)
              if match:
                  memory[key] = match.group(1)
      
      def find_memory(key):
          return memory.get(key, None)
      
      

      修改respond函数

      def respond(user_input):
          """
          根据规则库生成响应
          """
          for pattern, responses in rules.items():
              match = re.search(pattern, user_input, re.IGNORECASE)
              if match:
                  # 捕获匹配到的部分
                  captured_group = match.group(1) if match.groups() else ''
                  # 进行代词转换
                  swapped_group = swap_pronouns(captured_group)
                  # 从模板中随机选择一个并格式化
                  response = random.choice(responses).format(swapped_group)
      
                  # 检查是否有相关记忆需要插入
                  memory_ref = ""
                  if "name" in memory and "name" in user_input.lower():
                      memory_ref = f" By the way, I remember your name is {memory['name']}."
                  elif "age" in memory and "age" in user_input.lower():
                      memory_ref = f" Also, you mentioned you are {memory['age']} years old."
                  elif "job" in memory and "job" in user_input.lower():
                      memory_ref = f" I recall you work as a {memory['job']}."
                  return response+ memory_ref
              
          # 如果没有匹配任何特定规则,使用最后的通配符规则
          return random.choice(rules[r'.*'])
      

      修改主函数

      if __name__ == '__main__':
          print("Therapist: Hello! How can I help you today?")
          while True:
              user_input = input("You: ")
              if user_input.lower() in ["quit", "exit", "bye"]:
                  print("Therapist: Goodbye. It was nice talking to you.")
                  break
              # 记录用户信息到记忆
              store_memory(user_input)
              response = respond(user_input)
              print(f"Therapist: {response}")
      

      测试:
      在这里插入图片描述

    • 对比你扩展后的ELIZA与ChatGPT,列举至少3个维度上存在的本质差异

      answer

      1. “智能”的获取:扩展后的ELIZA的智慧来源于预先编码的知识库和推理规则;ChatGPT的智慧来自于预训练的数据库和与外界交互获得的知识
      2. 自主学习能力的有无:ELIZA没有自主学习的能力;ChatGPT有
      3. 交互能力的不同:ELIZA是静态的,交互完全取决于内置的规则;而ChatGPT是动态的,自主的回复。
    • 为什么基于规则的方法在处理开放域对话时会遇到"组合爆炸"问题并且难以扩展维护?能否使用数学的方法来说明?

      answer:因为规则数量会随着用户的要求、输入的内容不断的增长吧

  4. 马文·明斯基在"心智社会"理论[7]中提出了一个革命性的观点:智能源于大量简单智能体的协作,而非单一的完美系统。

    • 在图2.6"搭建积木塔"的例子中,如果 GRASP 智能体突然失效了,整个系统会发生什么?这种去中心化架构的优势和劣势是什么?

      answer :那整个系统没有办法抓取积木来搭建积木塔,但是系统仍然可以运行。

      优势:每一个简单智能体都独立,物理上分离,可扩展性强,某一个简单智能体的失效不会影响整个系统的运行

      劣势:协调比较复杂,开发和维护复杂,就像题目里说的Grasp智能体失效导致无法搭建积木塔,但是排查问题要一个个的智能体去排查。

    • 将"心智社会"理论与现在的一些多智能体系统(如CAMEL-WorkforceMetaGPTCrewAI)进行对比,它们之间存在哪些关联和不同之处?

      answer

      关联:给多智能体系统提供了重要的概念基础

      不同:一个是理论,一个是具体的实践。

    • 马文·明斯基认为智能体可以是"无心"的简单过程,然而现在的大语言模型和智能体往往都拥有强大的推理能力。这是否意味着"心智社会"理论在大语言模型时代不再适用了?

      answer:不是。

  5. 强化学习与监督学习是两种不同的学习范式。请分析:

    • 用AlphaGo的例子说明强化学习的"试错学习"机制是如何工作的

      answer :试错学习的机制:可以定义在棋局中赢了则+1,输了则得到-1,智能体的目标就是最大化从比赛开始到比赛结束的累计奖励(回报)。

    • 为什么强化学习特别适合序贯决策问题?它与监督学习在数据需求上有什么本质区别?

      answer :

      序贯决策_

      监督学习和强化学习在数据上的本质区别:

      监督学习:每个样本都有对应的标签、直接告诉了ground truth

      强化学习:数据是交互(场景、文本),且随机性大,一般无标注

    • 现在我们需要训练一个会玩超级马里奥游戏的智能体。如果分别使用监督学习和强化学习,各需要什么数据?哪种方法对于这个任务来说更合适?

      answer

      监督学习:数据:对于每一个障碍物,要有对应的操作方式

      强化学习:数据:游戏画面

      强化学习更加合适。

    • 在大语言模型的训练过程中,强化学习起到了什么关键性的作用?

  6. 预训练-微调范式是现代人工智能领域的重要突破。请深入思考:

    • 为什么说预训练解决了符号主义时代的"知识获取瓶颈"问题?它们在知识表示方式上有什么本质区别?

      answer :因为预训练可以让智能体通过大量数据学习到世界的常识性问题,而且只需要喂数据给智能体就可以,不用人手动输入固定的知识

      知识表示方面的区别:

      1. 符号主义:以明确的符号或规则形式存储在某个知识库
      2. 预训练:以连接权重的形式,分布式地存储在大量简单的处理单元(即人工神经元)的连接之间。整个网络的连接模式本身就构成了知识。
    • 预训练模型的知识绝大部分来自互联网数据,这可能带来哪些问题?如何缓解以上问题?

      answer:数据的正确性的问题、数据的版权问题、知识的片面性的问题。

      解决:多种相关知识结合、让模型持续的学习,在学习的过程中纠正一些问题。

    • 你认为"预训练-微调"范式是否可能会被某种新范式取代?或者它会长期存在?

      answer :可能会长期存在吧。。。

  7. 假设你要设计一个"智能代码审查助手",它能够自动审查代码提交(Pull Request),概括代码的实现逻辑、检查代码质量、发现潜在BUG、提出改进建议。

    • 如果在符号主义时代(1980年代)设计这个系统,你会如何实现?会遇到什么困难?

      answer:定义符号、推理规则来构建知识库。困难:系统只能根据知识库里面的知识对程序进行改动,而且这个知识库肯定很庞大,难以构建。

    • 如果在没有大语言模型的深度学习时代(2015年左右),你会如何实现?

      answer:设计智能体模块,让不同的模块分工检查不同的代码,例如一些检查语法错误、一些检查逻辑错误、一些负责提出意见等。

    • 在当前的大语言模型和智能体的时代,你会如何设计这个智能体的架构?它应该包含哪些模块(参考图2.10)?

      answer
      在这里插入图片描述

    • 对比这三个时代的方案,说明智能体技术的演进如何使这个任务从"几乎不可能"变为"可行"

      answer :理论的改进(符号主义→心智社会),实践的改进(符号→联结→基于强化学习→基于预训练→大语言模型)

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐