摘自:https://github.com/datawhalechina/Hello-Agents
1. 初识智能体
1.1 什么是智能体
- 智能体被定义为任何能够通过传感器(Sensors)感知其所处环境(Environment),并自主地通过**执行器(Actuators)采取行动(Action)**以达成特定目标的实体。
1.1.1 传统视角下的智能体
- 起点是结构最简单的反射智能体(Simple Reflex Agent)。决策核心由工程师明确设计的“条件-动作”规则构成,经典的自动恒温器便是如此:若传感器感知的室温高于设定值,则启动制冷系统。
- 完全依赖于当前的感知输入,不具备记忆或预测能力。可靠且高效,但如果环境的当前状态不足以作为决策的全部依据,智能体该怎么办?
- 基于模型的反射智能体(Model-Based Reflex Agent)。拥有一个内部的世界模型(World Model),用于追踪和理解环境中那些无法被直接感知的方面。它试图回答:“世界现在是什么样子的?”。例如,一辆在隧道中行驶的自动驾驶汽车,即便摄像头暂时无法感知到前方的车辆,它的内部模型依然会维持对那辆车存在、速度和预估位置的判断。这个内部模型让智能体拥有了初级的“记忆”,使其决策不再仅仅依赖于瞬时感知,而是基于一个更连贯、更完整的世界状态理解。
- 然而,仅仅理解世界还不够,智能体需要有明确的目标。这促进了基于目标的智能体(Goal-Based Agent) 的发展。它的行为不再是被动地对环境做出反应,而是主动地、有预见性地选择能够导向某个特定未来状态的行动。这类智能体需要回答的问题是:“我应该做什么才能达成目标?”。经典的例子是 GPS 导航系统:你的目标是到达公司,智能体会基于地图数据(世界模型),通过搜索算法(如 A*算法)来规划(Planning)出一条最优路径。这类智能体的核心能力体现在了对未来的考量与规划上。
- 更进一步,现实世界的目标往往不是单一的。我们不仅希望到达公司,还希望时间最短、路程最省油并且避开拥堵。当多个目标需要权衡时,基于效用的智能体(Utility-Based Agent) 便随之出现。它为每一个可能的世界状态都赋予一个效用值,这个值代表了满意度的高低。智能体的核心目标不再是简单地达成某个特定状态,而是最大化期望效用。它需要回答一个更复杂的问题:“哪种行为能为我带来最满意的结果?”。这种架构让智能体学会在相互冲突的目标之间进行权衡,使其决策更接近人类的理性选择。
- 至此,我们讨论的智能体虽然功能日益复杂,但其核心决策逻辑,无论是规则、模型还是效用函数,依然依赖于人类设计师的先验知识。如果智能体能不依赖预设,而是通过与环境的互动自主学习呢?这便是学习型智能体(Learning Agent) 的核心思想,而强化学习(Reinforcement Learning, RL) 是实现这一思想最具代表性的路径。一个学习型智能体包含一个性能元件(即我们前面讨论的各类智能体)和一个学习元件。学习元件通过观察性能元件在环境中的行动所带来的结果来不断修正性能元件的决策策略。
1.1.2 大语言模型驱动的新范式
- 传统智能体的能力源于工程师的显式编程与知识构建,其行为模式是确定且有边界的;而 LLM 智能体则通过在海量数据上的预训练,获得了隐式的世界模型与强大的涌现能力,使其能够以更灵活、更通用的方式应对复杂任务。这种差异使得 LLM 智能体可以直接处理高层级、模糊且充满上下文信息的自然语言指令。
- 以一个“智能旅行助手”为例来说明。在 LLM 智能体出现之前,规划旅行通常意味着用户需要在多个专用应用(如天气、地图、预订网站)之间手动切换,并由用户自己扮演信息整合与决策的角色。而一个 LLM 智能体则能将这个流程整合起来。当接收到“规划一次厦门之旅”这样的模糊指令时,它的工作方式体现了以下几点:
- 规划与推理:智能体首先会将这个高层级目标分解为一系列逻辑子任务,例如:
[确认出行偏好] -> [查询目的地信息] -> [制定行程草案] -> [预订票务住宿]。这是一个内在的、由模型驱动的规划过程。 - 工具使用:在执行规划时,智能体识别到信息缺口,会主动调用外部工具来补全。例如,它会调用天气查询接口获取实时天气,并基于“预报有雨”这一信息,在后续规划中倾向于推荐室内活动。
- 动态修正:在交互过程中,智能体会将用户的反馈(如“这家酒店超出预算”)视为新的约束,并据此调整后续的行动,重新搜索并推荐符合新要求的选项。整个“查天气 → 调行程 → 订酒店”的流程,展现了其根据上下文动态修正自身行为的能力。
- 规划与推理:智能体首先会将这个高层级目标分解为一系列逻辑子任务,例如:
1.1.3 智能体的类型
1)基于内部决策架构的分类
- 传统智能体的演进路径本身就构成了最经典的分类阶梯,它涵盖了从简单的反应式智能体,到引入内部模型的模型式智能体,再到更具前瞻性的基于目标和基于效用的智能体。此外,学习能力则是一种可赋予上述所有类型的元能力,使其能通过经验自我改进。
2)基于时间与反应性的分类
- 这个视角关注智能体是在接收到信息后立即行动,还是会经过深思熟虑的规划再行动。这揭示了智能体设计中一个核心权衡:追求速度的反应性(Reactivity) 与追求最优解的规划性(Deliberation) 之间的平衡
反应式智能体 (Reactive Agents)
- 决策延迟极低,不进行或只进行极少的未来规划。上文的简单反应式和基于模型的智能体都属于此类别。
- 核心优势在于速度快、计算开销低。例如,车辆的安全气囊系统必须在碰撞发生的毫秒内做出反应。
- 代价是“短视”,由于缺乏长远规划,反应式智能体容易陷入局部最优,难以完成需要多步骤协调的复杂任务。
规划式智能体(Deliberative Agents)
-
行动前会进行复杂的思考和规划,先利用其内部的世界模型,系统地探索未来的各种可能性,评估不同行动序列的后果,以期找到一条能够达成目标的最佳路径 。基于目标和基于效用的智能体是典型的规划式智能体。
-
决策过程类比为一位棋手。他会预想对手可能的应对,并规划出后续几步甚至十几步的棋路。
-
优势在于决策的战略性和远见。
-
但是有高昂的时间和计算成本。在瞬息万变的环境中,当规划式智能体还在深思熟虑时,采取行动的最佳时机可能早已过去。
混合式智能体(Hybrid Agents)
-
现实世界的复杂任务,往往既需要即时反应,也需要长远规划。例如,我们之前提到的智能旅行助手,既要能根据用户的即时反馈(如“这家酒店太贵了”)调整推荐(反应性),又要能规划出为期数天的完整旅行方案(规划性)。因此,混合式智能体应运而生,它旨在结合两者的优点,实现反应与规划的平衡。
-
一种经典的混合架构是分层设计:底层是一个快速的反应模块,处理紧急情况和基本动作;高层则是一个审慎的规划模块,负责制定长远目标。而现代的 LLM 智能体,则展现了一种更灵活的混合模式。它们通常在一个“思考-行动-观察”的循环中运作,巧妙地将两种模式融为一体:
- 规划(Reasoning) :在“思考”阶段,LLM 分析当前状况,规划出下一步的合理行动。这是一个审议过程。
- 反应(Acting & Observing) :在“行动”和“观察”阶段,智能体与外部工具或环境交互,并立即获得反馈。这是一个反应过程。
-
通过这种方式,智能体将一个需要长远规划的宏大任务,分解为一系列“规划-反应”的微循环。这使其既能灵活应对环境的即时变化,又能通过连贯的步骤,最终完成复杂的长期目标。
1.2 智能体的构成与运行原理
1.2.1 任务环境定义
- 要理解智能体的运作,我们必须先理解它所处的任务环境。在人工智能领域,通常使用PEAS 模型来精确描述一个任务环境,即分析其性能度量(Performance)、环境(Environment)、执行器(Actuators)和传感器(Sensors) 。以上文提到的智能旅行助手为例,下表 1.2 展示了如何运用 PEAS 模型对其任务环境进行规约。
表 1.2 智能旅行助手的 PEAS 描述

在实践中,LLM 智能体所处的数字环境展现出若干复杂特性,这些特性直接影响着智能体的设计。
首先,环境通常是部分可观察的。例如,旅行助手在查询航班时,无法一次性获取所有航空公司的全部实时座位信息。它只能通过调用航班预订 API,看到该 API 返回的部分数据,这就要求智能体必须具备记忆(记住已查询过的航线)和探索(尝试不同的查询日期)的能力。
其次,行动的结果也并非总是确定的。根据结果的可预测性,环境可分为确定性和随机性。旅行助手的任务环境就是典型的随机性环境。当它搜索票价时,两次相邻的调用返回的机票价格和余票数量都可能不同,这就要求智能体必须具备处理不确定性、监控变化并及时决策的能力。
此外,环境中还可能存在其他行动者,从而形成多智能体(Multi-agent) 环境。对于旅行助手而言,其他用户的预订行为、其他自动化脚本,甚至航司的动态调价系统,都是环境中的其他“智能体”。它们的行动(例如,订走最后一张特价票)会直接改变旅行助手所处环境的状态,这对智能体的快速响应和策略选择提出了更高要求。
最后,几乎所有任务都发生在序贯且动态的环境中。“序贯”意味着当前动作会影响未来;而“动态”则意味着环境自身可能在智能体决策时发生变化。这就要求智能体的“感知-思考-行动-观察”循环必须能够快速、灵活地适应持续变化的世界。
1.2.2 智能体的运行机制
- 智能体并非一次性完成任务,而是通过一个持续的循环与环境进行交互,这个核心机制被称为 智能体循环 (Agent Loop)。如图 1.5 所示,该循环描述了智能体与环境之间的动态交互过程,构成了其自主行为的基础。

- 这个循环主要包含以下几个相互关联的阶段:
- 感知 (Perception):循环的起点。智能体通过其传感器(例如,API 的监听端口、用户输入接口)接收来自环境的输入信息。这些信息,即观察 (Observation),既可以是用户的初始指令,也可以是上一步行动所导致的环境状态变化反馈。
- 思考 (Thought):接收到观察信息后,智能体进入其核心决策阶段。对于 LLM 智能体而言,这通常是由大语言模型驱动的内部推理过程。如图所示,“思考”阶段可进一步细分为两个关键环节:
- 规划 (Planning):智能体基于当前的观察和其内部记忆,更新对任务和环境的理解,并制定或调整一个行动计划。这可能涉及将复杂目标分解为一系列更具体的子任务。
- 工具选择 (Tool Selection):根据当前计划,智能体从其可用的工具库中,选择最适合执行下一步骤的工具,并确定调用该工具所需的具体参数。
- 行动 (Action):决策完成后,智能体通过其执行器(Actuators)执行具体的行动。这通常表现为调用一个选定的工具(如代码解释器、搜索引擎 API),从而对环境施加影响,意图改变环境的状态。
1.2.3 智能体的感知与行动
- 为了让 LLM 能够有效驱动这个循环,我们需要一套明确的交互协议 (Interaction Protocol) 来规范其与环境之间的信息交换。
- 在许多现代智能体框架中,这一协议体现在对智能体每一次输出的结构化定义上。智能体的输出不再是单一的自然语言回复,而是一段遵循特定格式的文本,其中明确地展示了其内部的推理过程与最终决策。这个结构通常包含两个核心部分:
- Thought (思考):这是智能体内部决策的“快照”。它以自然语言形式阐述了智能体如何分析当前情境、回顾上一步的观察结果、进行自我反思与问题分解,并最终规划出下一步的具体行动。
- Action (行动):这是智能体基于思考后,决定对环境施加的具体操作,通常以函数调用的形式表示。
- 例如,一个正在规划旅行的智能体可能会生成如下格式化的输出:
1 | Thought: 用户想知道北京的天气。我需要调用天气查询工具。 |
- 这里的
Action字段构成了对外部世界的指令。一个外部的解析器 (Parser) 会捕捉到这个指令,并调用相应的get_weather函数。行动执行后,环境会返回一个结果。例如,get_weather函数可能返回一个包含详细天气数据的 JSON 对象。然而,原始的机器可读数据(如 JSON)通常包含 LLM 无需关注的冗余信息,且格式不符合其自然语言处理的习惯。因此,感知系统的一个重要职责就是扮演传感器的角色:将这个原始输出处理并封装成一段简洁、清晰的自然语言文本,即观察。
1 | Observation: 北京当前天气为晴,气温25摄氏度,微风。 |
-
这段
Observation文本会被反馈给智能体,作为下一轮循环的主要输入信息,供其进行新一轮的Thought和Action。 -
综上所述,通过这个由 Thought、Action、Observation 构成的严谨循环,LLM 智能体得以将内部的语言推理能力,与外部环境的真实信息和工具操作能力有效地结合起来。
1.3 动手体验
- 我们的目标是构建一个能处理分步任务的智能旅行助手。需要解决的用户任务定义为:
- "你好,请帮我查询一下今天北京的天气,然后根据天气推荐一个合适的旅游景点。"
- 要完成这个任务,智能体必须展现出清晰的逻辑规划能力。它需要先调用天气查询工具,并将获得的观察结果作为下一步的依据。在下一轮循环中,它再调用景点推荐工具,从而得出最终建议。
1.3.1 准备工作
tavily-python是一个强大的 AI 搜索 API 客户端,用于获取实时的网络搜索结果,可以在官网注册后获取 API。
1)指令模板
- 驱动真实 LLM 的关键在于提示工程(Prompt Engineering)。我们需要设计一个“指令模板”,告诉 LLM 它应该扮演什么角色、拥有哪些工具、以及如何格式化它的思考和行动。这是我们智能体的“说明书”,它将作为
system_prompt传递给 LLM。
1 | AGENT_SYSTEM_PROMPT = """ |
2)工具 1:查询真实天气
1 | import requests |
3)工具 2:搜索并推荐旅游景点
1 | import os |
- 最后,我们将所有工具函数放入一个字典,供主循环调用:
1 | # 将所有工具函数放入一个字典,方便后续调用 |
1.3.2 接入大语言模型
1 | from openai import OpenAI |
1.3.3 执行行动循环
1 | import re |
1.4 智能体应用的协作模式
1.4.1 作为开发者工具的智能体
- GitHubCopilot: 作为该领域最具影响力的产品之一,Copilot 由 GitHub 与 OpenAI 联合开发。它深度集成于 Visual Studio Code 等主流编辑器中,以其强大的代码自动补全能力而闻名。开发者在编写代码时,Copilot 能实时提供整行甚至整个函数块的建议。近年来,它也通过 Copilot Chat 扩展了对话式编程的能力,允许开发者在编辑器内通过聊天解决编程问题。
- Claude Code: Claude Code 是由 Anthropic 开发的 AI 编程助手,旨在通过自然语言指令帮助开发者在终端中高效地完成编码任务。它能够理解完整的代码库结构,执行代码编辑、测试和调试等操作,支持从描述功能到代码实现的全流程开发。Claude Code 还提供了无交互(headless)模式,适用于 CI、pre-commit hooks、构建脚本和其他自动化场景,为开发者提供了强大的命令行编程体验。
- Trae: 作为新兴的 AI 编程工具,Trae 专注于为开发者提供智能化的代码生成和优化服务。它通过深度学习技术分析代码模式,能够为开发者提供精准的代码建议和自动化重构方案。Trae 的特色在于其轻量级的设计和快速响应能力,特别适合需要频繁迭代和快速原型开发的场景。
- Cursor: 与上述主要作为插件或集成功能存在的工具不同,Cursor 则选择了一条更具整合性的路径,它本身就是一个 AI 原生的代码编辑器。它并非在现有编辑器上增加 AI 功能,而是在设计之初就将 AI 交互作为核心。除了具备顶级的代码生成和聊天能力外,它更强调让 AI 理解整个代码库的上下文,从而实现更深层次的问答、重构和调试。
1.4.2 作为自主协作者的智能体
- 在这种模式下,我们不再是手把手地指导 AI 完成每一步,而是将一个高层级的目标委托给它。智能体会像一个真正的项目成员一样,独立地进行规划、推理、执行和反思,直到最终交付成果。这种从助手到协作者的转变,使得 LLM 智能体更深的进入了大众的视野。它标志着我们与 AI 的关系从“命令-执行”演变为“目标-委托”。智能体不再是被动的工具,而是主动的目标追求者。
- 单智能体自主循环:这是早期的典型范式,如 AgentGPT 所代表的模式。其核心是一个通用智能体通过“思考-规划-执行-反思”的闭环,不断进行自我提示和迭代,以完成一个开放式的高层级目标。
- 多智能体协作:这是当前最主流的探索方向,旨在通过模拟人类团队的协作模式来解决复杂问题。它又可细分为不同模式: 角色扮演式对话:如 CAMEL 框架,通过为两个智能体(例如,“程序员”和“产品经理”)设定明确的角色和沟通协议,让它们在一个结构化的对话中协同完成任务。 组织化工作流:如 MetaGPT 和 CrewAI,它们模拟一个分工明确的“虚拟团队”(如软件公司或咨询小组)。每个智能体都有预设的职责和工作流程(SOP),通过层级化或顺序化的方式协作,产出高质量的复杂成果(如完整的代码库或研究报告)。AutoGen 和 AgentScope 则提供了更灵活的对话模式,允许开发者自定义智能体间的复杂交互网络。
- 高级控制流架构:诸如 LangGraph 等框架,则更侧重于为智能体提供更强大的底层工程基础。它将智能体的执行过程建模为状态图(State Graph),从而能更灵活、更可靠地实现循环、分支、回溯以及人工介入等复杂流程。
1.4.3 Workflow 和 Agent 的差异
- 它们都旨在实现任务自动化,Workflow 是让 AI 按部就班地执行指令,而 Agent 则是赋予 AI 自由度去自主达成目标。
- 工作流是一种传统的自动化范式,其核心是对一系列任务或步骤进行预先定义的、结构化的编排。它本质上是一个精确的、静态的流程图,规定了在何种条件下、以何种顺序执行哪些操作。
- 一个典型的案例:某企业的费用报销审批流程。员工提交报销单(触发)-> 如果金额小于 500 元,直接由部门经理审批 -> 如果金额大于 500 元,先由部门经理审批,再流转至财务总监审批 -> 审批通过后,通知财务部打款。整个过程的每一步、每一个判断条件都被精确地预先设定。
- 基于大型语言模型的智能体是一个具备自主性的、以目标为导向的系统。它不仅仅是执行预设指令,而是能够在一定程度上理解环境、进行推理、制定计划,并动态地采取行动以达成最终目标。LLM 在其中扮演着“大脑”的角色。
- 一个典型的例子,便是我们在 1.3 节中写的智能旅行助手。当我们向它下达一个新指令,例如:“你好,请帮我查询一下今天北京的天气,然后根据天气推荐一个合适的旅游景点。” 它的处理过程充分展现了其自主性:规划与工具调用、推理与决策、生成结果
- 工作流是一种传统的自动化范式,其核心是对一系列任务或步骤进行预先定义的、结构化的编排。它本质上是一个精确的、静态的流程图,规定了在何种条件下、以何种顺序执行哪些操作。
1.5 习题
-
请分析以下四个
case中的主体是否属于智能体,如果是,那么属于哪种类型的智能体(可以从多个分类维度进行分析),并说明理由:case A:一台符合冯·诺依曼结构的超级计算机,拥有高达每秒 2EFlop 的峰值算力case B:特斯拉自动驾驶系统在高速公路上行驶时,突然检测到前方有障碍物,需要在毫秒级做出刹车或变道决策case C:AlphaGo在与人类棋手对弈时,需要评估当前局面并规划未来数十步的最优策略case D:ChatGPT 扮演的智能客服在处理用户投诉时,需要查询订单信息、分析问题原因、提供解决方案并安抚用户情绪
1 | B: 反应式、模型型、目标型/效用型、具身智能体; 感知道路状态,实时决策,并通过方向盘、制动等改变环境 |
-
假设你需要为一个"智能健身教练"设计任务环境。这个智能体能够:
- 通过可穿戴设备监测用户的心率、运动强度等生理数据
- 根据用户的健身目标(减脂/增肌/提升耐力)动态调整训练计划
- 在用户运动过程中提供实时语音指导和动作纠正
- 评估训练效果并给出饮食建议
请使用 PEAS 模型完整描述这个智能体的任务环境,并分析该环境具有哪些特性(如部分可观察、随机性、动态性等)。
1 | Performance Measure,性能指标:智能健身教练不是追求单一指标,而是综合优化:用户目标完成度、训练安全、动作标准程度、训练计划完成率、用户体验。其中,安全性应该拥有非常高的优先级。 |
-
某电商公司正在考虑两种方案来处理售后退款申请:
方案 A(
Workflow):设计一套固定流程,例如:A.1 对于一般商品且在 7 天之内,金额
< 100RMB自动通过;100-500RMB由客服审核;>500RMB需主管审批;而特殊商品(如定制品)一律拒绝退款A.2 对于超过 7 天的商品,无论金额,只能由客服审核或主管审批;
方案 B(
Agent):搭建一个智能体系统,让它理解退款政策、分析用户历史行为、评估商品状况,并自主决策是否批准退款请分析:
- 这两种方案各自的优缺点是什么?
- 在什么情况下
Workflow更合适?什么情况下Agent更有优势?如果你是该电商公司的负责人,你更倾向于采用哪种方案? - 是否存在一个方案 C,能够结合两种方案,达到扬长避短的效果?
1 | workflow: 确定性强。灵活性差 |
-
在 1.3 节的智能旅行助手基础上,请思考如何添加以下功能(可以只描述设计思路,也可以进一步尝试代码实现):
提示:思考如何修改
Thought-Action-Observation循环来实现这些功能。- 添加一个"记忆"功能,让智能体记住用户的偏好(如喜欢历史文化景点、预算范围等)
- 当推荐的景点门票已售罄时,智能体能够自动推荐备选方案
- 如果用户连续拒绝了 3 个推荐,智能体能够反思并调整推荐策略
1 | 1. 记忆用户偏好, 例如用户说:我比较喜欢历史建筑,预算一天500元。系统抽取并存储,以后推荐时:当前请求 + 长期记忆 + 当前旅行状态共同作为决策输入。 |
-
卡尼曼的"系统 1"(快速直觉)和"系统 2"(慢速推理)理论为神经符号主义 AI 提供了很好的类比。请首先构思一个具体的智能体的落地应用场景,然后说明场景中的:
提示:医疗诊断助手、法律咨询机器人、金融风控系统等都是常见的应用场景
- 哪些任务应该由"系统 1"处理?
- 哪些任务应该由"系统 2"处理?
- 这两个系统如何协同工作以达成最终目标?
1 | ``` |
2. 智能体发展史

2.1 基于符号与逻辑的早期智能体
- 在符号主义看来,智能行为的核心是基于一套明确规则对符号进行操作。因此,一个智能体可以被视为一个物理符号系统:它通过内部的符号来表示外部世界,并通过逻辑推理来规划行动。这个时代的智能体,其“智慧”完全来源于设计者预先编码的知识库和推理规则,而非通过自主学习获得。
2.1.1 物理符号系统假说
该假说包含两个核心论断:
- 充分性论断:任何一个物理符号系统,都具备产生通用智能行为的充分手段。
- 必要性论断:任何一个能够展现通用智能行为的系统,其本质必然是一个物理符号系统。
这里的物理符号系统指的是一个能够在物理世界中存在的系统,它由一组可被区分的符号和一系列对这些符号进行操作的过程组成,这些符号可以组合成更复杂的结构(例如表达式),而过程则可以创建、修改、复制和销毁这些符号结构。
简而言之,PSSH大胆地宣称:智能的本质,就是符号的计算与处理。
2.1.2 专家系统
专家系统的核心目标,是模拟人类专家在特定领域内解决问题的能力。它通过将专家的知识和经验编码成计算机程序,使其能够在面对相似问题时,给出媲美甚至超越人类专家的结论或建议。一个典型的专家系统通常由知识库、推理机、用户界面等几个核心部分构成。这种架构清晰地体现了知识与推理相分离的设计思想,是符号主义AI的重要特征。
- 知识库(Knowledge Base):专家系统的知识存储中心,用于存放领域专家的知识和经验。知识表示(Knowledge Representation) 是构建知识库的关键。在专家系统中,最常用的一种知识表示方法是产生式规则(Production Rules),即一系列“IF-THEN”形式的条件语句。例如:IF 病人有发烧症状 AND 咳嗽 THEN 可能患有呼吸道感染。这些规则将特定情境(IF部分,条件)与相应的结论或行动(THEN部分,结论)关联起来。一个复杂的专家系统可能包含成百上千条这样的规则,共同构成一个庞大的知识网络。
- 推理机(Inference Engine):推理机是专家系统的核心计算引擎。它是一个通用的程序,其任务是根据用户提供的事实,在知识库中寻找并应用相关的规则,从而推导出新的结论。推理机的工作方式主要有两种:
- 正向链(Forward Chaining):从已知事实出发,不断匹配规则的IF部分,触发THEN部分的结论,并将新结论加入事实库,直到最终推导出目标或无新规则可匹配。这是一种“数据驱动”的推理方式。
- 反向链(Backward Chaining):从一个假设的目标(比如“病人是否患有肺炎”)出发,寻找能够推导出该目标的规则,然后将该规则的IF部分作为新的子目标,如此递归下去,直到所有子目标都能被已知事实所证明。这是一种“目标驱动”的推理方式。
2.1.3 SHRDLU
专家系统展示了符号AI在专业领域的“深度”,SHRDLU项目在“广度”上实现了革命性的突破。SHRDLU旨在构建一个能在“积木世界”这一微观环境中,通过自然语言与人类流畅交互的综合性智能体。“积木世界”是一个模拟的三维虚拟空间,其中包含不同形状、颜色和大小的积木,以及一个可以抓取和移动它们的虚拟机械臂。用户通过自然语言向SHRDLU下达指令或提问,SHRDLU则在虚拟世界中执行动作或给出文字回答。

它首次将多个独立的人工智能模块(如语言解析、规划、记忆)集成在一个统一的系统中,并使它们协同工作:
- 自然语言理解:SHRDLU能够解析结构复杂且含有歧义的英语句子。它不仅能理解直接的命令(如
Pick up a big red block.),还能处理更复杂的指令,例如:- 指代消解:
Find a block which is taller than the one you are holding and put it into the box.在这条指令中,系统需要理解the one you are holding指代的是当前机械臂正抓取的物体。 - 上下文记忆:用户可以说
Grasp the pyramid.,然后接着问What does the box contain?,系统能够联系上下文进行回答。
- 指代消解:
- 规划与行动:在理解指令后,SHRDLU能够自主规划出一系列必要的动作来完成任务。例如,如果指令是“把蓝色积木放到红色积木上”,而红色积木上已经有另一个绿色积木,系统会规划出“先把绿色积木移开,再把蓝色积木放上去”的动作序列。
- 记忆与问答:SHRDLU拥有关于其所处环境和自身行为的记忆。用户可以就此提问,例如:
- 询问世界状态:
Is there a large block behind a pyramid? - 询问行为历史:
Did you touch any pyramid before you put the green one on the little cube? - 询问行为动机:
Why did you pick up the red block?SHRDLU可以回答:BECAUSE YOU ASKED ME TO.
- 询问世界状态:
2.1.4 符号主义面临的根本性挑战
1)常识知识与知识获取瓶颈
符号主义智能体的“智能”完全依赖于其知识库的质量和完备性。然而,如何构建一个能够支撑真实世界交互的知识库,被证明是一项极其艰巨的任务,主要体现在两个方面:
- 知识获取瓶颈(Knowledge Acquisition Bottleneck):专家系统的知识获取过程成本高昂、耗时漫长,难以规模化。许多知识是内隐的、直觉性的,很难被清晰地表达为“IF-THEN”规则。
- 常识问题(Common-sense Problem):人类行为依赖于庞大的常识背景(例如,“水是湿的”、“绳子可以拉不能推”),但符号系统除非被明确编码,否则对此一无所知。
2)框架问题与系统脆弱性
- 框架问题(Frame Problem):在一个动态世界中,智能体执行一个动作后,如何高效判断哪些事物未发生改变是一个逻辑难题。为每个动作显式地声明所有不变的状态,在计算上是不可行的,而人类却能毫不费力地忽略不相关的变化。
- 系统脆弱性(Brittleness):符号系统完全依赖预设规则,导致其行为非常“脆弱”。一旦遇到规则之外的任何微小变化或新情况,系统便可能完全失灵。
2.2 构建基于规则的聊天机器人
2.2.1 ELIZA 的设计思想
ELIZA是早期自然语言处理领域的著名尝试之一。ELIZA并非一个单一的程序,而是一个可以执行不同“脚本”的框架。其中,最广为人知也最成功的脚本是“DOCTOR”,它模仿了一位罗杰斯学派的非指导性心理治疗师。
ELIZA的工作方式极其巧妙:它从不正面回答问题或提供信息,而是通过识别用户输入中的关键词,然后应用一套预设的转换规则,将用户的陈述转化为一个开放式的提问。例如,当用户说“我为我的男朋友感到难过”时,ELIZA可能会识别出关键词“我为……感到难过”,并应用规则生成回应:“你为什么会为你的男朋友感到难过?”
魏泽鲍姆的设计思想并非要创造一个真正能够“理解”人类情感的智能体,恰恰相反,他想证明的是,通过一些简单的句式转换技巧,机器可以在完全不理解对话内容的情况下,营造出一种“智能”和“共情”的假象。
2.2.2 模式匹配与文本替换
ELIZA的算法流程基于模式匹配(Pattern Matching)与文本替换(Text Substitution),可被清晰地分解为以下四个步骤:
- 关键词识别与排序: 规则库为每个关键词(如
mother,dreamed,depressed)设定一个优先级。当输入包含多个关键词时,程序会选择优先级最高的关键词所对应的规则进行处理。 - 分解规则: 找到关键词后,程序使用带通配符(
*)的分解规则来捕获句子的其余部分。- 规则示例:
* my * - 用户输入:
"My mother is afraid of me" - 捕获结果:
["", "mother is afraid of me"]
- 规则示例:
- 重组规则: 程序从与分解规则关联的一组重组规则中,选择一条来生成回应(通常随机选择以增加多样性),并可选择性地使用上一步捕获的内容。
- 规则示例:
"Tell me more about your family." - 生成输出:
"Tell me more about your family."
- 规则示例:
- 代词转换: 在重组前,程序会进行简单的代词转换(如
I→you,my→your),以维持对话的连贯性。
通过这套机制,ELIZA成功地将复杂的自然语言理解问题,简化为了一个可操作的、基于规则的模式匹配游戏。
2.2.3 核心逻辑的实现
1 | import re |
局限性:
- 缺乏语义理解, 无上下文记忆, 规则的扩展性问题
2.3 马文·明斯基的心智社会
2.3.1 对单一整体智能模型的反思
20世纪70至80年代,符号主义的局限性日益明显。面对这种普遍的失败,明斯基开始提出一系列根本性的问题:
- “理解”是什么? 当我们说我们理解一个故事时,这是一种单一的能力吗?还是说,它其实是视觉化能力、逻辑推理能力、情感共鸣能力、社会关系常识等数十种不同心智过程协同工作的结果?
- “常识”是什么? 常识是一个包含了数百万条逻辑规则的庞大知识库吗(如Cyc项目的尝试)?还是说,它是一种分布式的、由无数具体经验和简单规则片段交织而成的网络?
- 智能体应该如何构建? 我们是否应该继续追求一个完美的、统一的逻辑系统,还是应该承认,智能本身就是“不完美”的、由许多功能各异、甚至会彼此冲突的简单部分组成的大杂烩? 这些问题直指单一整体智能模型的核心弊端。该类模型试图用一种统一的表示和推理机制来解决所有问题,但这与我们观察到的自然智能(尤其是人类智能)的运作方式相去甚远。明斯基认为,强行将多样化的心智活动塞进一个僵化的逻辑框架中,正是导致早期人工智能研究停滞不前的根源。
2.3.2 作为协作体的智能
在明斯基的理论框架中,智能体的定义与我们第一章讨论的现代智能体有所不同。这里的智能体指的是一个极其简单的、专门化的心智过程,它自身是“无心”的。例如,一个负责识别线条的LINE-FINDER智能体,或一个负责抓握的GRASP智能体。
这些简单的智能体被组织起来,形成功能更强大的机构(Agency)。一个机构是一组协同工作的智能体,旨在完成一个更复杂的任务。例如,一个负责搭积木的BUILD机构,可能由SEE、FIND、GET、PUT等多个下层智能体或机构组成。它们之间通过去中心化的激活与抑制信号相互影响,形成动态的控制流。
涌现(Emergence) 是理解心智社会理论的关键。复杂的、有目的性的智能行为,并非由某个高级智能体预先规划,而是从大量简单的底层智能体之间的局部交互中自发产生的。
让我们以经典的“搭建积木塔”任务为例,来说明这一过程。当一个高层目标(如“我要搭一个塔”)出现时,它会激活一个名为BUILD-TOWER的高层机构。
BUILD-TOWER机构并不知道如何执行具体的物理动作,它的唯一作用是激活它的下属机构,比如BUILDER。BUILDER机构同样很简单,它可能只包含一个循环逻辑:只要塔还没搭完,就激活ADD-BLOCK机构。ADD-BLOCK机构则负责协调更具体的子任务,它会依次激活FIND-BLOCK、GET-BLOCK和PUT-ON-TOP这三个子机构。- 每一个子机构又由更底层的智能体构成。例如,
GET-BLOCK机构会激活视觉系统中的SEE-SHAPE智能体、运动系统中的REACH和GRASP智能体。
在这个过程中,没有任何一个智能体或机构拥有整个任务的全局规划。GRASP只负责抓握,它不知道什么是塔;BUILDER只负责循环,它不知道如何控制手臂。然而,当这个由无数“无心”的智能体组成的社会,通过简单的激活和抑制规则相互作用时,一个看似高度智能的行为,搭建积木塔,就自然而然地涌现了出来。
2.3.3 对多智能体系统的理论启发
心智社会理论最深远的影响,在于它为分布式人工智能(Distributed Artificial Intelligence, DAI) 以及后来的多智能体系统(Multi-Agent System, MAS) 提供了重要的概念基础。
2.4 学习范式的演进与现代智能体
前文探讨的“心智社会”理论,在哲学层面为群体智能和去中心化协作指明了方向,但实现路径尚不明确。与此同时,符号主义在应对真实世界复杂性时暴露的根本性挑战也表明仅靠预先编码的规则无法构建真正鲁棒的智能。
这两条线索共同指向了一个问题:如果智能无法被完全设计,那么它是否可以被学习出来?
这一设问开启了人工智能的“学习”时代。其核心目标不再是手动编码知识,而是构建能从经验和数据中自动获取知识与能力的系统。
2.4.1 从符号到联结
作为对符号主义局限性的直接回应,联结主义(Connectionism) 在20世纪80年代重新兴起。与符号主义自上而下、依赖明确逻辑规则的设计哲学不同,联结主义是一种自下而上的方法,其灵感来源于对生物大脑神经网络结构的模仿。它的核心思想可以概括为以下几点:
- 知识的分布式表示:知识并非以明确的符号或规则形式存储在某个知识库中,而是以连接权重的形式,分布式地存储在大量简单的处理单元(即人工神经元)的连接之间。整个网络的连接模式本身就构成了知识。
- 简单的处理单元:每个神经元只执行非常简单的计算,如接收来自其他神经元的加权输入,通过一个激活函数进行处理,然后将结果输出给下一个神经元。
- 通过学习调整权重:系统的智能并非来自于设计者预先编写的复杂程序,而是来自于“学习”过程。系统通过接触大量样本,根据某种学习算法(如反向传播算法)自动、迭代地调整神经元之间的连接权重,从而使得整个网络的输出逐渐接近期望的目标。
在这种范式下,智能体不再是一个被动执行规则的逻辑推理机,而是一个能够通过经验自我优化的适应性系统。符号主义试图将人类的知识显式地编码给机器,而联结主义则试图创造出能够像人类一样学习知识的机器。
联结主义的兴起,特别是深度学习在21世纪的成功,为智能体赋予了强大的感知和模式识别能力,使其能够直接从原始数据(如图像、声音、文本)中理解世界,这是符号主义时代难以想象的。然而,如何让智能体学会在与环境的动态交互中做出最优的序贯决策,则需要另一种学习范式的补充。
2.4.2 基于强化学习的智能体
联结主义主要解决了感知问题(例如,“这张图片里有什么?”),但智能体更核心的任务是进行决策(例如,“在这种情况下,我应该做什么?”)。强化学习(Reinforcement Learning, RL) 正是专注于解决序贯决策问题的学习范式。它并非直接从标注好的静态数据集中学习,而是通过智能体与环境的直接交互,在“试错”中学习如何最大化其长期收益。
以AlphaGo为例,其核心的自我对弈学习过程便是强化学习的经典体现。在这个过程中,AlphaGo(智能体)通过观察棋盘的当前布局(环境状态),决定下一步棋的落子位置(行动)。一局棋结束后,根据胜负结果,它会收到一个明确的信号:赢了就是正向奖励,输了则是负向奖励。通过数百万次这样的自我对弈,AlphaGo不断调整其内部策略,逐渐学会了在何种棋局下选择何种行动,最有可能导向最终的胜利。这个过程完全是自主的,不依赖于人类棋谱的直接指导。
这种通过与环境互动、根据反馈信号来优化自身行为的学习机制,就是强化学习的核心框架。下面我们将详细拆解其基本构成要素和工作模式。
强化学习的框架可以用几个核心要素来描述:
- 智能体(Agent):学习者和决策者。在AlphaGo的例子中,就是其决策程序。
- 环境(Environment):智能体外部的一切,是智能体与之交互的对象。对AlphaGo而言,就是围棋的规则和对手。
- 状态(State, S):对环境在某一时刻的特定描述,是智能体做出决策的依据。例如,棋盘上所有棋子的当前位置。
- 行动(Action, A):智能体根据当前状态所能采取的操作。例如,在棋盘的某个合法位置上落下一子。
- 奖励(Reward, R):环境在智能体执行一个行动后,反馈给智能体的一个标量信号,用于评价该行动在特定状态下的好坏。例如,在一局棋结束后,胜利获得+1的奖励,失败获得-1的奖励。
这个循环的具体步骤如下:
- 在时间步t,智能体观察到环境的当前状态St。
- 基于状态 St,智能体根据其内部的策略(Policy, π) 选择一个行动 At 并执行它。策略本质上是一个从状态到行动的映射,定义了智能体的行为方式。
- 环境接收到行动 At 后,会转移到一个新的状态 St+1。
- 同时,环境会反馈给智能体一个即时奖励 Rt+1。
- 智能体利用这个反馈(新状态 St+1 和奖励 Rt+1)来更新和优化其内部策略,以便在未来做出更好的决策。这个更新过程就是学习。
智能体的学习目标,并非最大化某一个时间步的即时奖励,而是最大化从当前时刻开始到未来的累积奖励(Cumulative Reward),也称为回报(Return)。这意味着智能体需要具备“远见”,有时为了获得未来更大的奖励,需要牺牲当前的即时奖励(例如,围棋中的“弃子”策略)。通过在上述循环中不断探索、收集反馈并优化策略,智能体最终能够学会在复杂动态环境中进行自主决策和长期规划。
2.4.3 基于大规模数据的预训练
强化学习赋予了智能体从交互中学习决策策略的能力,但这通常需要海量的、针对特定任务的交互数据,导致智能体在学习之初缺乏先验知识,需要从零开始构建对任务的理解。无论是符号主义试图手动编码的常识,还是人类在决策时所依赖的背景知识,在RL智能体中都是缺失的。如何让智能体在开始学习具体任务前,就先具备对世界的广泛理解?这一问题的解决方案,最终在自然语言处理(Natural Language Processing, NLP) 领域中浮现,其核心便是基于大规模数据的预训练(Pre-training)。
1)从特定任务到通用模型
在预训练范式出现之前,传统的自然语言处理模型通常是为单一特定任务(如情感分析、机器翻译)在专门标注的中小规模数据集上从零开始独立训练的。这种模式导致了几个问题:模型的知识面狭窄,难以将在一个任务中学到的知识泛化到另一个任务,并且每一个新任务都需要耗费大量的人力去标注数据。预训练与微调(Pre-training, Fine-tuning)范式的提出彻底改变了这一现状。其核心思想分为两步:
- 预训练阶段:首先在一个包含互联网级别海量文本数据的通用语料库上,通过自监督学习(Self-supervised Learning) 的方式训练一个超大规模的神经网络模型。这个阶段的目标不是完成任何特定任务,而是学习语言本身内在的规律、语法结构、事实知识以及上下文逻辑。最常见的目标是“预测下一个词”。
- 微调阶段:完成预训练后,这个模型就已经学习到了和数据集有关的丰富知识。之后,针对特定的下游任务,只需使用少量该任务的标注数据对模型进行微调,即可让模型适应对应任务。
2)大型语言模型的诞生与涌现能力
通过在数万亿级别的文本上进行预训练,大型语言模型的神经网络权重实际上已经构建了一个关于世界知识的、高度压缩的隐式模型。它以一种全新的方式,解决了符号主义时代最棘手的“知识获取瓶颈”问题。更令人惊讶的是,当模型的规模(参数量、数据量、计算量)跨越某个阈值后,它们开始展现出未被直接训练的、预料之外的涌现能力(Emergent Abilities),例如:
- 上下文学习(In-context Learning):无需调整模型权重,仅在输入中提供几个示例(Few-shot) 甚至零个示例(Zero-shot),模型就能理解并完成新的任务。
- 思维链(Chain-of-Thought)推理:通过引导模型在回答复杂问题前,先输出一步步的推理过程,可以显著提升其在逻辑、算术和常识推理任务上的准确性。
这些能力的出现,标志着LLM不再仅仅是一个语言模型,它已经演变成了一个兼具海量知识库和通用推理引擎双重角色的组件。
至此,智能体发展的历史长河中,几大关键的技术拼图已经悉数登场:符号主义提供了逻辑推理的框架,联结主义和强化学习提供了学习与决策的能力,而大型语言模型则提供了前所未有的、通过预训练获得的世界知识和通用推理能力。下一节,我们将看到这些技术是如何在现代智能体的设计中融为一体的。
2.4.4 基于大语言模型的智能体
随着大型语言模型技术的飞速发展,以LLM为核心的智能体已成为人工智能领域的新范式。它不仅能够理解和生成人类语言,更重要的是,能够通过与环境的交互,自主地感知、规划、决策和执行任务。
如第一章所述,智能体与环境的交互可以被抽象为一个核心循环。LLM驱动的智能体通过一个由多个模块协同工作的、持续迭代的闭环流程来完成任务。具体步骤如下:
- 感知 (Perception) :流程始于感知模块 (Perception Module)。它通过传感器从外部环境 (Environment) 接收原始输入,形成观察 (Observation)。这些观察信息(如用户指令、API返回的数据或环境状态的变化)是智能体决策的起点,处理后将被传递给思考阶段。
- 思考 (Thought) :这是智能体的认知核心,对应图中的规划模块 (Planning Module) 和大型语言模型 (LLM) 的协同工作。
- 规划与分解:首先,规划模块接收观察信息,进行高级策略制定。它通过反思 (Reflection) 和自我批判 (Self-criticism) 等机制,将宏观目标分解为更具体、可执行的步骤。
- 推理与决策:随后,作为中枢的LLM 接收来自规划模块的指令,并与记忆模块 (Memory) 交互以整合历史信息。LLM进行深度推理,最终决策出下一步要执行的具体操作,这通常表现为一个工具调用 (Tool Call)。
- 行动 (Action) :决策完成后,便进入行动阶段,由执行模块 (Execution Module) 负责。LLM生成的工具调用指令被发送到执行模块。该模块解析指令,从工具箱 (Tool Use) 中选择并调用合适的工具(如代码执行器、搜索引擎、API等)来与环境交互或执行任务。这个与环境的实际交互就是智能体的行动 (Action)。
- 观察 (Observation) 与循环 :行动会改变环境的状态,并产生结果。
- 工具执行后会返回一个工具结果 (Tool Result) 给LLM,这构成了对行动效果的直接反馈。同时,智能体的行动改变了环境,从而产生了一个全新的环境状态。
- 这个“工具结果”和“新的环境状态”共同构成了一轮全新的观察 (Observation)。这个新的观察会被感知模块再次捕获,同时LLM会根据行动结果更新记忆 (Memory Update),从而启动下一轮“感知-思考-行动”的循环。
这种模块化的协同机制与持续的迭代循环,构成了LLM驱动智能体解决复杂问题的核心工作流。
2.4.5 智能体发展关键节点概览
- 符号主义 (Symbolism) :认为智能的核心在于对符号的操作与逻辑推理。这一思想催生了能够理解自然语言指令的SHRDLU、知识驱动的专家系统以及在国际象棋领域取得巨大成功的“深蓝”计算机。
- 联结主义 (Connectionism) :其灵感源于对大脑神经网络的模拟。尽管早期发展受限,但在杰弗里·辛顿 (Geoffrey Hinton) 等研究者的推动下,反向传播算法为神经网络的复苏奠定了基础。最终,随着深度学习时代的到来,这一思想通过卷积神经网络、Transformer等模型成为当前的主流。
- 行为主义 (Behaviorism) :强调智能体通过与环境的互动和试错来学习最优策略,其现代化身为强化学习 。从早期的TD-Gammon到与深度学习结合并击败人类顶尖棋手的AlphaGo,这一流派为智能体赋予了从经验中习得复杂决策行为的能力。

2.5 习题
-
物理符号系统假说是符号主义时代的理论基石。请分析:
- 该假说的"充分性论断"和"必要性论断"分别是什么含义?
- 结合本章内容,说明符号主义智能体在实践中遇到的哪些问题对该假说的"充分性"提出了挑战?
- 大语言模型驱动的智能体是否符合物理符号系统假说?
-
专家系统MYCIN在医疗诊断领域取得了显著成功,但最终并未大规模应用于临床实践。请思考:
提示:可以从技术、伦理、法律、用户接受度等多个角度分析
- 除了本章提到的"知识获取瓶颈"和"脆弱性",还有哪些因素可能阻碍了专家系统在医疗等高风险领域的应用?
- 如果让现在的你设计一个医疗诊断智能体,你会如何设计系统来克服MYCIN的局限?
- 在哪些垂直领域中,基于规则的专家系统至今仍然是比深度学习更好的选择?请举例说明。
-
在2.2节中,我们实现了一个简化版的ELIZA聊天机器人。请在此基础上进行扩展实践:
提示:这是一道动手实践题,建议实际编写代码
- 为ELIZA添加3-5条新的规则,使其能够处理更多样化的对话场景(如谈论工作、学习、爱好等)
- 实现一个简单的"上下文记忆"功能:让ELIZA能够记住用户在对话中提到的关键信息(如姓名、年龄、职业),并在后续对话中引用
- 对比你扩展后的ELIZA与ChatGPT,列举至少3个维度上存在的本质差异
- 为什么基于规则的方法在处理开放域对话时会遇到"组合爆炸"问题并且难以扩展维护?能否使用数学的方法来说明?
-
马文·明斯基在"心智社会"理论[7]中提出了一个革命性的观点:智能源于大量简单智能体的协作,而非单一的完美系统。
- 在图2.6"搭建积木塔"的例子中,如果
GRASP智能体突然失效了,整个系统会发生什么?这种去中心化架构的优势和劣势是什么? - 将"心智社会"理论与现在的一些多智能体系统(如CAMEL-Workforce、MetaGPT、CrewAI)进行对比,它们之间存在哪些关联和不同之处?
- 马文·明斯基认为智能体可以是"无心"的简单过程,然而现在的大语言模型和智能体往往都拥有强大的推理能力。这是否意味着"心智社会"理论在大语言模型时代不再适用了?
- 在图2.6"搭建积木塔"的例子中,如果
-
强化学习与监督学习是两种不同的学习范式。请分析:
- 用AlphaGo的例子说明强化学习的"试错学习"机制是如何工作的
- 为什么强化学习特别适合序贯决策问题?它与监督学习在数据需求上有什么本质区别?
- 现在我们需要训练一个会玩超级马里奥游戏的智能体。如果分别使用监督学习和强化学习,各需要什么数据?哪种方法对于这个任务来说更合适?
- 在大语言模型的训练过程中,强化学习起到了什么关键性的作用?
-
预训练-微调范式是现代人工智能领域的重要突破。请深入思考:
- 为什么说预训练解决了符号主义时代的"知识获取瓶颈"问题?它们在知识表示方式上有什么本质区别?
- 预训练模型的知识绝大部分来自互联网数据,这可能带来哪些问题?如何缓解以上问题?
- 你认为"预训练-微调"范式是否可能会被某种新范式取代?或者它会长期存在?
-
假设你要设计一个"智能代码审查助手",它能够自动审查代码提交(Pull Request),概括代码的实现逻辑、检查代码质量、发现潜在BUG、提出改进建议。
- 如果在符号主义时代(1980年代)设计这个系统,你会如何实现?会遇到什么困难?
- 如果在没有大语言模型的深度学习时代(2015年左右),你会如何实现?
- 在当前的大语言模型和智能体的时代,你会如何设计这个智能体的架构?它应该包含哪些模块(参考图2.10)?
- 对比这三个时代的方案,说明智能体技术的演进如何使这个任务从"几乎不可能"变为"可行"
3. 大语言模型基础
3.1 语言模型与 Transformer 架构
3.1.1 从 N-gram 到 RNN
1)统计语言模型与N-gram的思想
在深度学习兴起之前,统计方法是语言模型的主流。其核心思想是,一个句子出现的概率,等于该句子中每个词出现的条件概率的连乘。对于一个由词
直接计算这个公式几乎是不可能的,因为上式中的条件概率太难从语料库中估计了,词序列
为了解决这个问题,研究者引入了马尔可夫假设 (Markov Assumption) 。其核心思想是:我们不必回溯一个词的全部历史,可以近似地认为,一个词的出现概率只与它前面有限的 n−1 个词有关。基于这个假设建立的语言模型,我们称之为 N-gram模型。这里的 "N" 代表我们考虑的上下文窗口大小。
经过设置一个窗口之后,这些概率可以通过在大型语料库中进行最大似然估计(Maximum Likelihood Estimation,MLE) 来计算。这个术语听起来很复杂,但其思想非常直观:最可能出现的,就是我们在数据中看到次数最多的。例如,对于 Bigram 模型,我们想计算在词
-
:表示词对 在语料库中连续出现的总次数。 -
:表示单个词 在语料库中出现的总次数。 举例:假设我们拥有一个仅包含以下两句话的迷你语料库:datawhale agent learns,datawhale agent works。我们的目标是:使用 Bigram (N=2) 模型,估算句子datawhale agent learns出现的概率。根据 Bigram 的假设,我们每次会考察连续的两个词(即一个词对)。
- 计算第一个词的概率 P(datawhale)这是
datawhale出现的次数除以总词数。datawhale出现了 2 次,总词数是 6。结果为: 1/3 - 计算条件概率 P(agent∣datawhale) 这是词对
datawhale agent出现的次数除以datawhale出现的总次数。datawhale agent出现了 2 次,datawhale出现了 2 次。结果为:1 - 计算条件概率 P(learns∣agent) 这是词对
agent learns出现的次数除以agent出现的总次数。agent learns出现了 1 次,agent出现了 2 次。结果为:1/2 - 最后连乘得到整个句子的概率:1/6
N-gram 模型虽然简单有效,但有两个致命缺陷:
- 数据稀疏性 (Sparsity) :如果一个词序列从未在语料库中出现,其概率估计就为 0,这显然是不合理的。虽然可以通过平滑 (Smoothing) 技术缓解,但无法根除。
- 泛化能力差: 模型无法理解词与词之间的语义相似性。例如,即使模型在语料库中见过很多次
agent learns,它也无法将这个知识泛化到语义相似的词上。当我们计算robot learns的概率时,如果robot这个词从未出现过,或者robot learns这个组合从未出现过,模型计算出的概率也会是零。模型无法理解agent和robot在语义上的相似性。
2)神经网络语言模型与词嵌入
N-gram 模型的根本缺陷在于它将词视为孤立、离散的符号。为了克服这个问题,研究者们转向了神经网络,并提出了一种思想:用连续的向量来表示词。2003年,Bengio 等人提出的前馈神经网络语言模型 (Feedforward Neural Network Language Model) 是这一领域的里程碑。核心思想分两步:
- 构建一个语义空间:创建一个高维的连续向量空间,然后将词汇表中的每个词都映射为该空间中的一个点。这个点(即向量)就被称为词嵌入 (Word Embedding) 或词向量。在这个空间里,语义上相近的词,它们对应的向量在空间中的位置也相近。例如,
agent和robot的向量会靠得很近,而agent和apple的向量会离得很远。 - 学习从上下文到下一个词的映射:利用神经网络的强大拟合能力,来学习一个函数。这个函数的输入是前 n−1 个词的词向量,输出是词汇表中每个词在当前上下文后出现的概率分布。

在这个架构中,词嵌入是在模型训练过程中自动学习得到的。模型为了完成“预测下一个词”这个任务,会不断调整每个词的向量位置,最终使这些向量能够蕴含丰富的语义信息。一旦我们将词转换成了向量,我们就可以用数学工具来度量它们之间的关系。最常用的方法是余弦相似度 (Cosine Similarity) ,它通过计算两个向量夹角的余弦值来衡量它们的相似性。
神经网络语言模型通过词嵌入,成功解决了 N-gram 模型的泛化能力差的问题。然而,它仍然有一个类似 N-gram 的限制:上下文窗口是固定的。它只能考虑固定数量的前文,这为能处理任意长序列的循环神经网络埋下了伏笔。
3)RNN与LSTM
为了打破固定窗口的限制,循环神经网络 (Recurrent Neural Network, RNN) 应运而生,其核心思想非常直观:为网络增加“记忆”能力。NN 的设计引入了一个隐藏状态 (hidden state) 向量,我们可以将其理解为网络的短期记忆。在处理序列的每一步,网络都会读取当前的输入词,并结合它上一刻的记忆(即上一个时间步的隐藏状态),然后生成一个新的记忆(即当前时间步的隐藏状态)传递给下一刻。这个循环往复的过程,使得信息可以在序列中不断向后传递。

举例:我要预测i love ai后面的词
- 输入i,得到h1
- 输入love和h1得到h2
- 输入ai和h2得到h3,然后根据h3得到预测的下一个token
- 前两步不需要根据h得到token
然而,标准的 RNN 在实践中存在一个严重的问题:长期依赖问题 (Long-term Dependency Problem) 。在训练过程中,模型需要通过反向传播算法根据输出端的误差来调整网络深处的权重。对于 RNN 而言,序列的长度就是网络的深度。当序列很长时,梯度在从后向前传播的过程中会经过多次连乘,这会导致梯度值快速趋向于零(梯度消失)或变得极大(梯度爆炸)。梯度消失使得模型无法有效学习到序列早期信息对后期输出的影响,即难以捕捉长距离的依赖关系。
为了解决长期依赖问题,长短时记忆网络 (Long Short-Term Memory, LSTM) 被设计出来。LSTM 是一种特殊的 RNN,其核心创新在于引入了细胞状态 (Cell State) 和一套精密的门控机制 (Gating Mechanism) 。细胞状态可以看作是一条独立于隐藏状态的信息通路(相当于增加了一个隐藏状态当作长期记忆),允许信息在时间步之间更顺畅地传递。门控机制则是由几个小型神经网络构成,它们可以学习如何有选择地让信息通过,从而控制细胞状态中信息的增加与移除。这些门包括:
- 遗忘门 (Forget Gate):决定从上一时刻的细胞状态中丢弃哪些信息。
- 输入门 (Input Gate):决定将当前输入中的哪些新信息存入细胞状态。
- 输出门 (Output Gate):决定根据当前的细胞状态,输出哪些信息到隐藏状态。
3.1.2 Transformer 架构解析
RNN及LSTM通过引入循环结构来处理序列数据,它必须按顺序处理数据。第 t 个时间步的计算,必须等待第 t−1 个时间步完成后才能开始。这意味着 RNN 无法进行大规模的并行计算,在处理长序列时效率低下。
1)注意力机制
想象一下我们阅读这个句子:“The agent learns because it is intelligent.”。当我们读到加粗的 "it" 时,为了理解它的指代,我们的大脑会不自觉地将更多的注意力放在前面的 "agent" 这个词上。自注意力 (Self-Attention) 机制就是对这种现象的数学建模。它允许模型在处理序列中的每一个词时,都能兼顾句子中的所有其他词,并为这些词分配不同的“注意力权重”。权重越高的词,代表其与当前词的关联性越强,其信息也应该在当前词的表示中占据更大的比重。
为了实现上述过程,自注意力机制为每个输入的词元向量引入了三个可学习的角色:
- 查询 (Query, Q):代表当前词元,它正在主动地“查询”其他词元以获取信息。
- 键 (Key, K):代表句子中可被查询的词元“标签”或“索引”。
- 值 (Value, V):代表词元本身所携带的“内容”或“信息”。
这三个向量都是由原始的词嵌入向量乘以三个不同的、可学习的权重矩阵 (WQ,WK,WV) 得到的。整个计算过程可以分为以下几步,我们可以把它想象成一次高效的开卷考试:
- 准备“考题”和“资料”:对于句子中的每个词,都通过权重矩阵生成其Q,K,V向量。
- 计算相关性得分:要计算词A的新表示,就用词A的Q向量,去和句子中所有词(包括A自己)的K向量进行点积运算。这个得分反映了其他词对于理解词A的重要性。
- 稳定化与归一化:将得到的所有分数除以一个缩放因子dk(dk是K向量的维度),以防止梯度过小,然后用Softmax函数将分数转换成总和为1的权重,也就是归一化的过程。
- 加权求和:将上一步得到的权重分别乘以每个词对应的V向量,然后将所有结果相加。最终得到的向量,就是词A融合了全局上下文信息后的新表示。
2)多头注意力
如果只进行一次上述的注意力计算(即单头),模型可能会只学会关注一种类型的关联。比如,在处理 "it" 时,可能只学会了关注主语。但语言中的关系是复杂的,我们希望模型能同时关注多种关系(如指代关系、时态关系、从属关系等)。多头注意力机制应运而生。它的思想很简单:把一次做完变成分成几组,分开做,再合并。
它将原始的 Q, K, V 向量在维度上切分成 h 份(h 就是“头”数),每一份都独立地进行一次单头注意力的计算。这就好比让 h 个不同的“专家”从不同的角度去审视句子,每个专家都能捕捉到一种不同的特征关系。最后,将这 h 个专家的“意见”(即输出向量)拼接起来,再通过一个线性变换进行整合,就得到了最终的输出。
3)前馈神经网络
在每个 Encoder 和 Decoder 层中,多头注意力子层之后都跟着一个逐位置前馈网络(Position-wise Feed-Forward Network, FFN) 。如果说注意力层的作用是从整个序列中“动态地聚合”相关信息,那么前馈网络的作用从这些聚合后的信息中提取更高阶的特征。
这个名字的关键在于“逐位置”。它意味着这个前馈网络会独立地作用于序列中的每一个词元向量。换句话说,对于一个长度为 seq_len 的序列,这个 FFN 实际上会被调用 seq_len 次,每次处理一个词元。重要的是,所有位置共享的是同一组网络权重。这种设计既保持了对每个位置进行独立加工的能力,又大大减少了模型的参数量。这个网络的结构非常简单,由两个线性变换和一个 ReLU 激活函数组成:
其中,x是注意力子层的输出。 W1,b1,W2,b2是可学习的参数。通常,第一个线性层的输出维度 d_ff 会远大于输入的维度 d_model(例如 d_ff = 4 * d_model),经过 ReLU 激活后再通过第二个线性层映射回 d_model 维度。这种“先扩大再缩小”的模式,被认为有助于模型学习更丰富的特征表示。
4)残差连接与层归一化
所有子模块(如多头注意力和前馈网络)都被一个 Add & Norm 操作包裹。这个组合是为了保证 Transformer 能够稳定训练。
- 残差连接 (Add):该操作将子模块的输入
x直接加到该子模块的输出Sublayer(x)上。这一结构解决了深度神经网络中的梯度消失 (Vanishing Gradients) 问题。在反向传播时,梯度可以绕过子模块直接向前传播,从而保证了即使网络层数很深,模型也能得到有效的训练。其公式可以表示为:Output=x+Sublayer(x)。 - 层归一化 (Norm):该操作对单个样本的所有特征进行归一化,使其均值为0,方差为1。这解决了模型训练过程中的内部协变量偏移 (Internal Covariate Shift) 问题,使每一层的输入分布保持稳定,从而加速模型收敛并提高训练的稳定性。
5)位置编码
为输入序列中的每一个词元嵌入向量,都额外加上一个能代表其绝对位置和相对位置信息的“位置向量”。这个位置向量不是通过学习得到的,而是通过一个固定的数学公式直接计算得出。这样一来,即使两个词元(例如,两个都叫 agent 的词元)自身的嵌入是相同的,但由于它们在句子中的位置不同,它们最终输入到 Transformer 模型中的向量就会因为加上了不同的位置编码而变得独一无二。原论文中提出的位置编码使用正弦和余弦函数来生成,其公式如下:
- pos 是词元在序列中的位置(例如,0,1,2,...)
- i 是位置向量中的维度索引(从 0 到
/2) -
是词嵌入向量的维度(与我们模型中定义的一致)
1 | import torch |
3.1.3 Decoder-Only 架构
当任务转换为构建一个与人对话、创作、作为智能体大脑的通用模型时,或许我们并不需要那么复杂的结构。Transformer的设计哲学是“先理解,再生成”。编码器负责深入理解输入的整个句子,形成一个包含全局信息的上下文记忆,然后解码器基于这份记忆来生成翻译。但 OpenAI 在开发 GPT (Generative Pre-trained Transformer) 时,提出了一个更简单的思想:语言的核心任务,不就是预测下一个最有可能出现的词吗?
无论是回答问题、写故事还是生成代码,本质上都是在一个已有的文本序列后面,一个词一个词地添加最合理的内容。基于这个思想,GPT 做了一个大胆的简化:它完全抛弃了编码器,只保留了解码器部分。 这就是 Decoder-Only 架构的由来。Decoder-Only 架构的工作模式被称为自回归 (Autoregressive)
- 给模型一个起始文本(例如 “Datawhale Agent is”)。
- 模型预测出下一个最有可能的词(例如 “a”)。
- 模型将自己刚刚生成的词 “a” 添加到输入文本的末尾,形成新的输入(“Datawhale Agent is a”)。
- 模型基于这个新输入,再次预测下一个词(例如 “powerful”)。
- 不断重复这个过程,直到生成完整的句子或达到停止条件。
在训练时模型通常会一次性拿到完整文本,那么它是如何保证学习预测第 t+1 个词时,不去“偷看”更后面的答案呢?答案就是掩码自注意力 (Masked Self-Attention) 。
这种看似简单的架构,却带来了巨大的成功,其优势在于:
- 训练目标统一:模型的唯一任务就是“预测下一个词”,这个简单的目标非常适合在海量的无标注文本数据上进行预训练。
- 结构简单,易于扩展:更少的组件意味着更容易进行规模化扩展。今天的 GPT-4、Llama 等拥有数千亿甚至万亿参数的巨型模型,都是基于这种简洁的架构。
- 天然适合生成任务:其自回归的工作模式与所有生成式任务(对话、写作、代码生成等)完美契合,这也是它能成为构建通用智能体基础的核心原因。
3.2 与大语言模型交互
3.2.1 提示工程
提示工程,就是研究如何设计出精准的提示,从而引导模型产生我们期望输出的回复。
1)模型采样参数
Temperature:制模型输出 “随机性” 与 “确定性” 的关键参数。温度越低,输出越稳定Top-k:其原理是将所有 token 按概率从高到低排序,取排名前 k 个的 token 组成 “候选集”,随后对筛选出的 k 个 token 的概率进行 “归一化”Top-p:其原理是将所有 token 按概率从高到低排序,从排序后的第一个 token 开始,逐步累加概率,直到累积和首次达到或超过阈值
当同时设置 Top-p、Top-k 和温度系数时,这些参数会按照分层过滤的方式协同工作,其优先级顺序为:温度调整→Top-k→Top-p。温度调整整体分布的陡峭程度,Top-k 会先保留概率最高的 k 个候选,然后 Top-p 会从 Top-k 的结果中选取累积概率≥p 的最小集合作为最终的候选集。不过,通常 Top-k 和 Top-p 二选一即可,若同时设置,实际候选集为两者的交集。 需要注意的是,如果将温度设置为 0,则 Top-k 和 Top-p 将变得无关紧要,因为最有可能的 Token 将成为下一个预测的 Token;如果将 Top-k 设置为 1,温度和 Top-p 也将变得无关紧要,因为只有一个 Token 通过 Top-k 标准,它将是下一个预测的 Token。
2)零样本、单样本与少样本提示
- 零样本提示 (Zero-shot Prompting) 这指的是我们不给模型任何示例,直接让它根据指令完成任务。
- 单样本提示 (One-shot Prompting) 我们给模型提供一个完整的示例,向它展示任务的格式和期望的输出风格。
- 少样本提示 (Few-shot Prompting) 我们提供多个示例,这能让模型更准确地理解任务的细节、边界和细微差别,从而获得更好的性能。
3)指令调优的影响
早期的 GPT 模型(如 GPT-3)主要是“文本补全”模型,它们擅长根据前面的文本续写,但不一定能很好地理解并执行人类的指令。
指令调优 (Instruction Tuning) 是一种微调技术,它使用大量“指令-回答”格式的数据对预训练模型进行进一步的训练。经过指令调优后,模型能更好地理解并遵循用户的指令。
- 对“文本补全”模型的提示(你需要用少样本提示“教会”模型做什么):
1 | 这是一段将英文翻译成中文的程序。 |
- 对“指令调优”模型的提示(你可以直接下达指令):
1 | 请将下面的英文翻译成中文: |
指令调优的出现,极大地简化了我们与模型交互的方式,使得直接、清晰的自然语言指令成为可能。
4)基础提示技巧
- 角色扮演 (Role-playing) 通过赋予模型一个特定的角色,我们可以引导它的回答风格、语气和知识范围,使其输出更符合特定场景的需求。
- 上下文示例 (In-context Example) 这与少样本提示的思想一致,通过在提示中提供清晰的输入输出示例,来“教会”模型如何处理我们的请求,尤其是在处理复杂格式或特定风格的任务时非常有效。
5)思维链
对于需要逻辑推理、计算或多步骤思考的复杂问题,直接让模型给出答案往往容易出错。思维链 (Chain-of-Thought, CoT) 是一种强大的提示技巧,它通过引导模型“一步一步地思考”,提升了模型在复杂任务上的推理能力。
实现 CoT 的关键,是在提示中加入一句简单的引导语,如“请逐步思考”或“Let's think step by step”。
3.2.2 文本分词
将自然语言文本喂给大语言模型之前,必须先将其转换成模型能够处理的数字格式。这个将文本序列转换为数字序列的过程,就叫做分词 (Tokenization) 。分词器 (Tokenizer) 的作用,就是定义一套规则,将原始文本切分成一个个最小的单元,我们称之为词元 (Token) 。
1)为何需要分词
早期的自然语言处理任务可能会采用简单的分词策略:
- 按词分词 (Word-based) :直接用空格或标点符号将句子切分成单词。这种方法很直观,但也面临挑战:
- 词表爆炸与未登录词:一个语言的词汇量是巨大的,如果每个词都作为一个独立的词元,词表会变得难以管理。更糟糕的是,模型将无法处理任何未在词表中出现过的词(例如 “DatawhaleAgent”),这种现象我们称为“未登录词” (Out-Of-Vocabulary, OOV)。
- 语义关联的缺失:模型难以捕捉词形相近的词之间的语义关系。例如,"look"、"looks" 和 "looking" 会被视为三个完全不同的词元,尽管它们有共同的核心含义。同样,训练数据中的低频词由于出现次数少,其语义也难以被模型充分学习。
- 按字符分词 (Character-based) :将文本切分成单个字符。这种方法词表很小(例如英文字母、数字和标点),不存在 OOV 问题。但它的缺点是,单个字符大多不具备独立的语义,模型需要花费更多的精力去学习如何将字符组合成有意义的词,导致学习效率低下。
为了兼顾词表大小和语义表达,现代大语言模型普遍采用子词分词 (Subword Tokenization) 算法。它的核心思想是:将常见的词(如 "agent")保留为完整的词元,同时将不常见的词(如 "Tokenization")拆分成多个有意义的子词片段(如 "Token" 和 "ization")。这样既控制了词表的大小,又能让模型通过组合子词来理解和生成新词。
2)字节对编码算法解析
字节对编码 (Byte-Pair Encoding, BPE) 是最主流的子词分词算法之一,GPT系列模型就采用了这种算法。其核心思想非常简洁,可以理解为一个“贪心”的合并过程:
- 初始化:将词表初始化为所有在语料库中出现过的基本字符。
- 迭代合并:在语料库上,统计所有相邻词元对的出现频率,找到频率最高的一对,将它们合并成一个新的词元,并加入词表。
- 重复:重复第 2 步,直到词表大小达到预设的阈值。
案例演示: 假设我们的迷你语料库是 {"hug": 1, "pug": 1, "pun": 1, "bun": 1},并且我们想构建一个大小为 10 的词表。BPE 的训练过程可以用下表:

训练结束后,词表大小达到 10,我们就得到了新的分词规则。现在,对于一个未见过的词 "bug",分词器会先查找 "bug" 是否在词表中,发现不在;然后查找 "bu",发现不在;最后查找 "b" 和 "ug",发现都在,于是将其切分为 ['b', 'ug']。
3)分词器对开发者的意义
- 上下文窗口限制:模型的上下文窗口(如 8K, 128K)是以 Token 数量计算的,而不是字符数或单词数。同样一段话,在不同语言(如中英文)或不同分词器下,Token 数量可能相差巨大。精确管理输入长度、避免超出上下文限制是构建长时记忆智能体的基础。
- API 成本:大多数模型 API 都是按 Token 数量计费的。了解你的文本会被如何分词,是预估和控制智能体运行成本的关键一步。
- 模型表现的异常:有时模型的奇怪表现根源在于分词。例如,模型可能很擅长计算
2 + 2,但对于2+2(没有空格)就可能出错,因为后者可能被分词器视为一个独立的、不常见的词元。同样,一个词因为首字母大小写不同,也可能被切分成完全不同的 Token 序列,从而影响模型的理解。在设计提示词和解析模型输出时,考虑到这些“陷阱”有助于提升智能体的鲁棒性。
3.2.3 调用开源大语言模型
3.2.4 模型的选择
3.3 大语言模型的缩放法则与局限性
3.3.1 缩放法则
**缩放法则(Scaling Laws)**是近年来大语言模型领域最重要的发现之一。它揭示了模型性能与模型参数量、训练数据量以及计算资源之间存在着可预测的幂律关系。这一发现为大语言模型的持续发展提供了理论指导,阐明了增加资源投入能够系统性提升模型性能的底层逻辑。
研究发现,在对数-对数坐标系下,模型的性能(通常用损失 Loss 来衡量)与参数量、数据量和计算量这三个因素都呈现出平滑的幂律关系[9]。简单来说,只要我们持续、按比例地增加这三个要素,模型的性能就会可预测地、平滑地提升,而不会出现明显的瓶颈。这一发现为大模型的设计和训练提供了清晰的指导:在资源允许的范围内,尽可能地扩大模型规模和训练数据量。
早期的研究更侧重于增加模型参数量,但 DeepMind 在 2022 年提出的“Chinchilla 定律”对此进行了重要修正[10]。该定律指出,在给定的计算预算下,为了达到最优性能,模型参数量和训练数据量之间存在一个最优配比。具体来说,最优的模型应该比之前普遍认为的要小,但需要用多得多的数据进行训练。例如,一个 700 亿参数的 Chinchilla 模型,由于使用了比 GPT-3(1750 亿参数)多 4 倍的数据进行训练,其性能反而超越了后者。这一发现纠正了“越大越好”的片面认知,强调了数据效率的重要性,并指导了后续许多高效大模型(如 Llama 系列)的设计。
缩放法则最令人惊奇的产物是“能力的涌现”。所谓能力涌现,是指当模型规模达到一定阈值后,会突然展现出在小规模模型中完全不存在或表现不佳的全新能力。例如,链式思考 (Chain-of-Thought) 、指令遵循 (Instruction Following) 、多步推理、代码生成等能力,都是在模型参数量达到数百亿甚至千亿级别后才显著出现的。这种现象表明,大语言模型不仅仅是简单地记忆和复述,它们在学习过程中可能形成了某种更深层次的抽象和推理能力。对于智能体开发者而言,能力的涌现意味着选择一个足够大规模的模型,是实现复杂自主决策和规划能力的前提。
3.3.2 模型幻觉
模型幻觉(Hallucination) 通常指的是大语言模型生成的内容与客观事实、用户输入或上下文信息相矛盾,或者生成了不存在的事实、实体或事件。幻觉的本质是模型在生成过程中,过度自信地“编造”了信息,而非准确地检索或推理。根据其表现形式,幻觉可以被分为多种类型[11],例如:
- 事实性幻觉 (Factual Hallucinations) : 模型生成与现实世界事实不符的信息。
- 忠实性幻觉 (Faithfulness Hallucinations) : 在文本摘要、翻译等任务中,生成的内容未能忠实地反映源文本的含义。
- 内在幻觉 (Intrinsic Hallucinations) : 模型生成的内容与输入信息直接矛盾。
幻觉的产生是多方面因素共同作用的结果。首先,训练数据中可能包含错误或矛盾的信息。其次,模型的自回归生成机制决定了它只是在预测下一个最可能的词元,而没有内置的事实核查模块。最后,在面对需要复杂推理的任务时,模型可能会在逻辑链条中出错,从而“编造”出错误的结论。例如:一个旅游规划 Agent,可能会为你推荐一个现实中不存在的景点,或者预订一个航班号错误的机票。
此外,大语言模型还面临着知识时效性不足和训练数据中存在的偏见等挑战。大语言模型的能力来源于其训练数据。这意味着模型所掌握的知识是其训练数据收集时的最新材料。对于在此日期之后发生的事件、新出现的概念或最新的事实,模型将无法感知或正确回答。与此同时训练数据往往包含了人类社会的各种偏见和刻板印象。当模型在这些数据上学习时,它不可避免地会吸收并反映出这些偏见[12]。
为了提高大语言模型的可靠性,研究人员和开发者正在积极探索多种检测和缓解幻觉的方法:
- 数据层面: 通过高质量数据清洗、引入事实性知识以及强化学习与人类反馈 (RLHF) 等方式[13],从源头减少幻觉。
- 模型层面: 探索新的模型架构,或让模型能够表达其对生成内容的不确定性。
- 推理与生成层面:
- 检索增强生成 (Retrieval-Augmented Generation, RAG) [14]: 这是目前缓解幻觉的有效方法之一。RAG 系统通过在生成之前从外部知识库(如文档数据库、网页)中检索相关信息,然后将检索到的信息作为上下文,引导模型生成基于事实的回答。
- 多步推理与验证: 引导模型进行多步推理,并在每一步进行自我检查或外部验证。
- 引入外部工具: 允许模型调用外部工具(如搜索引擎、计算器、代码解释器)来获取实时信息或进行精确计算。
尽管幻觉问题短期内难以完全消除,但通过上述的策略,可以显著降低其发生频率和影响,提高大语言模型在实际应用中的可靠性和实用性。
3.4 习题
-
自然语言处理中,语言模型经历了从统计到神经网络的模型演进。
- 请使用本章提供的迷你语料库(
datawhale agent learns,datawhale agent works),计算句子agent works在Bigram模型下的概率 - N-gram模型的核心假设是马尔可夫假设。请解释这个假设的含义,以及N-gram模型存在哪些根本性局限?
- 神经网络语言模型(RNN/LSTM)和Transformer分别是如何克服N-gram模型局限的?它们各自的优势是什么?
- 请使用本章提供的迷你语料库(
-
Transformer架构[4]是现代大语言模型的基础。其中:
提示:可以结合本章3.1.2节的代码实现来辅助理解
- 自注意力机制(Self-Attention)的核心思想是什么?
- 为什么Transformer能够并行处理序列,而RNN必须串行处理?位置编码(Positional Encoding)在其中起什么作用?
- Decoder-Only架构与完整的Encoder-Decoder架构有什么区别?为什么现在主流的大语言模型都采用Decoder-Only架构?
-
文本子词分词算法是大语言模型的一项关键技术,负责将文本转换为模型可处理的 token 序列。那为什么不能直接以"字符"或"单词"作为模型的输入单元?BPE(Byte Pair Encoding)算法解决了什么问题?
-
本章3.2.3节介绍了如何本地部署开源大语言模型。请完成以下实践和分析:
提示:这是一道动手实践题,建议实际操作
- 按照本章的指导,在本地部署一个轻量级的开源模型(推荐Qwen3-0.6B),并尝试调整采样参数并观察其对输出的影响
- 选择一个具体任务(如文本分类、信息抽取、代码生成等),设计并对比以下不同的提示策略(如Zero-shot、Few-shot、Chain-of-Thought)对输出结果的效果差异
- 从性能、成本、可控性、隐私等维度比较闭源模型和开源模型
- 如果你要构建一个企业级的客服智能体,你会选择哪种类型的模型?需要考虑哪些因素?
-
模型幻觉(Hallucination)[11]是大语言模型当前存在的关键局限性之一。本章介绍了缓解幻觉的方法(如检索增强生成、多步推理、外部工具调用)
- 请选择其中一种,说明其工作原理和适用场景
- 调研前沿的研究和论文,是否还有其他的缓解模型幻觉的方法,他们又有哪些改进和优势?
-
假设你要设计一个论文辅助阅读智能体,它能够帮助研究人员快速阅读并理解学术论文,包括:总结论文研究的核心内容、回答关于论文的问题、提取关键信息、比较多篇不同论文的观点等。请回答:
- 你会选择哪个模型作为智能体设计时的基座模型?选择时需要考虑哪些因素?
- 如何设计提示词来引导模型更好地理解学术论文?学术论文通常很长,可能超过模型的上下文窗口限制,你会如何解决这个问题?
- 学术研究是严谨的,这意味着我们需要确保智能体生成的信息是准确客观忠于原文的。你认为系统中加入哪些设计能够更好的实现这一需求?