浏览代码

fix bold problem

jjyaoao 9 月之前
父节点
当前提交
21a1a7cc3c

+ 4 - 4
README.md

@@ -36,8 +36,8 @@
 | [第二章 智能体发展史](./docs/chapter2/第二章%20智能体发展史.md) | 从符号主义到 LLM 驱动的智能体演进 | ✅ |
 | [第三章 大语言模型基础](./docs/chapter3/第三章%20大语言模型基础.md) | Transformer、提示、主流LLM及其局限 | ✅ |
 | **第二部分:构建你的大语言模型智能体** |  |  |
-| [第四章 智能体的核心构件](./docs/chapter4/第四章%20智能体的核心构件.md) | 设计原则、核心能力、记忆与工具 | 🚧 |
-| [第五章 智能体经典构建范式](./docs/chapter5/第五章%20智能体经典构建范式.md) | 手把手实现 ReAct, Plan-and-Solve, Reflection | 🚧 |
+| [第四章 智能体经典范式构建](./docs/chapter4/第四章%20智能体经典范式构建.md) | 设计原则、核心能力、记忆与工具 | 🚧 |
+| [第五章 基于低代码平台的智能体搭建](./docs/chapter5/第五章%20基于低代码平台的智能体搭建.md) | 手把手实现 ReAct, Plan-and-Solve, Reflection | 🚧 |
 | [第六章 框架开发实践](./docs/chapter6/第六章%20框架开发实践.md) | CAMEL, LangChain, AutoGen 等主流框架应用 | 🚧 |
 | **第三部分:高级知识扩展** |  |  |
 | [第七章 推理与规划](./docs/chapter7/第七章%20推理与规划.md) | CoT, 逻辑推理, 搜索与规划 | 🚧 |
@@ -52,7 +52,7 @@
 | [第十七章 伦理、对齐与安全](./docs/chapter16/第十六章%20伦理、对齐与安全.md) | Agent 伦理、对齐与安全的讨论 | 🚧 |
 | **第五部分:毕业设计及未来展望** |  |  |
 | [第十八章 毕业设计](./docs/chapter18/第十八章%20毕业设计.md) | 构建属于你的完整多智能体应用 | 🚧 |
-| [第十九章 未来已来](./docs/chapter19/第十九章%20未来已来.md) | 具身智能、人机协作、挑战与机遇 |  |
+| [第十九章 未来已来](./docs/chapter19/第十九章%20未来已来.md) | 具身智能、人机协作、挑战与机遇 | 🚧 |
 
 ### 社区贡献精选 (Community Blog)
 
@@ -77,7 +77,7 @@
 
 - **第一部分:基础知识**(第1章~第3章),我们将从智能体的定义、类型与发展历史讲起,为你梳理"智能体"这一概念的来龙去脉。随后,我们会快速回顾大语言模型的核心知识,确保你拥有继续前行所需的全部理论基础。
 
-- **第二部分:构建你的大语言模型智能体**(第4章~第6章),这是你动手实践的开始。我们将深入剖析智能体的核心构件,并带你亲手编码实现 ReAct、Plan-and-Solve、Reflection 等经典构建范式。最后,我们会介绍 CAMEL 等业界主流的智能体开发框架,让你兼具"造轮子"和"用轮子"的能力。
+- **第二部分:构建你的大语言模型智能体**(第4章~第6章),这是你动手实践的开始。我们将深入剖析智能体经典范式构建,并带你亲手编码实现 ReAct、Plan-and-Solve、Reflection 等经典构建范式。最后,我们会介绍 CAMEL 等业界主流的智能体开发框架,让你兼具"造轮子"和"用轮子"的能力。
 
 - **第三部分:高级知识扩展**(第7章~第11章),在这一部分,你的智能体将"学会"高级技能。我们将探讨思维链(CoT)等推理规划技术,通过检索增强生成(RAG)赋予智能体记忆与工具使用能力,并学习多智能体间的通信协议。最终,你将掌握构建与评估一个完整多智能体系统的方法。
 

+ 4 - 4
docs/README.md

@@ -36,8 +36,8 @@
 | [第二章 智能体发展史](./chapter2/第二章%20智能体发展史.md) | 从符号主义到 LLM 驱动的智能体演进 | ✅ |
 | [第三章 大语言模型基础](./chapter3/第三章%20大语言模型基础.md) | Transformer、提示、主流LLM及其局限 | ✅ |
 | **第二部分:构建你的大语言模型智能体** |  |  |
-| [第四章 智能体的核心构件](./chapter4/第四章%20智能体的核心构件.md) | 设计原则、核心能力、记忆与工具 | 🚧 |
-| [第五章 智能体经典构建范式](./chapter5/第五章%20智能体经典构建范式.md) | 手把手实现 ReAct, Plan-and-Solve, Reflection | 🚧 |
+| [第四章 智能体经典范式构建](./chapter4/第四章%20智能体经典范式构建.md) | 设计原则、核心能力、记忆与工具 | 🚧 |
+| [第五章 基于低代码平台的智能体搭建](./chapter5/第五章%20基于低代码平台的智能体搭建.md) | 手把手实现 ReAct, Plan-and-Solve, Reflection | 🚧 |
 | [第六章 框架开发实践](./chapter6/第六章%20框架开发实践.md) | CAMEL, LangChain, AutoGen 等主流框架应用 | 🚧 |
 | **第三部分:高级知识扩展** |  |  |
 | [第七章 推理与规划](./chapter7/第七章%20推理与规划.md) | CoT, 逻辑推理, 搜索与规划 | 🚧 |
@@ -52,7 +52,7 @@
 | [第十七章 伦理、对齐与安全](./chapter16/第十六章%20伦理、对齐与安全.md) | Agent 伦理、对齐与安全的讨论 | 🚧 |
 | **第五部分:毕业设计及未来展望** |  |  |
 | [第十八章 毕业设计](./chapter18/第十八章%20毕业设计.md) | 构建属于你的完整多智能体应用 | 🚧 |
-| [第十九章 未来已来](./chapter19/第十九章%20未来已来.md) | 具身智能、人机协作、挑战与机遇 |  |
+| [第十九章 未来已来](./chapter19/第十九章%20未来已来.md) | 具身智能、人机协作、挑战与机遇 | 🚧 |
 
 ### 社区贡献精选 (Community Blog)
 
@@ -77,7 +77,7 @@
 
 - **第一部分:基础知识**(第1章~第3章),我们将从智能体的定义、类型与发展历史讲起,为你梳理"智能体"这一概念的来龙去脉。随后,我们会快速回顾大语言模型的核心知识,确保你拥有继续前行所需的全部理论基础。
 
-- **第二部分:构建你的大语言模型智能体**(第4章~第6章),这是你动手实践的开始。我们将深入剖析智能体的核心构件,并带你亲手编码实现 ReAct、Plan-and-Solve、Reflection 等经典构建范式。最后,我们会介绍 CAMEL 等业界主流的智能体开发框架,让你兼具"造轮子"和"用轮子"的能力。
+- **第二部分:构建你的大语言模型智能体**(第4章~第6章),这是你动手实践的开始。我们将深入剖析智能体经典范式构建,并带你亲手编码实现 ReAct、Plan-and-Solve、Reflection 等经典构建范式。最后,我们会介绍 CAMEL 等业界主流的智能体开发框架,让你兼具"造轮子"和"用轮子"的能力。
 
 - **第三部分:高级知识扩展**(第7章~第11章),在这一部分,你的智能体将"学会"高级技能。我们将探讨思维链(CoT)等推理规划技术,通过检索增强生成(RAG)赋予智能体记忆与工具使用能力,并学习多智能体间的通信协议。最终,你将掌握构建与评估一个完整多智能体系统的方法。
 

+ 2 - 2
docs/_sidebar.md

@@ -7,8 +7,8 @@
   - [第三章 大语言模型基础](./chapter3/第三章%20大模型基础.md)
 
 - **第二部分:构建你的大语言模型智能体**
-  - [第四章 智能体的核心构件](./chapter4/第四章%20智能体的核心构件.md)
-  - [第五章 智能体经典构建范式](./chapter5/第五章%20智能体经典构建范式.md)
+  - [第四章 智能体经典范式构建](./chapter4/第四章%20智能体经典范式构建.md)
+  - [第五章 基于低代码平台的智能体搭建](./chapter5/第五章%20基于低代码平台的智能体搭建.md)
   - [第六章 框架开发实践](./chapter6/第六章%20框架开发实践.md)
 
 - **第三部分:高级知识扩展**

+ 9 - 9
docs/chapter1/第一章 初识智能体.md

@@ -102,8 +102,8 @@
 
 一种经典的混合架构是分层设计:底层是一个快速的反应模块,处理紧急情况和基本动作;高层则是一个审慎的规划模块,负责制定长远目标。而现代的LLM智能体,则展现了一种更灵活的混合模式。它们通常在一个“思考-行动-观察”的循环中运作,巧妙地将两种模式融为一体:
 
-- **规划 (Reasoning)**:在“思考”阶段,LLM分析当前状况,规划出下一步的合理行动。这是一个审议过程。
-- **反应 (Acting & Observing)**:在“行动”和“观察”阶段,智能体与外部工具或环境交互,并立即获得反馈。这是一个反应过程。
+- **规划(Reasoning)** :在“思考”阶段,LLM分析当前状况,规划出下一步的合理行动。这是一个审议过程。
+- **反应(Acting & Observing)** :在“行动”和“观察”阶段,智能体与外部工具或环境交互,并立即获得反馈。这是一个反应过程。
 
 通过这种方式,智能体将一个需要长远规划的宏大任务,分解为一系列“规划-反应”的微循环。这使其既能灵活应对环境的即时变化,又能通过连贯的步骤,最终完成复杂的长期目标。
 
@@ -143,10 +143,10 @@
 
 前一节我们讲解了智能体的不同类型。然而,仅有内部决策逻辑不足以实现目标,智能体必须通过与外部环境的持续互动来执行任务。其运作的核心是一个持续的**智能体循环(Agent Loop)**,它将复杂的任务分解为一系列标准的交互步骤,通常包括:
 
-1. **感知 (Perception)**:智能体接收并解析来自用户或环境的输入信息,例如用户指令或上一步的行动结果。
-2. **思考 (Thought)**基于感知到的信息,智能体的核心模型进行规划,更新一个行动计划。这可能包括将复杂任务分解为子任务,或在众多可用工具中选择最合适的一个。
-3. **行动 (Action)**:智能体调用选定的工具执行计划中的具体步骤,对环境施加影响。
-4. **观察 (Observation)**:智能体评估行动产生的结果,并将其作为新一轮循环的输入,用以调整后续计划。
+1. **感知(Perception)** :智能体接收并解析来自用户或环境的输入信息,例如用户指令或上一步的行动结果。
+2. **思考(Thought)**基于感知到的信息,智能体的核心模型进行规划,更新一个行动计划。这可能包括将复杂任务分解为子任务,或在众多可用工具中选择最合适的一个。
+3. **行动(Action)** :智能体调用选定的工具执行计划中的具体步骤,对环境施加影响。
+4. **观察(Observation)** :智能体评估行动产生的结果,并将其作为新一轮循环的输入,用以调整后续计划。
 
 这个循环构成了所有LLM智能体运作的基本模式,如图1.5所示。1.2.1节将从环境的构成入手,进一步探讨该交互机制的属性及其对智能体设计的影响。
 
@@ -157,7 +157,7 @@
 
 ### 1.2.1 任务环境的特性
 
-要理解智能体的运作,我们必须先理解它所处的**任务环境**。在人工智能领域,通常使用**PEAS模型**来精确描述一个任务环境,即分析其**性能度量 (Performance)、环境 (Environment)、执行器 (Actuators)  传感器 (Sensors)**。以一个旅行规划智能体为例,下表1.2展示了如何运用PEAS模型对其任务环境进行规约。
+要理解智能体的运作,我们必须先理解它所处的**任务环境**。在人工智能领域,通常使用**PEAS模型**来精确描述一个任务环境,即分析其**性能度量(Performance)、环境(Environment)、执行器(Actuators)和传感器(Sensors)** 。以一个旅行规划智能体为例,下表1.2展示了如何运用PEAS模型对其任务环境进行规约。
 
 <div align="center">
   <p>表 1.2 旅行规划智能体的PEAS描述</p>
@@ -645,8 +645,8 @@ class BaseLLM:
 
 这个类主要负责以下三项任务:
 
-1. **初始化 (`init`)**: 实例化时,接收API密钥、服务地址和模型名称作为参数,并使用这些信息配置底层的 `openai` 客户端。
-2. **生成文本 (`generate`)**: 封装了调用LLM的核心逻辑。它接收一个提示(prompt),构建符合API规范的消息结构,发送请求,然后解析并返回模型生成的文本。
+1. **初始化 (`init`)** : 实例化时,接收API密钥、服务地址和模型名称作为参数,并使用这些信息配置底层的 `openai` 客户端。
+2. **生成文本 (`generate`)** : 封装了调用LLM的核心逻辑。它接收一个提示(prompt),构建符合API规范的消息结构,发送请求,然后解析并返回模型生成的文本。
 3. **错误处理**: 使用 `try...except` 结构来捕获执行过程中可能出现的网络或API异常,以增强程序的鲁棒性。
 
 ```Python

+ 8 - 8
docs/chapter2/第二章 智能体发展史.md

@@ -428,11 +428,11 @@ ELIZA的实践清晰地揭示了符号主义方法的核心矛盾:系统看似
 
 如第一章所述,智能体与环境的交互可以被抽象为一个核心循环。LLM驱动的智能体通过一个由多个模块协同工作的、持续迭代的闭环流程来完成任务。该流程遵循图2.9所示的架构,具体步骤如下:
 
-1. **感知 (Perception)**:流程始于感知模块。该模块从**外部环境 (Environment)** 中接收输入,即**观察 (Observation)**。这些观察信息(如用户指令或环境状态变化)被处理后,传递给规划模块。
-2. **规划 (Planning)**:规划模块接收到观察信息后,对其进行分析和高级策略制定。此阶段包含**反思 (Reflection)** 和**自我批判 (Self-criticism)** 等关键机制,旨在将高层级目标分解为更具体的、结构化的行动计划。该计划随后被发送至系统的认知核心——大型语言模型。
-3. **核心处理 (LLM Processing)**:作为中枢的**大型语言模型 (LLM)** 接收来自规划模块的指令。它会与**记忆模块 (Memory)** 进行交互,整合历史信息和上下文,进行深度推理,并最终决策出下一步的具体操作。这个操作通常表现为一个**工具调用 (Tool Call)**。
-4. **行动 (Action)**:LLM生成的工具调用指令被发送到**执行模块 (Execution Module)**。该模块解析指令,选择并使用**工具箱 (Tool Use)** 中相应的工具(如代码执行器、搜索引擎等)来执行任务。执行后,工具返回一个**工具结果 (Tool Result)** 给LLM,同时对环境产生一个实际的**行动 (Action)**。
-5. **反馈与更新 (Feedback & Update)**:LLM接收到返回的**工具结果**,评估该步骤的执行效果。基于此结果,LLM会对记忆模块进行**更新 (Memory Update)**,例如记录本次行动的成功、失败或关键产出。同时,环境因智能体的行动而发生改变,产生新的**观察 (Observation)**,该信息被感知模块捕获,从而启动下一轮循环。
+1. **感知 (Perception)** :流程始于感知模块。该模块从**外部环境 (Environment)** 中接收输入,即**观察 (Observation)** 。这些观察信息(如用户指令或环境状态变化)被处理后,传递给规划模块。
+2. **规划 (Planning)** :规划模块接收到观察信息后,对其进行分析和高级策略制定。此阶段包含**反思 (Reflection)** 和**自我批判 (Self-criticism)** 等关键机制,旨在将高层级目标分解为更具体的、结构化的行动计划。该计划随后被发送至系统的认知核心——大型语言模型。
+3. **核心处理 (LLM Processing)** :作为中枢的**大型语言模型 (LLM)** 接收来自规划模块的指令。它会与**记忆模块 (Memory)** 进行交互,整合历史信息和上下文,进行深度推理,并最终决策出下一步的具体操作。这个操作通常表现为一个**工具调用 (Tool Call)** 
+4. **行动 (Action)** :LLM生成的工具调用指令被发送到**执行模块 (Execution Module)** 。该模块解析指令,选择并使用**工具箱 (Tool Use)** 中相应的工具(如代码执行器、搜索引擎等)来执行任务。执行后,工具返回一个**工具结果 (Tool Result)** 给LLM,同时对环境产生一个实际的**行动 (Action)** 
+5. **反馈与更新 (Feedback & Update)** :LLM接收到返回的**工具结果**,评估该步骤的执行效果。基于此结果,LLM会对记忆模块进行**更新 (Memory Update)** ,例如记录本次行动的成功、失败或关键产出。同时,环境因智能体的行动而发生改变,产生新的**观察 (Observation)** ,该信息被感知模块捕获,从而启动下一轮循环。
 
 这种模块化的协同机制与持续的迭代循环,构成了LLM驱动智能体解决复杂问题的核心工作流。
 
@@ -442,9 +442,9 @@ ELIZA的实践清晰地揭示了符号主义方法的核心矛盾:系统看似
 
 这其中,主要有三大思潮主导着不同时期的研究范式:
 
-1. **符号主义 (Symbolism)**:以**司马贺 (Herbert A. Simon)**、**明斯基 (Marvin Minsky)** 等先驱为代表,认为智能的核心在于对符号的操作与逻辑推理。这一思想催生了能够理解自然语言指令的SHRDLU、知识驱动的专家系统以及在国际象棋领域取得巨大成功的“深蓝”计算机。
-2. **联结主义 (Connectionism)**:其灵感源于对大脑神经网络的模拟。尽管早期发展受限,但在**杰弗里·辛顿 (Geoffrey Hinton)** 等研究者的推动下,反向传播算法为神经网络的复苏奠定了基础。最终,随着深度学习时代的到来,这一思想通过卷积神经网络、Transformer等模型成为当前的主流。
-3. **行为主义 (Behaviorism)**:强调智能体通过与环境的互动和试错来学习最优策略,其现代化身为强化学习 。从早期的TD-Gammon到与深度学习结合并击败人类顶尖棋手的AlphaGo,这一流派为智能体赋予了从经验中习得复杂决策行为的能力。
+1. **符号主义 (Symbolism)** :以**司马贺 (Herbert A. Simon)** 、**明斯基 (Marvin Minsky)** 等先驱为代表,认为智能的核心在于对符号的操作与逻辑推理。这一思想催生了能够理解自然语言指令的SHRDLU、知识驱动的专家系统以及在国际象棋领域取得巨大成功的“深蓝”计算机。
+2. **联结主义 (Connectionism)** :其灵感源于对大脑神经网络的模拟。尽管早期发展受限,但在**杰弗里·辛顿 (Geoffrey Hinton)** 等研究者的推动下,反向传播算法为神经网络的复苏奠定了基础。最终,随着深度学习时代的到来,这一思想通过卷积神经网络、Transformer等模型成为当前的主流。
+3. **行为主义 (Behaviorism)** :强调智能体通过与环境的互动和试错来学习最优策略,其现代化身为强化学习 。从早期的TD-Gammon到与深度学习结合并击败人类顶尖棋手的AlphaGo,这一流派为智能体赋予了从经验中习得复杂决策行为的能力。
 
 进入21世纪20年代,这些思想流派以前所未有的方式深度融合。以GPT系列为代表的大语言模型,其本身是联结主义的产物,却成为了执行符号推理、进行工具调用和规划决策的核心“大脑”,形成了神经-符号结合的现代智能体架构。为了系统性地回顾这一发展脉络,下图2.10梳理了从20世纪50年代至今,人工智能体发展史上的关键理论、项目与事件,为读者提供一个清晰的全局概览,作为本章知识的沉淀。
 

+ 30 - 30
docs/chapter3/第三章 大模型基础.md

@@ -21,13 +21,13 @@ $$P(S)=P(w_1,w_2,…,w_m)=P(w_1)⋅P(w_2∣w_1)⋅P(w_3∣w_1,w_2)⋯P(w_m∣w_1
   <p>图 3.1 马尔可夫假设示意图</p>
 </div>
 
-为了解决这个问题,研究者引入了**马尔可夫假设 (Markov Assumption)**。其核心思想是:我们不必回溯一个词的全部历史,可以近似地认为,一个词的出现概率只与它前面有限的 $n−1$ 个词有关,如图3.1所示。基于这个假设建立的语言模型,我们称之为 **N-gram模型**。这里的 "N" 代表我们考虑的上下文窗口大小。让我们来看几个最常见的例子来理解这个概念:
+为了解决这个问题,研究者引入了**马尔可夫假设 (Markov Assumption)** 。其核心思想是:我们不必回溯一个词的全部历史,可以近似地认为,一个词的出现概率只与它前面有限的 $n−1$ 个词有关,如图3.1所示。基于这个假设建立的语言模型,我们称之为 **N-gram模型**。这里的 "N" 代表我们考虑的上下文窗口大小。让我们来看几个最常见的例子来理解这个概念:
 
-- **Bigram (当 N=2 时)**:这是最简单的情况,我们假设一个词的出现只与它前面的一个词有关。因此,链式法则中复杂的条件概率 $P(w_i∣w_1,dots,w_{i−1})$ 就可以被近似为更容易计算的形式:
+- **Bigram (当 N=2 时)** :这是最简单的情况,我们假设一个词的出现只与它前面的一个词有关。因此,链式法则中复杂的条件概率 $P(w_i∣w_1,dots,w_{i−1})$ 就可以被近似为更容易计算的形式:
 
 $$P(w_{i}∣w_{1},…,w_{i−1})≈P(w_{i}∣w_{i−1})$$
 
-- **Trigram (当 N=3 时)**:类似地,我们假设一个词的出现只与它前面的两个词有关:
+- **Trigram (当 N=3 时)** :类似地,我们假设一个词的出现只与它前面的两个词有关:
 
 $$P(w_i∣w_1,…,w_{i−1})≈P(w_i∣w_{i−2},w_{i−1})$$
 
@@ -101,7 +101,7 @@ print(f"最后: P('datawhale agent learns') ≈ {p_datawhale:.3f} * {p_agent_giv
 
 N-gram 模型虽然简单有效,但有两个致命缺陷:
 
-1. **数据稀疏性 (Sparsity)**:如果一个词序列从未在语料库中出现,其概率估计就为 0,这显然是不合理的。虽然可以通过平滑 (Smoothing) 技术缓解,但无法根除。
+1. **数据稀疏性 (Sparsity)** :如果一个词序列从未在语料库中出现,其概率估计就为 0,这显然是不合理的。虽然可以通过平滑 (Smoothing) 技术缓解,但无法根除。
 2. **泛化能力差:**模型无法理解词与词之间的语义相似性。例如,即使模型在语料库中见过很多次 `agent learns`,它也无法将这个知识泛化到语义相似的词上。当我们计算 `robot learns` 的概率时,如果 `robot` 这个词从未出现过,或者 `robot learns` 这个组合从未出现过,模型计算出的概率也会是零。模型无法理解 `agent` 和 `robot` 在语义上的相似性。
 
 **(2)神经网络语言模型与词嵌入**
@@ -118,7 +118,7 @@ N-gram 模型的根本缺陷在于它将词视为孤立、离散的符号。为
   <p>图 3.2 神经网络语言模型架构示意图</p>
 </div>
 
-如图3.2所示,在这个架构中,词嵌入是在模型训练过程中自动学习得到的。模型为了完成“预测下一个词”这个任务,会不断调整每个词的向量位置,最终使这些向量能够蕴含丰富的语义信息。一旦我们将词转换成了向量,我们就可以用数学工具来度量它们之间的关系。最常用的方法是**余弦相似度 (Cosine Similarity)**,它通过计算两个向量夹角的余弦值来衡量它们的相似性。
+如图3.2所示,在这个架构中,词嵌入是在模型训练过程中自动学习得到的。模型为了完成“预测下一个词”这个任务,会不断调整每个词的向量位置,最终使这些向量能够蕴含丰富的语义信息。一旦我们将词转换成了向量,我们就可以用数学工具来度量它们之间的关系。最常用的方法是**余弦相似度 (Cosine Similarity)** ,它通过计算两个向量夹角的余弦值来衡量它们的相似性。
 
 $$\text{similarity}(\vec{a}, \vec{b}) = \cos(\theta) = \frac{\vec{a} \cdot \vec{b}}{|\vec{a}| |\vec{b}|}$$
 
@@ -175,13 +175,13 @@ king - man + woman 的结果向量: [0.9 0.2]
   <p>图 3.3 RNN 结构示意图</p>
 </div>
 
-然而,标准的 RNN 在实践中存在一个严重的问题:**长期依赖问题 (Long-term Dependency Problem)**。在训练过程中,模型需要通过反向传播算法根据输出端的误差来调整网络深处的权重。对于 RNN 而言,序列的长度就是网络的深度。当序列很长时,梯度在从后向前传播的过程中会经过多次连乘,这会导致梯度值快速趋向于零(**梯度消失**)或变得极大(**梯度爆炸**)。梯度消失使得模型无法有效学习到序列早期信息对后期输出的影响,即难以捕捉长距离的依赖关系。
+然而,标准的 RNN 在实践中存在一个严重的问题:**长期依赖问题 (Long-term Dependency Problem)** 。在训练过程中,模型需要通过反向传播算法根据输出端的误差来调整网络深处的权重。对于 RNN 而言,序列的长度就是网络的深度。当序列很长时,梯度在从后向前传播的过程中会经过多次连乘,这会导致梯度值快速趋向于零(**梯度消失**)或变得极大(**梯度爆炸**)。梯度消失使得模型无法有效学习到序列早期信息对后期输出的影响,即难以捕捉长距离的依赖关系。
 
-为了解决长期依赖问题,**长短时记忆网络 (Long Short-Term Memory, LSTM)** 被设计出来^[3]^。LSTM 是一种特殊的 RNN,其核心创新在于引入了**细胞状态 (Cell State)** 和一套精密的**门控机制 (Gating Mechanism)**。细胞状态可以看作是一条独立于隐藏状态的信息通路,允许信息在时间步之间更顺畅地传递。门控机制则是由几个小型神经网络构成,它们可以学习如何有选择地让信息通过,从而控制细胞状态中信息的增加与移除。这些门包括:
+为了解决长期依赖问题,**长短时记忆网络 (Long Short-Term Memory, LSTM)** 被设计出来^[3]^。LSTM 是一种特殊的 RNN,其核心创新在于引入了**细胞状态 (Cell State)** 和一套精密的**门控机制 (Gating Mechanism)** 。细胞状态可以看作是一条独立于隐藏状态的信息通路,允许信息在时间步之间更顺畅地传递。门控机制则是由几个小型神经网络构成,它们可以学习如何有选择地让信息通过,从而控制细胞状态中信息的增加与移除。这些门包括:
 
-- **遗忘门 (Forget Gate)**: 决定从上一时刻的细胞状态中丢弃哪些信息。
-- **输入门 (Input Gate)**: 决定将当前输入中的哪些新信息存入细胞状态。
-- **输出门 (Output Gate)**: 决定根据当前的细胞状态,输出哪些信息到隐藏状态。
+- **遗忘门 (Forget Gate)** : 决定从上一时刻的细胞状态中丢弃哪些信息。
+- **输入门 (Input Gate)** : 决定将当前输入中的哪些新信息存入细胞状态。
+- **输出门 (Output Gate)** : 决定根据当前的细胞状态,输出哪些信息到隐藏状态。
 
 ### 3.1.2 Transformer 架构解析
 
@@ -199,8 +199,8 @@ king - man + woman 的结果向量: [0.9 0.2]
 
 我们可以将这个结构理解为一个分工明确的团队:
 
-1. **编码器 (Encoder)**:任务是“**理解**”输入的整个句子。它会读取所有输入词元(这个概念会在3.2.2节介绍),最终为每个词元生成一个富含上下文信息的向量表示。
-2. **解码器 (Decoder)**:任务是“**生成**”目标句子。它会参考自己已经生成的前文,并“咨询”编码器的理解结果,来生成下一个词。
+1. **编码器 (Encoder)** :任务是“**理解**”输入的整个句子。它会读取所有输入词元(这个概念会在3.2.2节介绍),最终为每个词元生成一个富含上下文信息的向量表示。
+2. **解码器 (Decoder)** :任务是“**生成**”目标句子。它会参考自己已经生成的前文,并“咨询”编码器的理解结果,来生成下一个词。
 
 为了真正理解 Transformer 的工作原理,最好的方法莫过于亲手实现它。在本节中,我们将采用一种“自顶向下”的方法:首先,我们搭建出 Transformer 完整的代码框架,定义好所有需要的类和方法。然后,我们将像完成拼图一样,逐一实现这些类的具体功能。
 
@@ -292,9 +292,9 @@ class DecoderLayer(nn.Module):
 
 为了实现上述过程,自注意力机制为每个输入的词元向量引入了三个可学习的角色:
 
-- **查询 (Query, Q)**: 代表当前词元,它正在主动地“查询”其他词元以获取信息。
-- **键 (Key, K)**: 代表句子中可被查询的词元“标签”或“索引”。
-- **值 (Value, V)**: 代表词元本身所携带的“内容”或“信息”。
+- **查询 (Query, Q)** : 代表当前词元,它正在主动地“查询”其他词元以获取信息。
+- **键 (Key, K)** : 代表句子中可被查询的词元“标签”或“索引”。
+- **值 (Value, V)** : 代表词元本身所携带的“内容”或“信息”。
 
 这三个向量都是由原始的词嵌入向量乘以三个不同的、可学习的权重矩阵 ($W^Q,W^K,W^V$) 得到的。整个计算过程可以分为以下几步,我们可以把它想象成一次高效的开卷考试:
 
@@ -382,7 +382,7 @@ class MultiHeadAttention(nn.Module):
 
 **3.1.2.3 前馈神经网络**
 
-在每个 Encoder 和 Decoder 层中,多头注意力子层之后都跟着一个**逐位置前馈网络(Position-wise Feed-Forward Network, FFN)**。如果说注意力层的作用是从整个序列中“动态地聚合”相关信息,那么前馈网络的作用从这些聚合后的信息中提取更高阶的特征。
+在每个 Encoder 和 Decoder 层中,多头注意力子层之后都跟着一个**逐位置前馈网络(Position-wise Feed-Forward Network, FFN)** 。如果说注意力层的作用是从整个序列中“动态地聚合”相关信息,那么前馈网络的作用从这些聚合后的信息中提取更高阶的特征。
 
 这个名字的关键在于“逐位置”。它意味着这个前馈网络会独立地作用于序列中的每一个词元向量。换句话说,对于一个长度为 `seq_len` 的序列,这个 FFN 实际上会被调用 `seq_len` 次,每次处理一个词元。重要的是,所有位置共享的是同一组网络权重。这种设计既保持了对每个位置进行独立加工的能力,又大大减少了模型的参数量。这个网络的结构非常简单,由两个线性变换和一个 ReLU 激活函数组成:
 
@@ -420,12 +420,12 @@ class PositionWiseFeedForward(nn.Module):
 
 这个操作由两个部分组成:
 
-- **残差连接 (Add)**: 该操作将子模块的输入 `x` 直接加到该子模块的输出 `Sublayer(x)` 上。这一结构解决了深度神经网络中的**梯度消失 (Vanishing Gradients)** 问题。在反向传播时,梯度可以绕过子模块直接向前传播,从而保证了即使网络层数很深,模型也能得到有效的训练。其公式可以表示为:$\text{Output} = x + \text{Sublayer}(x)$。
-- **层归一化 (Norm)**: 该操作对单个样本的所有特征进行归一化,使其均值为0,方差为1。这解决了模型训练过程中的**内部协变量偏移 (Internal Covariate Shift)** 问题,使每一层的输入分布保持稳定,从而加速模型收敛并提高训练的稳定性。
+- **残差连接 (Add)** : 该操作将子模块的输入 `x` 直接加到该子模块的输出 `Sublayer(x)` 上。这一结构解决了深度神经网络中的**梯度消失 (Vanishing Gradients)** 问题。在反向传播时,梯度可以绕过子模块直接向前传播,从而保证了即使网络层数很深,模型也能得到有效的训练。其公式可以表示为:$\text{Output} = x + \text{Sublayer}(x)$。
+- **层归一化 (Norm)** : 该操作对单个样本的所有特征进行归一化,使其均值为0,方差为1。这解决了模型训练过程中的**内部协变量偏移 (Internal Covariate Shift)** 问题,使每一层的输入分布保持稳定,从而加速模型收敛并提高训练的稳定性。
 
 **3.1.2.5 位置编码**
 
-我们已经了解,Transformer 的核心是自注意力机制,它通过计算序列中任意两个词元之间的关系来捕捉依赖。然而,这种计算方式有一个固有的问题:它本身不包含任何关于词元顺序或位置的信息。对于自注意力来说,“agent learns” 和 “learns agent” 这两个序列是完全等价的,因为它只关心词元之间的关系,而忽略了它们的排列。为了解决这个问题,Transformer 引入了**位置编码 (Positional Encoding)**。
+我们已经了解,Transformer 的核心是自注意力机制,它通过计算序列中任意两个词元之间的关系来捕捉依赖。然而,这种计算方式有一个固有的问题:它本身不包含任何关于词元顺序或位置的信息。对于自注意力来说,“agent learns” 和 “learns agent” 这两个序列是完全等价的,因为它只关心词元之间的关系,而忽略了它们的排列。为了解决这个问题,Transformer 引入了**位置编码 (Positional Encoding)** 
 
 位置编码的核心思想是,为输入序列中的每一个词元嵌入向量,都额外加上一个能代表其绝对位置和相对位置信息的“位置向量”。这个位置向量不是通过学习得到的,而是通过一个固定的数学公式直接计算得出。这样一来,即使两个词元(例如,两个都叫 `agent` 的词元)自身的嵌入是相同的,但由于它们在句子中的位置不同,它们最终输入到 Transformer 模型中的向量就会因为加上了不同的位置编码而变得独一无二。原论文中提出的位置编码使用正弦和余弦函数来生成,其公式如下:
 
@@ -481,7 +481,7 @@ Transformer的设计哲学是“先理解,再生成”。编码器负责深入
 
 无论是回答问题、写故事还是生成代码,本质上都是在一个已有的文本序列后面,一个词一个词地添加最合理的内容。基于这个思想,GPT 做了一个大胆的简化:**它完全抛弃了编码器,只保留了解码器部分。** 这就是 **Decoder-Only** 架构的由来。
 
-Decoder-Only 架构的工作模式被称为**自回归 (Autoregressive)**。这个听起来很专业的术语,其实描述了一个非常简单的过程:
+Decoder-Only 架构的工作模式被称为**自回归 (Autoregressive)** 。这个听起来很专业的术语,其实描述了一个非常简单的过程:
 
 1. 给模型一个起始文本(例如 “Datawhale Agent is”)。
 2. 模型预测出下一个最有可能的词(例如 “a”)。
@@ -493,7 +493,7 @@ Decoder-Only 架构的工作模式被称为**自回归 (Autoregressive)**。这
 
 你可能会问,解码器是如何保证在预测第 `t` 个词时,不去“偷看”第 `t+1` 个词的答案呢?
 
-答案就是**掩码自注意力 (Masked Self-Attention)**。在 Decoder-Only 架构中,这个机制变得至关重要。它的工作原理非常巧妙:
+答案就是**掩码自注意力 (Masked Self-Attention)** 。在 Decoder-Only 架构中,这个机制变得至关重要。它的工作原理非常巧妙:
 
 在自注意力机制计算出注意力分数矩阵(即每个词对其他所有词的关注度得分)之后,但在进行 Softmax 归一化之前,模型会应用一个“掩码”。这个掩码会将所有位于当前位置之后(即目前尚未观测到)的词元对应的分数,替换为一个非常大的负数。当这个带有负无穷分数的矩阵经过 Softmax 函数时,这些位置的概率就会变为 0。这样一来,模型在计算任何一个位置的输出时,都从数学上被阻止了去关注它后面的信息。这种机制保证了模型在预测下一个词时,能且仅能依赖它已经见过的、位于当前位置之前的所有信息,从而确保了预测的公平性和逻辑的连贯性。
 
@@ -634,14 +634,14 @@ How are you?
 
 ### 3.2.2 文本分词
 
-我们知道,计算机本质上只能理解数字。因此,在将自然语言文本喂给大语言模型之前,必须先将其转换成模型能够处理的数字格式。这个将文本序列转换为数字序列的过程,就叫做**分词 (Tokenization)**。**分词器 (Tokenizer)** 的作用,就是定义一套规则,将原始文本切分成一个个最小的单元,我们称之为**词元 (Token)**。
+我们知道,计算机本质上只能理解数字。因此,在将自然语言文本喂给大语言模型之前,必须先将其转换成模型能够处理的数字格式。这个将文本序列转换为数字序列的过程,就叫做**分词 (Tokenization)** 。**分词器 (Tokenizer)** 的作用,就是定义一套规则,将原始文本切分成一个个最小的单元,我们称之为**词元 (Token)** 
 
 **3.2.2.1 为何需要分词**
 
 早期的自然语言处理任务可能会采用简单的分词策略:
 
-- **按词分词 (Word-based)**:直接用空格或标点符号将句子切分成单词。这种方法很直观,但会面临“词表爆炸”的问题。一个语言的词汇量是巨大的,如果每个词都作为一个独立的词元,词表会变得难以管理。更糟糕的是,模型将无法处理任何未在词表中出现过的词,例如 “DatawhaleAgent”。
-- **按字符分词 (Character-based)**:将文本切分成单个字符。这种方法词表很小(例如英文字母、数字和标点),不存在 OOV 问题。但它的缺点是,单个字符大多不具备独立的语义,模型需要花费更多的精力去学习如何将字符组合成有意义的词,导致学习效率低下。
+- **按词分词 (Word-based)** :直接用空格或标点符号将句子切分成单词。这种方法很直观,但会面临“词表爆炸”的问题。一个语言的词汇量是巨大的,如果每个词都作为一个独立的词元,词表会变得难以管理。更糟糕的是,模型将无法处理任何未在词表中出现过的词,例如 “DatawhaleAgent”。
+- **按字符分词 (Character-based)** :将文本切分成单个字符。这种方法词表很小(例如英文字母、数字和标点),不存在 OOV 问题。但它的缺点是,单个字符大多不具备独立的语义,模型需要花费更多的精力去学习如何将字符组合成有意义的词,导致学习效率低下。
 
 为了兼顾词表大小和语义表达,现代大语言模型普遍采用**子词分词 (Subword Tokenization)** 算法。它的核心思想是:将常见的词(如 "agent")保留为完整的词元,同时将不常见的词(如 "Tokenization")拆分成多个有意义的子词片段(如 "Token" 和 "ization")。这样既控制了词表的大小,又能让模型通过组合子词来理解和生成新词。
 
@@ -876,15 +876,15 @@ print(response)
 
 早期的研究更侧重于增加模型参数量,但 DeepMind 在 2022 年提出的“Chinchilla 定律”对此进行了重要修正^[10]^。该定律指出,在给定的计算预算下,为了达到最优性能,**模型参数量和训练数据量之间存在一个最优配比**。具体来说,最优的模型应该比之前普遍认为的要小,但需要用多得多的数据进行训练。例如,一个 700 亿参数的 Chinchilla 模型,由于使用了比 GPT-3(1750 亿参数)多 4 倍的数据进行训练,其性能反而超越了后者。这一发现纠正了“越大越好”的片面认知,强调了数据效率的重要性,并指导了后续许多高效大模型(如 Llama 系列)的设计。
 
-缩放法则最令人惊奇的产物是“能力的涌现”。所谓能力涌现,是指当模型规模达到一定阈值后,会突然展现出在小规模模型中完全不存在或表现不佳的全新能力。例如,**链式思考 (Chain-of-Thought)**、**指令遵循 (Instruction Following)**、多步推理、代码生成等能力,都是在模型参数量达到数百亿甚至千亿级别后才显著出现的。这种现象表明,大语言模型不仅仅是简单地记忆和复述,它们在学习过程中可能形成了某种更深层次的抽象和推理能力。对于智能体开发者而言,能力的涌现意味着选择一个足够大规模的模型,是实现复杂自主决策和规划能力的前提。
+缩放法则最令人惊奇的产物是“能力的涌现”。所谓能力涌现,是指当模型规模达到一定阈值后,会突然展现出在小规模模型中完全不存在或表现不佳的全新能力。例如,**链式思考 (Chain-of-Thought)** 、**指令遵循 (Instruction Following)** 、多步推理、代码生成等能力,都是在模型参数量达到数百亿甚至千亿级别后才显著出现的。这种现象表明,大语言模型不仅仅是简单地记忆和复述,它们在学习过程中可能形成了某种更深层次的抽象和推理能力。对于智能体开发者而言,能力的涌现意味着选择一个足够大规模的模型,是实现复杂自主决策和规划能力的前提。
 
 ### 3.3.2 模型幻觉
 
 **模型幻觉(Hallucination)**通常指的是大语言模型生成的内容与客观事实、用户输入或上下文信息相矛盾,或者生成了不存在的事实、实体或事件。幻觉的本质是模型在生成过程中,过度自信地“编造”了信息,而非准确地检索或推理。根据其表现形式,幻觉可以被分为多种类型^[11]^,例如:
 
-- **事实性幻觉 (Factual Hallucinations)**: 模型生成与现实世界事实不符的信息。
-- **忠实性幻觉 (Faithfulness Hallucinations)**: 在文本摘要、翻译等任务中,生成的内容未能忠实地反映源文本的含义。
-- **内在幻觉 (Intrinsic Hallucinations)**: 模型生成的内容与输入信息直接矛盾。
+- **事实性幻觉 (Factual Hallucinations)** : 模型生成与现实世界事实不符的信息。
+- **忠实性幻觉 (Faithfulness Hallucinations)** : 在文本摘要、翻译等任务中,生成的内容未能忠实地反映源文本的含义。
+- **内在幻觉 (Intrinsic Hallucinations)** : 模型生成的内容与输入信息直接矛盾。
 
 幻觉的产生是多方面因素共同作用的结果。首先,训练数据中可能包含错误或矛盾的信息。其次,模型的自回归生成机制决定了它只是在预测下一个最可能的词元,而没有内置的事实核查模块。最后,在面对需要复杂推理的任务时,模型可能会在逻辑链条中出错,从而“编造”出错误的结论。例如:一个旅游规划 Agent,可能会为你推荐一个现实中不存在的景点,或者预订一个航班号错误的机票。
 
@@ -895,7 +895,7 @@ print(response)
 1. **数据层面**: 通过高质量数据清洗、引入事实性知识以及强化学习与人类反馈 (RLHF) 等方式^[13]^,从源头减少幻觉。
 2. **模型层面**: 探索新的模型架构,或让模型能够表达其对生成内容的不确定性。
 3. **推理与生成层面**:
-   1. **检索增强生成 (Retrieval-Augmented Generation, RAG)**^[14]^: 这是目前缓解幻觉的有效方法之一。RAG 系统通过在生成之前从外部知识库(如文档数据库、网页)中检索相关信息,然后将检索到的信息作为上下文,引导模型生成基于事实的回答。
+   1. **检索增强生成 (Retrieval-Augmented Generation, RAG)** ^[14]^: 这是目前缓解幻觉的有效方法之一。RAG 系统通过在生成之前从外部知识库(如文档数据库、网页)中检索相关信息,然后将检索到的信息作为上下文,引导模型生成基于事实的回答。
    2. **多步推理与验证**: 引导模型进行多步推理,并在每一步进行自我检查或外部验证。
    3. **引入外部工具**: 允许模型调用外部工具(如搜索引擎、计算器、代码解释器)来获取实时信息或进行精确计算。
 
@@ -914,7 +914,7 @@ print(response)
 
 **从 LLM 基础到构建智能体:**
 
-这一章的LLM基础主要是为了帮助大家更好的理解大模型的诞生以及发展过程,其中也蕴含了智能体设计的部分思考。例如,如何设计有效的提示词来引导 Agent 的规划与决策,如何根据任务需求选择合适的模型,以及如何在 Agent 的工作流中加入验证机制以规避模型的幻觉等问题,其解决方案均建立在本章的基础之上。我们现在已经准备好从理论转向实践。在下一章,我们将开始探索智能体的核心构件,将本章所学的知识应用于实际的智能体设计之中。
+这一章的LLM基础主要是为了帮助大家更好的理解大模型的诞生以及发展过程,其中也蕴含了智能体设计的部分思考。例如,如何设计有效的提示词来引导 Agent 的规划与决策,如何根据任务需求选择合适的模型,以及如何在 Agent 的工作流中加入验证机制以规避模型的幻觉等问题,其解决方案均建立在本章的基础之上。我们现在已经准备好从理论转向实践。在下一章,我们将开始探索智能体经典范式构建,将本章所学的知识应用于实际的智能体设计之中。
 
 ## 参考文献
 

+ 2 - 0
docs/chapter4/第四章 智能体经典范式构建.md

@@ -0,0 +1,2 @@
+# 第四章 智能体经典范式构建
+