大模型通识

15k words

第1章 大模型通识

一、关于大模型

  • 机器学习:研究计算机如何在没有明确编程的情况下,通过对数据进行分析、学习,自动改进其行为或做出预测。
  • 监督学习:拿着一个苹果和一个香蕉,告诉孩子:“这是苹果,它的形状是圆的,颜色通常是红色或绿色;这是香蕉,它的形状是长条形,颜色通常是黄色。”孩子会学习到特征与类别的对应关系,预测出新拿出的水果是苹果还是香蕉。
  • 无监督学习:让孩子观察一堆水果,没有直接告诉他每一个水果的名称,而是鼓励他自己找出如何根据形状、颜色等属性将这些水果分组的方法。
  • 强化学习:不直接教孩子苹果和香蕉的区别,而是每次展示一个水果让他进行判断。如果他判断正确,就给他一个奖励(比如一块糖果);如果判断错误,则不给奖励。
    • 深度学习:机器学习的一个分支,主要使用神经网络模型(由多个隐藏层组成)对数据进行学习和表示。深度学习算法试图模拟人类大脑的工作方式,其灵感来源于神经生物学,它通过对大量数据的学习,自动提取出数据的高层次特征和模式,从而实现图像识别、语音识别、自然语言处理等任务。按照架构的不同,神经网络可以分为:卷积神经网络(CNNs)、循环神经网络(RNNs)、Transformer网络等等。
    • 生成式人工智能:深度学习中快速增长的子集,使用了大模型提供支持,在大量原始、未标记的数据基础上对深度学习模型进行预训练,使得机器能够“理解”语言甚至图像,并能够根据需要自动生成内容。

2021年,斯坦福大学的研究员团队发表了一篇论文,提出了Foundational Models(基础模型,即大模型)的概念。简单来说,它是一类具有大量参数(通常在十亿以上),能在极为广泛的数据上进行训练,并适用于多种任务和应用的预训练深度学习模型。

大模型通过广泛数据集的训练后,可以适用于多种多样的需求

2022年11月,OpenAI公司发布了ChatGPT——一种先进的人工智能语言模型,专为对话交互而设计,具有强大的自然语言理解和生成能力,可以完成撰写论文、邮件、脚本、文案、翻译、代码等任务。ChatGPT的发布标志着AI大模型在语言理解与生成能力上的重大突破,对全球AI产业产生了深远影响,开启了人工智能大模型应用的新篇章。

2023年3月,国内厂商纷纷发布各自研发的大语言模型产品。百度发布文心一言、阿里巴巴集团千问大模型开始企业内测、商汤科技带来了商量SenseChat、360启动360智脑企业内测、华为盘古大模型、科大讯飞1+N认知大模型、昆仑万维的天工大模型、以及京东言犀、腾讯混元……百模大战一触即发。

无论是语言模型还是多模态模型,均在大规模多语言和多模态数据上进行预训练,并通过高质量数据进行后期微调以贴近人类偏好。

大模型的训练整体上分为三个阶段: 预训练监督微调(SFT)以及 对齐偏好(如RLHF)。

预训练(Pre-training):在这个阶段大模型会从海量的互联网文本中学习,掌握语言的统计规律、事实性知识以及上下文关联能力。但它本质上只是学会了“预测下一个词“或“补全句子”,并没有真正理解人类提问的意图。例如,如果我们向一个仅经过预训练的模型提问:埃菲尔铁塔在哪个国家?”,它可能不会直接回答法国”,而是延续语料中的常见模式,输出类似东方明珠在哪个城市?”这样的无关内容。这说明它虽然“知道很多”,却还不懂得如何回应人的请求。因此,我们需要通过监督微调(SFT)来教会它遵循指令。

监督微调(SFT,Supervised Fine Tuning):大模型会学习大量由人类精心构造的指令-回答”样本,涵盖日常对话、逻辑推理、专业问答等多种场景。通过这些示范,模型学会将用户的输入理解为明确的指令,并给出有针对性的回应。此时,如果我们再问它:“埃菲尔铁塔在哪个国家?”,它就能正确回答“法国”,而不是机械地续写句子。经过SFT,模型已经具备了基本的指令遵循能力和任务完成能力。但它仍可能输出不恰当的内容——比如包含偏见、虚假信息、不安全言论等,因为它只学会了“怎么答”,还没学会“什么该答、什么不该答”。

对齐偏好(Preference Alignment):、对于大模型来说,在这个阶段,它会针对同一个问题生成多个不同的回答,由人类评估者根据有用性、安全性、礼貌性、事实准确性等标准进行比较和选择。模型通过学习这些人类更喜欢哪个回答的信号,逐渐调整自己的输出方式,使得回答不仅正确,而且更符合人类的价值观和交流习惯。

实现对齐的方式有很多:

  1. 基于人类反馈的强化学习(RLHF,Reinforcement Learning from Human Feedback),先用人类标注的数据训练一个“评分老师(奖励模型),再让这个老师指导大模型改进回答。
  2. DPO(Direct Preference Optimization),跳过训练老师的中间步骤,直接根据人类偏好数据优化模型本身。这个方法简化了训练流程,效果也很好。

无论采用哪种方法,目标都是一致的:让模型不仅能答对问题”,还能答得“让人放心”,避免有害、歧视、违法或令人不适的内容。

基础模型(大模型)主要有以下四个特点:

规模和参数量大
大模型通过其庞大的规模(拥有从数亿到数千亿级别的参数数量)来捕获复杂的数据模式,使得它们能够理解和生成极其丰富的信息。

适应性和灵活性强
模型具有很强的适应性和灵活性,能够通过微调(fine-tune)或少样本学习高效地迁移到各种下游任务,有很强的跨域能力。

广泛数据集的预训练
大模型使用大量多样化的数据进行预训练,以学习广泛的知识表示,能够掌握语言、图像等数据的通用特征。

计算资源需求大
巨大的模型规模带来了高昂的计算和资源需求,包括但不限于数据存储、训练时间、能量消耗和硬件设施。

按照应用场景,大模型可以大致分为:

  • 大语言模型(LLM):这类大模型专注于自然语言处理(NLP),旨在处理语言、文章、对话等自然语言文本。它们通常基于深度学习架构(如Transformer模型),经过大规模文本数据焦训练而成,能够捕捉语言的复杂性,包括语法、语义、语境以及蕴含的文化和社会知识。语言大模型典型应用包括文本生成、问答系统、文本分类、机器翻译、对话系统等。示例包括:
  • 多模态模型:多模态大模型能够同时处理和理解来自不同感知通道(如文本、图像、音频、视频等)的数据,并在这些模态之间建立关联和交互。它们能够整合不同类型的输入信息,进行跨模态推理、生成和理解任务。多模态大模型的应用涵盖视觉问答、图像描述生成、跨模态检索、多媒体内容理解等领域。

二、大模型是如何工作的

大模型处理提示词的工作流程可以分为两部分,第一部分是分词化与词表映射,第二部分为生成文本。

(一)分词化(Tokenization)与词表映射

分词化(Tokenization)是自然语言处理(NLP)中的重要概念,它是将段落和句子分割成更小的分词(token)的过程。以下是一个英文句子:

I want to study ACA.

为了让机器理解这个句子,对字符串执行分词化,将其分解为独立的单元。使用分词化,我们会得到这样的结果:

[‘I’ ,’want’ ,’to’ ,’study’ ,’ACA’ ,’.’]

将一个句子分解成更小的、独立的部分可以帮助计算机理解句子的各个部分,以及它们在上下文中的作用,这对于进行大量上下文的分析尤其重要。分词化有不同的粒度分类:

  • 词粒度(Word-Level Tokenization)分词化,如上文中例子所示,适用于大多数西方语言,如英语。
  • 字符粒度(Character-Level)分词化是中文最直接的分词方法,它是以单个汉字为单位进行分词化。
  • 子词粒度(Subword-Level)分词化,它将单词分解成更小的单位,比如词根、词缀等。这种方法对于处理新词(比如专有名词、网络用语等)特别有效,因为即使是新词,它的组成部分(子词)很可能已经存在于词表中了。

每一个token都会通过预先设置好的词表,映射为一个 token id,这是token 的“身份证”,一句话最终会被表示为一个元素为token id的列表,供计算机进行下一步处理。

上面这两句话包含了16个tokens。

(二)大语言模型生成文本的过程

大语言模型的工作概括来说是根据给定的文本预测下一个token。对我们来说,看似像在对大模型提问,但实际上是给了大模型一串提示文本,让它可以对后续的文本进行推理。

大模型的推理过程不是一步到位的,当大模型进行推理时,它会基于现有的token,根据概率最大原则预测出下一个最有可能的token,然后将该预测的token加入到输入序列中,并将更新后的输入序列继续输入大模型预测下一个token,这个过程叫做自回归。直到输出特殊token(如<EOS>,end of sentence,专门用来控制推理何时结束)或输出长度达到阈值,

第2章 大模型使用

一、借助 API 让大模型自动化地处理任务

  • 需求介绍:产品需要对客户发起一次产品调研,需统计出用户认为产品哪些方面有待改进,如价格过高、售后支持不足、产品使用体验不佳等。
  • 现状:收集到1万多份主观反馈,并未结构化。
  • 难点:要求在1天内做出分析。

在这样的情况下,借助大模型服务的 API 可以大大简化和加速文本处理的任务。可以通过一段简单的代码来解决这一问题:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import os
# 导入专门用于连接 Google Gemini 的工具箱
from langchain_google_genai import ChatGoogleGenerativeAI
# 设置API Key
os.environ["GOOGLE_API_KEY"] = "你的_API_KEY"
llm = ChatGoogleGenerativeAI(model="gemini-1.5-flash")
# 准备要分类的文本(这里模拟一条 Excel 里的反馈)
feedback = "性价比不高,我觉得不值这个价钱。"
# 下达指令并获取结果
result = llm.invoke(f"""
你需要对用户的反馈进行原因分类。
分类包括:价格过高、售后支持不足、产品使用体验不佳、其他。
回答格式为:分类结果:xx。
用户的问题是:{feedback}
""")
# 打印出 AI 告诉我们的答案
print(result.content)

二、通过优化提示词来提升回答质量

(一)通用大模型技巧

直接提问

直接提问,也称为 零样本提示(Zero-Shot Prompting),即不给大语言模型提供案例,完全依靠 LLM 理解和处理能力完成任务。目前大部分开源和商用的大语言模型已经经过了大量的预训练和指令调试,能够很好的理解并响应用户的直接提问。适用于 目标明确、问题简单、答案确定且唯一等场景。

直接提问时,可遵循以下原则:

  • 简洁:尽量用最简短的方式表达问题。过于冗长的问题可能包含多余的信息,导致模型理解错误或答非所问。
  • 具体:避免抽象的问题,确保问题是具体的,不含糊。
  • 详细上下文:如果问题涉及特定上下文或背景信息,要提供足够的详情以帮助模型理解,即使是直接提问也不例外。
  • 避免歧义:如果一个词或短语可能有多重含义,要么明确其含义,要么重新表述以消除歧义。
  • 逻辑清晰:问题应逻辑连贯,避免出现逻辑上的混淆或矛盾,这样才能促使模型提供有意义的回答。

为大语言模型提供如下不同的提示词,得到的答案质量会有明显差距。

直接提问效果在很大程度上取决于所使用的模型的理解能力和泛化能力,它无法很好地处理复杂、模糊或多义性的问题,当需要较深入的背景知识或分析时,可能无法准确了解用户的真正意图,可以尝试在提示词中增加示例样本、分配角色、提示写作风格/输出格式或构建思维链和思维树拆解复杂任务等方式解决。

增加示例

在提示词中提供少量(通常几个或几十个)示例,也称为 少样本提示(Few-Shot Prompting),以帮助模型更好地理解任务要求和期望输出。比如:

  • 让 LLM 跟随我们所要求的规范、格式、概念、文法、语气进行输出。
  • 提供进一步推理的参考,比如让大模型学会数学运算或按照示例方式进行逻辑推理。

在英文缩写比较多的专业技术文档翻译场景,我们可以尽可能地为 LLM 提供一些缩写的翻译示例,然后再让 LLM 完成后续的翻译工作:

值得一提的是,这种方式比较适合翻译量不大,且示例的数量可穷举的场景,可以轻量、快速地完成翻译工作。但是当需要成千上万的专业术语词条示例辅助翻译的场景,这种方式就不够了,也不够方便,我们可以让大语言模型接入专业的术语库,来增强大语言模型的能力,也即 检索增强生成(Retrieval-Augmented Generation),简称RAG

示例的质量和数量会直接影响回答的结果,增加示例时可参考以下技巧:

  • 精选代表性样本:选择具有代表性的示例,覆盖任务的各种情况,同时避免使用可能引起模型混淆的极端或边缘案例,确保模型能从有限的数据中学习到任务的核心特征。
  • 保证示例的多样性:尽可能覆盖任务的各种角度和情境,确保模型能从有限的数据中学习到任务的核心特征。
  • 使用相似的格式和结构:在所有示例中使用相似的提示格式和结构,使模型能够清晰识别输入与输出的关系。
  • 让大语言模型生成示例:实践时,我们还可以先让 LLM 按照提示生成一些示例,再进行筛选或人工调整,以提高示例质量和针对性。

分配角色

赋予模型一个具体的角色或身份,如“作为经验丰富的营养师”,来引导模型在特定角色视角下生成回答。

分配角色适用以下场景:

  • 需要专业知识或特定视角的问题解答。例如,模拟老师、医生、律师等回答相关领域的问题。
  • 模拟特定人物或角色的语言风格。例如,模仿某个著名人物(如历史人物或文学角色)语言风格的文本时。
  • 进行角色扮演游戏或创作。在创意写作或角色扮演游戏中扮演指定的角色,与使用者进行互动。
  • 在特定行业内进行决策模拟。例如,模拟一个管理咨询师来分析商业案例或提供商业建议。

分配角色引导模型生成符合特定情境和对话逻辑的内容,可遵循以下技巧:

  • 明确角色身份与特性

    • 确定角色的基本属性,如年龄、性别、职业、性格、技能、价值观等。
    • 赋予角色相关领域的专业知识或特殊背景,如专家、学者、历史人物、虚构角色等。
  • 设定角色目标与动机

    • 为角色设定对话的目标,如寻求信息、说服他人、解决问题、分享观点等。
    • 揭示角色的内在动机,如个人利益、道德信念、情感需求等,有助于塑造角色的真实性和深度。
  • 设定角色语言风格

    • 根据角色性格、教育水平、文化背景等设定其语言习惯、用词选择、句式结构、口头禅等。
    • 规定角色在对话中的情绪状态,如冷静理智、激动愤怒、悲伤失落、幽默风趣等,影响其表达方式。
  • 设定角色规则约束:规定角色在对话中的行为约束,如不得人身攻击、保持礼貌尊重、遵守讨论主题等。

  • 动态调整角色设定

    • 随着对话深入,适时调整角色设定以适应新的情境和话题,如角色态度转变、关系演变、目标更新等。
    • 向模型反馈角色表现,如偏离设定、缺乏个性、对话僵化等,及时修正角色设定并引导模型调整。

限定输出风格/格式

大语言模型非常善于撰写论文、文章等内容,不过如果我们仅仅简单地告诉大语言模型一些宽泛的提示,大语言模型有可能会生成枯燥、平淡、空洞的内容,这些内容往往与我们期望的结果有较大的出入。可以在提示词中增加“ 风格”的限定。

为了更好的限定“ 风格”,准确引导模型写出符合需求的内容,一些技巧:

  1. 明确指出所需的内容类型,如“论文/散文/诗歌/新闻报道/剧本/日记”等。
  2. 用形容词限定风格,如“严谨客观”、“感性抒情”、“幽默诙谐”、“庄重典雅”等。
  3. 列举风格(代表人物/作品)示例,如“仿照鲁迅先生的笔触描述社会现象”或“以J.K.罗琳的叙述风格撰写一段奇幻冒险故事”。
  4. 设定语境与情感色彩:为模型设定故事背景、情感基调或角色视角,影响其语言表达和修辞选择,从而形成特定风格。如“以一名二战老兵的视角,深情回忆战场经历”。
  5. 规定语言与句式特点:要求使用特定词汇、短语、成语、俚语、古语等,或强调长句、短句、排比、反问、比喻等修辞手法的运用,以契合特定风格。

还可以进一步对 内容的输出格式进行限定:

  1. 明确输出长度:如“撰写一篇关于全球气候变化的新闻报道,标题需简洁明快,概括主题,不超过300字”。
  2. 段落结构:规定正文的段落数量、每段的大致内容与逻辑关系,如“文章分为引言、主体(分三点论述)和结论三部分”。
  3. 列表与编号:要求使用项目符号、数字编号等形式列出要点或步骤,如“通过数字编号列出五种有效的时间管理方法,并简要解释”。
  4. 引用与注释:指示何时使用引号、脚注、尾注、参考文献等格式引用他人观点或资料,如“在论述中适当引用至少两篇相关学术论文,并按照APA格式添加引用和参考文献”。
  5. 格式标记:如对齐方式(左对齐、居中、右对齐)、字体样式(加粗、斜体、下划线)、缩进、行距、页眉页脚等进行详细说明,甚至可以要求大模型按照JSON格式输出。
  6. 特殊要求:针对特定场景,如邮件、信函、通知、海报、简历等,规定相应的格式标准,如“按照商务电子邮件的标准格式撰写邀请函,包括收件人、抄送人、主题、问候语、正文、结束语、签名档等部分”。

当然,我们还可以让大语言模型帮助我们生成限定内容 风格格式的提示词:

拆解复杂任务

把一个复杂的任务,拆解成多个稍微简单的任务,让大语言模型 分步来思考问题,称为 思维链(Chain-of-Thought Prompting, CoT)提示,这种方式可让大语言模型像人类一样逐步解释或进行推理,从而极大地提升 LLM 的能力。与前面介绍的标准提示不同,该方法不仅寻求答案,还 要求模型解释其得出答案的步骤

标准提示只给出了答案,而且答案明显是错误的,而思维链提示会展开推理过程,通常通过思维链提示的方式会产生更为准确和可校验的结果。

没有给 LLM 提供问题解析示例的可以称为 零样本思维链(Zero-shot CoT),相对应地在增加了示例后就变成了 少样本思维链(Few-shot Cot)。

零样本思维链 Zero-shot CoT
_提示词:_小宝有三盒糖果,每盒糖果有10颗糖,小宝一共有多少颗糖果?
答案:给出 逐步思考过程_输出:_小宝有三盒糖果,每盒糖果有10颗,那么他一共有的糖果数量就是: 3盒 × 10颗/盒 = 30颗答案:小宝一共有30颗糖果。

少样本思维链 Few-shot CoT
提示词:
问题:小宝有三盒糖果,每盒糖果有10颗糖,小宝一共有多少颗糖果?
答案:小宝有三盒糖果,每盒糖果有10颗,那么他一共有的糖果数量就是: 3盒 × 10颗/盒 = 30颗,小宝一共有30颗糖果。
问题:小明有20个苹果,吃了2个苹果,又买了5个苹果,小明一共有多少颗苹果?
答案:给出 逐步思考过程_输出:_小明原本有20个苹果,吃了2个,所以剩下:20个 - 2个 = 18个接着他又买了5个苹果,那么他现在总共有:18个 + 5个 = 23个答案:小明一共有23个苹果。

有时 LLM 通过 零样本思维链可能会得到错误的答案,可以通过增加示例的方式,即 少样本思维链,帮助 LLM 理解相关任务并正确执行,如下面的例子中,明显在使用零样本思维链来分析问题后还是获得了错误的答案:

可以根据任务的复杂度来设计提示词,具体有以下几种情况:

  1. 纯指令型:最直接的互动方式,仅通过简明指令向模型提出需求,适合于寻求快速、基本答案的场景。
  2. 背景+ 指令:在指令基础上融入背景信息,为模型创造一个理解和响应任务的框架,尤其适用于需要考虑特定情境或角色定位的任务。
  3. 指令/ 背景+ 输出指示:在基础指令或背景信息之上,加入输出指示,精确指导模型如何组织和呈现答案,以满足特定的格式或风格要求。
  4. 综合型提示:结合指令、背景信息、输入数据与输出指示,形成一个全方位的引导体系。这种复合型提示尤为强大,能够在复杂任务中提高模型输出的针对性与质量,尤其是在模型需要从示例中学习并模仿特定风格或结构时。

(二)推理模型技巧

除了通用大模型,目前还有一类专门为“推理”设计的模型—— 推理模型

推理模型通常指专门优化用于逻辑推理、问题解决、多步推断等任务的模型(如DeepSeek-R1、o1),它们通常在数学解题、代码生成、逻辑分析等方面有更好的表现。与通用模型相比,推理模型拥有更强的逻辑能力,因为它经过了大量的专项训练,能够更好地理解复杂的问题,并且在解答时更有条理。但并不是说就一定比通用模型更好。

维度

推理模型

通用模型

设计目标

专注于逻辑推理、多步问题求解、数学计算等需要深度分析的任务

面向通用对话、知识问答、文本生成等广泛场景

训练数据侧重

大量数学题解、代码逻辑、科学推理数据集增强推理能力

覆盖百科、文学、对话等多领域海量数据

典型输出特征

输出包含完整推导步骤,注重逻辑链条的完整性

输出简洁直接,侧重结果的自然语言表达

响应速度

复杂推理任务响应较慢(需多步计算)

常规任务响应更快(单步生成为主)

推理模型还是通用模型?如何选择?

  • 明确的通用任务:对于明确定义的问题, 通用模型一般能够很好地处理。

  • 复杂任务:对于非常复杂的任务,且需要给出相对 更精确和可靠的答案,推荐使用 推理模型。这些任务可能有:

    • 模糊的任务:任务相关信息很少,你无法提供模型相对明确的指引。
    • 大海捞针:传递大量非结构化数据,提取最相关的信息或寻找关联/差别。
    • 调试和改进代码:需要审查并进一步调试、改进大量代码。
  • 速度和成本:一般来说推理模型的推理时间较长,如果对于时间和成本敏感,且任务复杂度不高, 通用模型可能是更好的选择。

当然,还可以在应用中结合使用两种模型:使用推理模型完成Agent的规划和决策,使用通用模型完成任务执行。

推理模型在面对相对模糊的任务也能给出详尽且格式良好的响应。因此,指示模型“逐步思考”可能反而限制了模型的推理。下面列举了一些适用于推理模型的提示技巧:

  • 直接提问:保持提示 简洁、清晰,且明确任务限制。
  • 避免思维链提示:你无需提示推理模型“逐步思考”或“解释你的推理”,它们本身会进行深入的思考。
  • 根据模型响应调整提示词:直接提问推理模型通常能够产生良好的响应,但如果你有更复杂精细的要求,可以在提示词中明确,比如有 明确的输入信息和输出要求时,你可以通过 增加示例明确这些信息,还可以通过 分隔符帮助推理模型区分不同的信息模块。这个过程可以是重复多次的,不断尝试调整提示,让模型不断推理迭代,直到符合你的要求。

三、插件增强

大模型应用使用插件的决策流程和人类使用工具的流程是一样的。首先接收输入,判断是否需要使用工具及选择合适的工具,然后使用工具并获得返回结果进行后续推理生成。

四、RAG增强

(一)原理

RAG(的核心实现原理分为三个阶段:索引、检索和生成。

  1. 索引(Indexing):原始文档经过清洗后被切分为固定长度或基于语义的文本块(Chunks)。随后,嵌入模型(Embedding Model)将文本块转换为数值向量。这些向量捕捉了文本的深层语义信息,并最终存储在向量数据库中 。
  2. 检索(Retrieval):当用户提出问题时,系统将提问转换为向量,并计算该向量与数据库中存储向量之间的数学相似度。最常用的计算方法是余弦相似度。相似度最高的文本块会被提取出来作为参考背景。
  3. 生成(Generation):检索到的文本块与用户原始问题被拼接成一段完整的提示词。大模型接收这段包含背景知识的指令,生成最终回答。

(二)量化 RAG 应用的表现

第一层:检索模块评测 (Retrieval)

这一层主要评估系统“找资料”的能力,看它能不能从海量文档中精准定位相关信息。

指标名称

定义

业务意义

准确率 (Precision)

检索到的文档片段中,真正相关的比例。

减少噪音干扰,防止模型被无关信息误导。

召回率 (Recall)

知识库中所有相关的片段,被检索到了多少。

确保信息完整,避免遗漏核心答案。

MRR / Hit Rate

正确答案排在搜索结果前几名的概率。

评估排序算法是否把最相关的放到了最前面。

第二层:生成模块评测 (Generation)

这一层评估大模型在拿到资料后,“解读和组织语言”的能力。

  • **忠实度 (Faithfulness)**:回答是否完全依据检索到的资料,有没有凭空捏造(即“幻觉”检查)。
  • **相关性 (Relevance)**:回答是否正面解决了用户提出的问题。
  • **完整性 (Completeness)**:是否涵盖了资料中所有有助于回答问题的关键点。

第三层:端到端评测 (End-to-End)

这是从用户视角进行的整体评估,最核心的指标是 问题解决率用户满意度

(三)RAG 效果归因:六步诊断法

当 RAG 应用表现不如预期时,应按以下逻辑链条逐一排查,定位故障点:

  1. 最终回答校验

判断标准:回答是否准确、简洁并直接解决了用户问题。

常见问题:回答过于冗长或包含无关信息。

  1. 意图路由与处理路径

判断标准:模型是否正确识别了用户意图(是需要检索知识库,还是直接回答,或是调用工具)。

常见问题:意图识别错误导致未触发检索逻辑。

  1. 检索内容相关性

判断标准:检索出的文档块(Chunks)是否包含回答问题所需的关键信息。

衡量指标:

  • 准确率 (Precision):检索到的内容中有多少是相关的。
  • 召回率 (Recall):知识库中相关的条目是否都被搜到了。
  1. 召回结果排序 (Ranking)

判断标准:最核心、最相关的文档块是否排在最前面。

影响原因:相关信息被大量噪声掩盖,导致模型在处理长上下文时忽略了重点。

  1. 问题改写 (Query Rewrite)

判断标准:系统对原始问题的优化或向量化改写是否偏离了用户本意。

常见问题:改写过度导致检索方向出现偏差。

  1. 知识库质量

判断标准:知识库本身是否包含正确答案,数据是否存在缺失、陈旧或冲突。

解决方向:更新或清洗原始语料。

归因结论:

  • 1-2 步异常:重点优化基座模型的能力或提示词(Prompt)。
  • 3-5 步异常:重点优化检索算法、Embedding 模型或排序模型(ReRank)。
  • 6 步异常:重点治理数据源。

(四)改善RAG效果

提升索引准确性(数据处理层)

索引质量决定了召回内容的上限。

  • 优化文本解析:在构建知识库时,通过清洗 HTML 标签(如页眉页脚、广告位)保留核心文本和表格,确保语料纯净。

  • 优化 Chunk 切分

    • 固定切分:按固定词数(如 128/512 词)切分,速度快但易破坏语义完整性。
    • 上下文感知/语义切分:基于自然语言处理(NLP)技术或模型识别语义单元,确保切分点在语义断点处,并保留前后句作为缓冲区。
  • 句子滑动窗口(Sliding Window):检索时不仅提取匹配到的 Chunk,还自动提取其前后相邻的上下文窗口信息。

  • 自动合并检索(Auto-merging):建立层级化的文档结构树。若检索到多个属于同一父节点的子节点,系统自动返回整个父节点内容,保证信息完整。

  • 混合检索(Hybrid Search):结合 关键词检索(精确匹配)与 向量语义检索(意图匹配),通过调整两者权重平衡检索效果。

提升意图识别准确率(查询处理层)

针对用户原始提问的多样性和模糊性进行预处理。

  • Enrich(问题重写):利用 LLM 将口语化问题改写为更专业、明确的查询语句。
  • Multi-Query(多路查询):生成多个同义或相关的查询变体,从多个维度进行检索以提高召回率。
  • RAG-Fusion(排序融合):对多路检索到的结果进行去重,并按照相关性重新排序。
  • Step Back(步退提问):让模型先提炼问题的核心概念或摘要,从更高维度检索背景知识。
  • Decomposition(任务拆解):将复杂的多步骤问题拆解为多个子问题,逐一检索并整合答案。
  • HyDE(假设文档嵌入):先由模型生成一个“假设答案”,再用该答案的向量去检索真实的参考文档。
  • Self-RAG(自我反思):模型在输出前进行三项自检:
    1. 检索到的资料与问题是否相关?
    2. 生成的回答是否有事实依据(防幻觉)?
    3. 回答是否真正解决了用户的问题?

增加信息提取途径(数据源扩展)

当本地私有知识库无法满足需求时,扩展获取信息的渠道。

  • CRAG(纠错检索):引入外部搜索。当检索到的本地资料相关性低于阈值时,触发互联网搜索进行补充。
  • 结构化查询(NL2SQL):针对数据库中的数值或统计信息,将自然语言转为 SQL 语句直接查询数据库。
  • 知识图谱(Knowledge Graph):利用图数据库(如 Neo4j)查询实体间的关联关系,处理深层次的逻辑链路问题。

模型层优化

通过升级算法组件提升整体性能。

  • Embedding 模型:选择更擅长目标语言(如中文)或垂直领域的向量模型,提高语义映射的精准度。
  • ReRank 模型:对初筛出的候选 Chunk 进行二次精准排序,将最相关的资料排在最前面。
  • 基座模型(LLM):升级参数规模(如从 7B 升至 72B)或更换性能更强的模型(如从开源转向闭源商用模型),提升理解与推理能力。

五、通过微调改善大模型在垂直领域的表现

微调指的是在预训练模型(Pre-trained Model)的基础上,使用特定领域的数据进行进一步训练。通过针对性补习,使模型更理解专业领域知识、符合特定业务需求。

  • 数据规模小:相较于预训练,微调数据集量级较小。
  • 训练时间短:模型已有预训练基础,无需从随机初始化开始。

(一)微调的功能

实现功能

  • 风格化(角色扮演):注入专业领域语料(如医疗文献、病例),使模型掌握特定术语和专家逻辑。
  • 格式化(系统对接):解决复杂 API 规范对接问题。
    • RAG 的局限:文档结构复杂导致检索不准;上下文 Token 限制导致信息截断。
    • 微调优势:使模型理解用户意图并输出符合 API 格式要求的指令,实现端到端自动化。

提高效率与降低成本

  • 性能对标:通过微调小参数模型(如 Qwen-1.8B),使其在特定任务(如文本分类)上的表现接近大参数模型(如 Qwen-72B)。
  • 优势:极大地改善推理速度,降低计算成本。

微调的关键要素与风险

  • 高质量数据:微调效果高度依赖领域特定数据的质量、代表性及获取成本。
  • 参数配置:需反复迭代寻找最优组合(如训练轮次、学习率)。
  • 核心风险
    • 过拟合(Overfitting):在训练集表现极好,但在测试集或实际应用中泛化能力差。
    • 欠拟合(Underfitting):模型未充分学习,在训练和测试集表现均不佳。
    • 灾难性遗忘:模型在掌握专项任务的同时,可能丧失通用处理能力。

(二)实施流程

业务决策维度

  • 需求匹配度:是否涉及复杂语言理解、意图识别或高度特定领域的任务?
  • 数据可用性:系统内是否有足够的标注数据?质量是否达标?
  • 合规与隐私:是否符合法律法规(如 GDPR)?是否存在模型偏见风险?
  • 资源投入:评估 GPU 资源、计算时间及专家人力成本,进行 ROI(成本效益)分析。

标准化流程

  • 数据准备:数据收集(交互记录、FAQ)与清洗(脱敏)。
  • 模型选择:选择适合的预训练基座(如 Qwen-7B)。
  • 模型微调:数据标注、运行微调程序、调整参数。
  • 模型评测:准备评测集,观察输出并与预期结果对比。
  • 模型集成:编写代码集成至业务流程,设定调用逻辑及错误处理。
  • 测试优化:在开发/测试环境验证 API 调用与性能。
  • 部署监控:生产环境部署并监控模型性能及 API 健康状况。
  • 持续迭代:根据用户反馈和新数据进行定期优化。

(三)常见微调技术路径

全参数微调(Full Fine-Tuning)

  • 原理:调整模型内部所有层的所有参数。
  • 优缺点:性能提升全面,但计算资源消耗巨大,训练成本极高。

高效微调(PEFT)技术

LoRA (Low-Rank Adaptation)

  • 原理:在原始权重矩阵旁增加一个旁路,通过低秩矩阵 $A$(降维)和 $B$(升维)的乘积来近似参数更新。

  • 参数压缩示例

    • 原始矩阵 $M$ 维度:$1000 \times 1000$(100万参数)。
    • LoRA(设秩 $r=1$):$A$ 矩阵 $1000 \times 1$,$B$ 矩阵 $1 \times 1000$。
    • 更新参数量:$1000 \times 1 + 1 \times 1000 = 2000$。
    • 结论:参数量减少了 $99.8%$。
  • 特性:目前最通用的方法,效果接近全参微调。

Adapter Tuning

  • 原理:在 Transformer 结构中插入 Adapter 层,仅训练该层,原始参数冻结。
  • 特性:仅需额外增加约 $3.6%$ 的参数即可达到接近全参微调的效果,但会引入推理延迟。
Prefix Tuning

  • 原理:在输入 Token 前构造固定长度的任务相关虚拟 Token 作为前缀(Prefix),且作用于每一层 Transformer 隐藏层。
  • 特性:避免灾难性遗忘,长序列生成表现优异,但会占用上下文窗口长度。
Prompt Tuning

  • 原理:仅在输入层加入可训练的 Prompt Tokens 向量。
  • 特性:极其轻量,随模型规模增大(如 T5)效果逼近全参微调,适合多任务适配。

方法

推理延迟

参数规模相关性

主要局限

Adapter

有明显延迟

不敏感

推理效率受限

Prefix Tuning

无延迟

随参数规模非单调变化

难以优化,占用 Token 空间

Prompt Tuning

无延迟

模型越大效果越好

不适合复杂生成任务

LoRA

无延迟

表现出极佳的可扩展性

需合理选择秩 $r$ 的大小

六、借助 Agent 让大模型应用思考、决策并执行任务

大模型 Agent 是基于大语言模型,能够使用工具与外部世界进行交互的计算机程序。一个典型的 Agent 通常由 感知、思考、行动三个环节组成,并具备 规划记忆能力。

记忆是 Agent 生成计划、决策和内容的基础辅助。

记忆类型

对应技术概念

特点与局限

短期记忆

上下文(Context)、历史对话、搜索反馈。

随会话结束而消失;受限于模型上下文长度。可能存在“近邻信息敏感(Recency问题)”,即对提示词末尾信息更敏感。

长期记忆

外部向量数据库、文档库、持久化业务记录。

可长期存储私有知识或专业领域信息,供 Agent 随时检索。

Agent 有规划能力,将复杂任务分解为可管理的步骤,是 Agent 处理高难度任务的核心。

(一)任务分解方式

  • **思维链 (CoT, Chain of Thought)**:

    • 通过提示词(如“一步一步思考”)引导模型进行线性拆解。
    • 在 Agent 模式下,不仅是提示词优化,还可结合计算器、代码解析器或循环迭代来逐步执行。
  • **思维树 (ToT, Tree of Thought)**:

    • 构建具有分支的选择树。在每个步骤生成多种方案,利用 深度搜索广度搜索选出最佳路径。
    • 适用于不确定性高、路径选择众多的复杂决策任务。
  • **思维图 (GoT, Graph of Thoughts)**:

    • 对思维树的工程优化。允许在执行中 回溯、对错误方案进行 剪枝或合并相同执行节点。
  • **XoT (Everything of Thoughts)**:

    • 整合各种分解方案,引入强化学习、蒙特卡洛搜索及外部领域知识的终极框架。

(二)推理、行动与反思(ReAct 框架)

为了确保结果符合需求,Agent 需要在输出前进行自我审视和环境反馈。

ReAct 核心逻辑

ReAct 是 Reasoning(推理)Acting(行动) 的协同过程,形成“ 思考-行动-观察”的闭环。

  1. 判断:模型分析是否能直接回答问题。
  2. 选择:若不能,从工具列表中选择合适工具。
  3. 调用:生成带参数的指令,由主体程序调用工具。
  4. 观察:收集工具执行结果。
  5. 迭代:结合环境反馈再次推理,直至解决问题或给出最终答案。

ReAct 提示词模版 (LangChain 示例)

1
2
3
4
5
6
7
8
9
Use the following format:
Question: the input question you must answer
Thought: you should always think about what to do
Action: the action to take, should be one of [{tool_names}]
Action Input: the input to the action
Observation: the result of the action
... (this Thought/Action/Action Input/Observation can repeat N times)
Thought: I now know the final answer
Final Answer: the final answer to the original input question

(三)Agent 与普通大模型的区别

  1. 交互性:Agent 不局限于文字输出,能通过工具执行物理动作(发邮件、写代码、下单等)。
  2. 主动性:不再是被动回答,而是自主拆解任务、主动纠错、闭环完成任务。
  3. 复杂性:能够胜任系统性工作(如建站、开发游戏),而非碎片化问答。
  4. 进化性:通过长期记忆实现自我迭代,吸取历史对话中的经验和要求。
  5. 专业性:通过接入特定领域的知识库和工具,完成垂直领域的深度任务。
Comments