Hello-Agents前三章内容-cnblog

Hello-Agents

第一部分 智能体与语言模型基础

第一章 初始智能体

1.1 什么是智能体

大致可以分为传统智能体和现在基于LLM的智能体

image-20260703201722431

传统智能体是更加偏向于符号主义,即任何东西都是可推理的,都在可控、可追溯范围内;而基于LLM驱动的智能体则在处理复杂多变环境下更加得心应手。

传统智能体一般适用于某一特殊任务环境下,比如构造恒温环境,那么工程师就可以利用传感器实时采集温度,然后传输到智能体进行决策,这都是显式编码好的,按照一定的逻辑进行处理,温度高了,那么降低环境温度,温度低了,那么就可以升高温度。特点:可追溯,反应快

LLM驱动的智能体适应于复杂环境,比如旅行助手(我和女朋友都挺喜欢去旅游的,而我做旅游攻略又不是太行,但是我又不想女朋友很辛苦,那么做一个这样的旅行助手对于我来说还是非常有帮助的),它可以进行任务规划,不至于目光短浅,同时又可以实时接收用户的反馈,快速做出响应,它还可以调用很多api,比如天气服务,地图服务等用于做出判断。

智能体的类型:

  1. 基于内部决策架构的分类,从简单的反应式智能体到基于目标和基于效用的智能体,其内部决策架构变得更加复杂了;
  2. 基于时间和反应性的分类:反应性(Reactiviy)和规划性(Deliberation),反应越快自然规划做的越少,规划越好,反应越慢,我们需要在这二者之间找到平衡,也就是混合式智能体(Hybrid Agent),比如说反应式智能体:恒温器,规划式智能体:AlphaGo和物流路径规划系统;混合式智能体:自动驾驶汽车。
  3. 基于知识表示的分类:
    1. 符号主义:讲究逻辑推理,按照制定规则运行,都是预设好的;
    2. 亚符号主义:又叫连接主义,像一个黑箱,学习知识是通过神经网络(说人话就是神奇魔法),然后可以做到语音识别和图像识别,但是又会出现幻想,比如你问"为什么你认为这是一只猫?",得到的回答可能非常奇怪。
    3. 神经符号主义:这是结合前两者的优点。

image-20260703203611080

再说一下图像识别这一技术,我对它的了解是,图片通过处理,可以用矩阵来表示,之后就把许多高品质图片喂给神经网络,给神经网络设置一些函数,比如奖励函数,当神经网络正确识别了图片,那么对其进行奖励,所以我们的任务就是对模型参数进行调整,来到到尽可能高的分数。

智能体的构成与运行原理

任务环境定义

要理解智能体的运作,我们必须先理解它所处的任务环境。在人工智能领域,通常使用PEAS 模型来精确描述一个任务环境,即分析其性能度量(Performance)、环境(Environment)、执行器(Actuators)和传感器(Sensors) 。以上文提到的智能旅行助手为例,下表 1.2 展示了如何运用 PEAS 模型对其任务环境进行规约。

image-20260707200508662

在实践中,LLM 智能体所处的数字环境展现出若干复杂特性,这些特性直接影响着智能体的设计。

首先,环境通常是部分可观察的。例如,旅行助手在查询航班时,无法一次性获取所有航空公司的全部实时座位信息。它只能通过调用航班预订 API,看到该 API 返回的部分数据,这就要求智能体必须具备记忆(记住已查询过的航线)和探索(尝试不同的查询日期)的能力。

其次,行动的结果也并非总是确定的。根据结果的可预测性,环境可分为确定性随机性。旅行助手的任务环境就是典型的随机性环境。当它搜索票价时,两次相邻的调用返回的机票价格和余票数量都可能不同,这就要求智能体必须具备处理不确定性、监控变化并及时决策的能力。

此外,环境中还可能存在其他行动者,从而形成多智能体(Multi-agent) 环境。对于旅行助手而言,其他用户的预订行为、其他自动化脚本,甚至航司的动态调价系统,都是环境中的其他“智能体”。它们的行动(例如,订走最后一张特价票)会直接改变旅行助手所处环境的状态,这对智能体的快速响应和策略选择提出了更高要求。

最后,几乎所有任务都发生在序贯动态的环境中。“序贯”意味着当前动作会影响未来;而“动态”则意味着环境自身可能在智能体决策时发生变化。这就要求智能体的“感知-思考-行动-观察”循环必须能够快速、灵活地适应持续变化的世界。

智能体的运行机制

image-20260707200613295

智能体大致可以认为是一个大脑+记忆+许多工具。

一个智能体实践:智能旅行助手,可以根据用户想要去哪里完,做出景点推荐。

hello-agents/Extra-Chapter/Extra07-环境配置.md at main · datawhalechina/hello-agents

创建虚拟环境:

# 创建虚拟环境
python -m venv venv

# 激活虚拟环境
# Windows:
venv\Scripts\activate

第二章智能体发展史

基于符号与逻辑的的早期智能体

早期一些人认为智能体就是一组符号以及对这些符号的操作的集合。

最成功的两个案例:专家系统、SHRDLU

image-20260707193618247

主要由知识库和推理机组成。

知识库由许多这个领域的专家和编程人员进行大量沟通产生许多产生式规则,即由一系列IF-THEN”形式的条件语句,例如:IF 病人有发烧症状 AND 咳嗽 THEN 可能患有呼吸道感染。

推理机则对构成的规则拓扑图进行推理,一般采用两种方式,正向链和反向链

  • 正向链(Forward Chaining):从已知事实出发,不断匹配规则的IF部分,触发THEN部分的结论,并将新结论加入事实库,直到最终推导出目标或无新规则可匹配。这是一种“数据驱动”的推理方式。
  • 反向链(Backward Chaining):从一个假设的目标(比如“病人是否患有肺炎”)出发,寻找能够推导出该目标的规则,然后将该规则的IF部分作为新的子目标,如此递归下去,直到所有子目标都能被已知事实所证明。这是一种“目标驱动”的推理方式。

专家系统一个典型案例就是MYCIN,这个被设计用于辅助医生诊断细菌性血液感染并推荐合适的抗生素治疗方案。它采用的就是反向链的方式:

image-20260707194108583

并且这个智能体系统还进行了优化,加入了置信因子,即对一个判断是有一定概率的,比起传统的布尔判断更加贴合现实世界,其效果也是非常好,超过大部分非专业医生,甚至可以超过专家。

其实也可以知道,在规则图建立非常庞大时,人很难做到很好的推测,但是机器由于其出众的计算能力,有些时候可以有更好的效果。

SHRDLU

这是一个构建于虚拟环境中的智能体,这个虚拟世界是一个有许多积木和一个机械臂,我们可以通过自然语言和它进行交流,它可以解析自然语言,而且还有记忆、推理、规划功能。

image-20260707195133811

比如我们可以说指令,“把红色积木放在绿色积木上”,“把比你手上现在拿的积木长的且是红色的所有积木放在箱子里”,“把绿色积木放进箱子前的那一个积木是什么颜色?”,对于这些它都可以回答。

这个符号主义智能体首次将多个独立的人工智能模块(如语言解析、规划、记忆)集成在一个统一的系统中,并使它们协同工作,其“感知-思考-行动”的闭环设计,奠定了现代智能体研究的基础。

可以看出这个项目真的是符号主义的一个非常成功之作,但是其仍然有弊端,因为这是运行在一个完备的虚拟世界,这里面的规则全部制定好了,不会遇到其他情况,但是真实世界往往更加复杂,充满意外,导致其系统非常脆弱;要构建一个可以连通世界的知识库也是几乎不可能完成的事,这就推出了后代智能体需要具有自主学习能力。

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

这是一个基于模式匹配的规则游戏——ELIZA游戏

我们需要自己创建一个模式匹配库rules ,其中每一个item为

'regix':[许多条回答]


比如:
r'I need (.*)': [
        "Why do you need {0}?",
        "Would it really help you to get {0}?",
        "Are you sure you need {0}?"
    ]

之后,我们还需要一个处理用户输入的函数,对其输入提取关键词,进行一个代词转换并组装成模式串,之后进行模式匹配,匹配上之后,我们随机一条回答,减少无聊性。

image-20260707192431160

从上面我们也可以看到,它无法进行语义理解,无法记忆上下文。

第三章 大语言模型基础

(1)统计语言模型与N-gram思想

统计方法预测一个句子在语料库中出现的概率等于\(P(S)=P(w_1)\times P(w_1|w_2)\times P(w_1w_2|w_3)\dots \times P(w_1w_2w_3\dots w_{n-1}|w_n)\),这个被称为链式法则。但是直接这样计算显然是不行的,太难计算,于是提出了马尔可夫假设,我们不必回看一个词的全部历史,可以近似的认为一个词的出现概率只与它前面有限的\(n-1\)个词有关,这个就被称为N-gram模型。比如当\(N=2\)时,我们要计算datawhale agent learns,那么概率\(P=P(datawhale)\times P(agent|datawhale)\times P(learns|agent)\)

自己的思考:这个模型是基于庞大语料库来支撑的,一旦某个新的词语出现,其不具有预测性,但是在一定情况下,也还是可以做到计算一个句子的概率。

缺点:

  • 数据稀疏性(Sparsity):一旦出现某个词语没有出现过,那么这个句子出现的概率就变为0,这显然是不合理的。
  • 泛化能力差:模型无法理解词与词之间的语义相似性。例如,即使模型在语料库中见过很多次 agent learns,它也无法将这个知识泛化到语义相似的词上。当我们计算 robot learns 的概率时,如果 robot 这个词从未出现过,或者 robot learns 这个组合从未出现过,模型计算出的概率也会是零。模型无法理解 agentrobot 在语义上的相似性。

(2)神经网络语言模型与词嵌入

词嵌入也可称为词向量,即把一个词用一个高维向量来表示,最后模型经过训练会呈现这样的特征:语义越接近的词语,它们在语义空间越接近。

这就是一个非常好的进步,这样词语之间是具有可推理的关系,可进行预测,不完全依赖语料库。

一个著名的例子展示了词向量捕捉到的语义关系: vector('King') - vector('Man') + vector('Woman') 这个向量运算的结果,在向量空间中与 vector('Queen') 的位置惊人地接近。这好比在进行语义的平移:我们从“国王”这个点出发,减去“男性”的向量,再加上“女性”的向量,最终就抵达了“女王”的位置。这证明了词嵌入能够学习到“性别”、“皇室”这类抽象概念。

核心思想:

  1. 构建一个语义空间:创建一个高维的连续向量空间,然后将词汇表中的每个词都映射为该空间中的一个点。这个点(即向量)就被称为词嵌入 (Word Embedding) 或词向量。在这个空间里,语义上相近的词,它们对应的向量在空间中的位置也相近。例如,agentrobot 的向量会靠得很近,而 agentapple 的向量会离得很远。
  2. 学习从上下文到下一个词的映射:利用神经网络的强大拟合能力,来学习一个函数。这个函数的输入是前 n−1n−1 个词的词向量,输出是词汇表中每个词在当前上下文后出现的概率分布。

在这个架构中,词嵌入是在模型训练过程中自动学习得到的。可以通过余弦相似度Cosine Similarity)来度量它们之间的关系:

\[\text{similarity}(\vec{a}, \vec{b}) = \cos(\theta) = \frac{\vec{a} \cdot \vec{b}}{|\vec{a}| \|\vec{b}\|} \]

  • 如果两个向量方向完全相同,夹角为0°,余弦值为1,表示完全相关。
  • 如果两个向量方向正交,夹角为90°,余弦值为0,表示毫无关系。
  • 如果两个向量方向完全相反,夹角为180°,余弦值为-1,表示完全负相关。

解决了泛化能力,但是上下文窗口仍然是固定的。

(3)循环神经网络 (RNN) 与长短时记忆网络 (LSTM)

RNN核心思想就是为网络增加了“记忆”能力。

RNN增加了一个隐藏状态向量,可以将其理解为网络的短期记忆。在处理序列的每一步,网络都会读取当前的输入词,并结合它上一刻的记忆(即上一个时间步的隐藏状态),然后生成一个新的记忆(即当前时间步的隐藏状态)传递给下一刻。这个循环往复的过程,使得信息可以在序列中不断向后传递。

然而,标准的 RNN 在实践中存在一个严重的问题:长期依赖问题 (Long-term Dependency Problem) 。在训练过程中,模型需要通过反向传播算法根据输出端的误差来调整网络深处的权重。对于 RNN 而言,序列的长度就是网络的深度。当序列很长时,梯度在从后向前传播的过程中会经过多次连乘,这会导致梯度值快速趋向于零(梯度消失)或变得极大(梯度爆炸)。梯度消失使得模型无法有效学习到序列早期信息对后期输出的影响,即难以捕捉长距离的依赖关系。

为了解决长距离依赖的关系,引入长短时记忆网络。

LSTM 是一种特殊的 RNN,其核心创新在于引入了细胞状态 (Cell State) 和一套精密的门控机制 (Gating Mechanism) 。细胞状态可以看作是一条独立于隐藏状态的信息通路,允许信息在时间步之间更顺畅地传递。门控机制则是由几个小型神经网络构成,它们可以学习如何有选择地让信息通过,从而控制细胞状态中信息的增加与移除。这些门包括:

  • 遗忘门 (Forget Gate):决定从上一时刻的细胞状态中丢弃哪些信息。
  • 输入门 (Input Gate):决定将当前输入中的哪些新信息存入细胞状态。
  • 输出门 (Output Gate):决定根据当前的细胞状态,输出哪些信息到隐藏状态。

Transformer 架构解析

RNN和LSTM解决了上下文窗口依赖以及泛化问题,但是都是按顺序处理,这导致RNN无法进行大规模任务,所以出现了Transformer 架构,这个可以并行计算。

它完全抛弃了循环结构,转而完全依赖一种名为注意力 (Attention) 的机制来捕捉序列内的依赖关系,从而实现了真正意义上的并行计算。

核心结构:Decoder和Encoder。

  1. 编码器 (Encoder) :任务是“理解”输入的整个句子。它会读取所有输入词元(这个概念会在3.2.2节介绍),最终为每个词元生成一个富含上下文信息的向量表示。
  2. 解码器 (Decoder) :任务是“生成”目标句子。它会参考自己已经生成的前文,并“咨询”编码器的理解结果,来生成下一个词。

Decoder-only,代表Chatgpt。

提示词工程

(1)模型采样参数

  1. Temperature:温度是控制模型输出 “随机性” 与 “确定性” 的关键参数。其原理是引入温度系数\(T\gt0\),将 Softmax 改写为\(p_i^{(T)} = \frac{e^{z_i / T}}{\sum_{j=1}^k e^{z_j / T}}\)​。

    当T变小时,分布“更加陡峭”,高概率项权重进一步放大,生成更“保守”且重复率更高的文本。当T变大时,分布“更加平坦”,低概率项权重提升,生成更“多样”但可能出现不连贯的内容。

    • 低温度(0 ⩽ Temperature < 0.3)时输出更 “精准、确定”。适用场景: 事实性任务:如问答、数据计算、代码生成; 严谨性场景:法律条文解读、技术文档撰写、学术概念解释等场景。
    • 中温度(0.3 ⩽ Temperature < 0.7):输出 “平衡、自然”。适用场景: 日常对话:如客服交互、聊天机器人; 常规创作:如邮件撰写、产品文案、简单故事创作。
    • 高温度(0.7 ⩽ Temperature < 2):输出 “创新、发散”。适用场景: 创意性任务:如诗歌创作、科幻故事构思、广告 slogan brainstorm、艺术灵感启发; 发散性思考。
  2. Top-k :其原理是将所有 token 按概率从高到低排序,取排名前 k 个的 token 组成 “候选集”,随后对筛选出的 k 个 token 的概率进行 “归一化”: $ \hat{p}i = \frac{p_i}{\sum{j \in \text{候选集}} p_j}$

  3. Top-p :其原理是将所有 token 按概率从高到低排序,从排序后的第一个 token 开始,逐步累加概率,直到累积和首次达到或超过阈值 p: ∑i∈Sp(i)≥p,此时累加过程中包含的所有 token 组成 “核集合”,最后对核集合进行归一化。

(2)零样本、单样本与少样本提示

在写prompt时,我们可以给一些样本提示,让大模型可以按照我们给出的风格来进行回答,比如:

文本:这家餐厅的服务太慢了。
情感:负面

文本:Datawhale的AI Agent课程非常棒!
情感:

(3)指令调优的影响

大模型预训练后,经过指令调优,让大模型更好的理解人能自然语言,可以直接使用清晰指令:

请将下面的英文翻译成中文:
How are you?

(4)基础提示技巧

角色扮演 (Role-playing) 通过赋予模型一个特定的角色,我们可以引导它的回答风格、语气和知识范围,使其输出更符合特定场景的需求。

# 案例
你现在是一位资深的Python编程专家。请解释一下Python中的GIL(全局解释器锁)是什么,要让一个初学者也能听懂。

上下文示例 (In-context Example) 这与少样本提示的思想一致,通过在提示中提供清晰的输入输出示例,来“教会”模型如何处理我们的请求,尤其是在处理复杂格式或特定风格的任务时非常有效。

# 案例
我需要你从产品评论中提取产品名称和用户情感。请严格按照下面的JSON格式输出。

评论:这款“星尘”笔记本电脑的屏幕显示效果惊人,但我不太喜欢它的键盘手感。
输出:{"product_name": "星尘笔记本电脑", "sentiment": "混合"}

评论:我刚买的“声动”耳机音质很棒,续航也超出了我的预期!
输出:

(5)思维链

对于需要逻辑推理、计算或多步骤思考的复杂问题,直接让模型给出答案往往容易出错。思维链 (Chain-of-Thought, CoT) 是一种强大的提示技巧,它通过引导模型“一步一步地思考”,提升了模型在复杂任务上的推理能力。

实现 CoT 的关键,是在提示中加入一句简单的引导语,如“请逐步思考”或“Let's think step by step”。

# 思维链提示
一个篮球队在一个赛季的80场比赛中赢了60%。在接下来的赛季中,他们打了15场比赛,赢了12场。两个赛季的总胜率是多少?
请一步一步地思考并解答。

>>>
(模型可能会输出)
好的,我们来一步步计算。
第一步:计算第一个赛季赢得的比赛数。
80场 * 60% = 48场。
第二步:计算两个赛季的总比赛数和总胜利数。
总比赛数 = 80 + 15 = 95场。
总胜利数 = 48 + 12 = 60场。
第三步:计算总胜率。
总胜率 = (总胜利数 / 总比赛数) * 100% = (60 / 95) * 100% ≈ 63.16%。
所以,两个赛季的总胜率约为63.16%。

通过显式地展示其推理过程,模型不仅更容易得出正确的答案,也让它的回答变得更可信、更易于我们检查和纠正。

第一个本地部署的大语言模型Qwen

# 增加HF_ENDPOINT,避免Connection aborted. 
import os
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

# 指定模型ID
model_id = "Qwen/Qwen1.5-0.5B-Chat"

# 设置设备,优先使用GPU
device = "cuda" if torch.cuda.is_available() else "cpu"
print(f"Using device: {device}")

# 加载分词器
tokenizer = AutoTokenizer.from_pretrained(model_id)

# 加载模型,并将其移动到指定设备
model = AutoModelForCausalLM.from_pretrained(model_id).to(device)

print("模型和分词器加载完成!")

# 准备对话输入
messages = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "你好,请介绍你自己。"}
]

# 使用分词器的模板格式化输入
text = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True
)

# 编码输入文本
model_inputs = tokenizer([text], return_tensors="pt").to(device)

print("编码后的输入文本:")
print(model_inputs)

# 使用模型生成回答
# max_new_tokens 控制了模型最多能生成多少个新的Token
generated_ids = model.generate(
    model_inputs.input_ids,
    max_new_tokens=512
)

# 将生成的 Token ID 截取掉输入部分
# 这样我们只解码模型新生成的部分
generated_ids = [
    output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]

# 解码生成的 Token ID
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]

print("\n模型的回答:")
print(response)

这会从Hugging Face Transformers开源库下载模型权重到本地磁盘,后续运行可以离线,不依赖网络,使用本地的算力,且数据流向是在本地。

相反,API云端调用,是将信息发送到远程服务器,远程GPU运算完之后返回文字。

✅ 优点:

  1. 数据不出本机,隐私性强,输入的 prompt 不会上传第三方;
  2. 可以离线运行;
  3. 支持自定义修改模型、微调、修改推理参数;
  4. 长期大量使用没有按 token 计费成本。

❌ 缺点:

  1. 对本机硬件(显存 / 内存)有硬性要求;
  2. 首次需要下载几个 GB~ 几十 GB 模型文件;
  3. 低配置机器推理速度慢。

这里使用Qwen下载的还比较少,但是从下图也可以看到,还是下载了很多文件:

image-20260715214340666

当我们把输入换成"帮我写一个C语言的Hello world程序时":

image-20260715220318344

上面本地部署的大模型,是一个单模态,只能理解文本输入,看不懂图片、语音、视频等,必须加入额外的模块进行转换,原生LLM只能看懂文本。

多模态就是可以同时处理文本、图片等,但是这只针对LLM可以处理的不同信息的形态,不代表可以生成图片了。

图片 → 视觉编码器(ViT) → 图片特征向量
                                    ↓
文字 → 分词器 → 文本Embedding → 【特征对齐投影层】→ 拼接统一格式 → 送入大语言LLM主干

单模态大语言模型仅能够解析文本信息;多模态大模型通过引入视觉编码器、跨模态投影模块,实现文本、图像等多种信息载体的联合编码与特征融合,能够同时理解图像内容与用户文字指令,打破纯文本模型无法感知视觉信息的局限。

大语言模型的缩放法则与局限性

探索大模型能力边界,从而在构建智能体时扬长避短。

缩放法则

缩放法则(Scaling Laws)是近年来大语言模型领域最重要的发现之一。它揭示了模型性能与模型参数量、训练数据量以及计算资源之间存在着可预测的幂律关系。这一发现为大语言模型的持续发展提供了理论指导,阐明了增加资源投入能够系统性提升模型性能的底层逻辑。

研究发现,在对数-对数坐标系下,模型的性能(通常用损失 Loss 来衡量)与参数量、数据量和计算量这三个因素都呈现出平滑的幂律关系。简单来说,只要我们持续、按比例地增加这三个要素,模型的性能就会可预测地、平滑地提升,而不会出现明显的瓶颈。这一发现为大模型的设计和训练提供了清晰的指导:在资源允许的范围内,尽可能地扩大模型规模和训练数据量。

模型幻觉

模型幻觉(Hallucination)通常指的是大语言模型生成的内容与客观事实、用户输入或上下文信息相矛盾,或者生成了不存在的事实、实体或事件。幻觉的本质是模型在生成过程中,过度自信地“编造”了信息,而非准确地检索或推理。根据其表现形式,幻觉可以被分为多种类型[11],例如:

  • 事实性幻觉 (Factual Hallucinations) : 模型生成与现实世界事实不符的信息。
  • 忠实性幻觉 (Faithfulness Hallucinations) : 在文本摘要、翻译等任务中,生成的内容未能忠实地反映源文本的含义。
  • 内在幻觉 (Intrinsic Hallucinations) : 模型生成的内容与输入信息直接矛盾。

幻觉的产生是多方面因素共同作用的结果。首先,训练数据中可能包含错误或矛盾的信息。其次,模型的自回归生成机制决定了它只是在预测下一个最可能的词元,而没有内置的事实核查模块。最后,在面对需要复杂推理的任务时,模型可能会在逻辑链条中出错,从而“编造”出错误的结论。例如:一个旅游规划 Agent,可能会为你推荐一个现实中不存在的景点,或者预订一个航班号错误的机票。

此外,大语言模型还面临着知识时效性不足和训练数据中存在的偏见等挑战。大语言模型的能力来源于其训练数据。这意味着模型所掌握的知识是其训练数据收集时的最新材料。对于在此日期之后发生的事件、新出现的概念或最新的事实,模型将无法感知或正确回答。与此同时训练数据往往包含了人类社会的各种偏见和刻板印象。当模型在这些数据上学习时,它不可避免地会吸收并反映出这些偏见。

为了提高大语言模型的可靠性,研究人员和开发者正在积极探索多种检测和缓解幻觉的方法:

  1. 数据层面: 通过高质量数据清洗、引入事实性知识以及强化学习与人类反馈 (RLHF) 等方式,从源头减少幻觉。
  2. 模型层面: 探索新的模型架构,或让模型能够表达其对生成内容的不确定性。
  3. 推理与生成层面:
    1. 检索增强生成 (Retrieval-Augmented Generation, RAG) : 这是目前缓解幻觉的有效方法之一。RAG 系统通过在生成之前从外部知识库(如文档数据库、网页)中检索相关信息,然后将检索到的信息作为上下文,引导模型生成基于事实的回答。
    2. 多步推理与验证: 引导模型进行多步推理,并在每一步进行自我检查或外部验证。
    3. 引入外部工具: 允许模型调用外部工具(如搜索引擎、计算器、代码解释器)来获取实时信息或进行精确计算。

尽管幻觉问题短期内难以完全消除,但通过上述的策略,可以显著降低其发生频率和影响,提高大语言模型在实际应用中的可靠性和实用性。

习题

  1. 自然语言处理中,语言模型经历了从统计到神经网络的模型演进。

    1. 请使用本章提供的迷你语料库(datawhale agent learns, datawhale agent works),计算句子 agent works 在Bigram模型下的概率

      \(P(agent\space works)=P(agent)\cdot P(works|agent)=\frac{2}{2}\cdot \frac{count(agent,works)}{count(agent)}=\frac{1}{2}\)

    2. N-gram模型的核心假设是马尔可夫假设。请解释这个假设的含义,以及N-gram模型存在哪些根本性局限?

      马尔科夫假设说未来状态仅由最近有限长度的历史决定,更早的信息可以忽略。N-gram模型仍然存在不具有泛化能力和上下文长度固定的缺点。

    3. 神经网络语言模型(RNN/LSTM)和Transformer分别是如何克服N-gram模型局限的?它们各自的优势是什么?

      神经网络语言模型和Transformer都使用了词嵌入来构建语义空间,使得模型在词与词之间具有了一定的推理能力,比如可以得到这样的结果king-man+woman=queen,这使得这两种都具有了泛化能力;神经网络语言模型使用了隐藏状态向量,它是按照时序执行,每一步都会读取当前的输入并结合上一时刻的隐藏状态向量,生成一个新的记忆(当前步的隐藏状态),后续为了优化出现梯度消失和梯度爆炸,在此基础上加入了门控机制

posted @ 2026-07-18 21:43  alij  阅读(6)  评论(0)    收藏  举报