系列文章目录
动手学大模型应用开发第一章:大模型简介
动手学大模型应用开发第二章:使用 LLM API 开发应用
动手学大模型应用开发第三章:搭建知识库
动手学大模型应用开发第四章:构建 RAG 应用
动手学大模型应用开发第五章:系统评估与优化
文章目录
前言
- 本文内容来自 https://datawhalechina.github.io/llm-universe
1 大模型简介
1.1 大型语言模型的概念
Large Language Model , 简称 LLM,也称大语言模型,是一种旨在理解和生成人类语言的人工智能模型。
-
LLM 通常指包含数百亿(或更多)参数的语言模型,它们在海量的文本数据上进行训练,从而获得对语言深层次的理解。
-
目前,国外的知名 LLM 有 GPT-3.5、GPT-4、PaLM、Claude 和 LLaMA 等,国内的有文心一言、讯飞星火、通义千问、ChatGLM、百川等。
-
大型语言模型与小型语言模型(例如
3.3 亿
参数的BERT
和15 亿
参数的GPT-2
)使用相似的架构和预训练任务,但它们展现出截然不同的能力,尤其在解决复杂任务时表现出了惊人的潜力,这被称为“涌现能力”。以 GPT-3 和 GPT-2 为例,GPT-3 可以通过学习上下文来解决少样本任务,而 GPT-2 在这方面表现较差。因此,科研界给这些庞大的语言模型起了个名字,称之为“大语言模型(LLM)”。
1.2 LLM 发展历程
- 语言建模的研究可以追溯到
20 世纪 90 年代
,当时的研究主要集中在采用统计学习方法来预测词汇,通过分析前面的词汇来预测下一个词汇。但在理解复杂语言规则方面存在一定局限性。 2003 年
深度学习先驱 Bengio 在他的经典论文《A Neural Probabilistic Language Model》
中,首次将深度学习的思想融入到语言模型中。强大的神经网络模型,相当于为计算机提供了强大的"大脑"来理解语言,让模型可以更好地捕捉和理解语言中的复杂关系。2018 年
左右,Transformer 架构的神经网络模型开始崭露头角。通过大量文本数据训练这些模型,使它们能够通过阅读大量文本来深入理解语言规则和模式,就像让计算机阅读整个互联网一样,对语言有了更深刻的理解,极大地提升了模型在各种自然语言处理任务上的表现。
1.3 常见 LLM 模型
- 图片来源于 https://arxiv.org/abs/2303.18223
闭源 LLM | 开源LLM |
---|---|
GPT 系列 - OpenAI | LLaMA 系列 - Meta |
Claude 系列 - Anthrophic | 通义千问 - 阿里巴巴 |
PalM / Gemini - Google | GLM系列 - 智谱 |
文心一言 - 百度 | Baichuan 系列 - 百川智能 |
星火大模型 - 科大讯飞 |
1.3.1 闭源大模型
GPT 系列
- ChatGPT 使用地址
- GPT 模型的基本原则是通过语言建模将世界知识压缩到仅解码器 (decoder-only) 的 Transformer 模型中,这样它就可以恢复(或记忆)世界知识的语义,并充当通用任务求解器。它能够成功的两个关键点:
- 训练能够准确预测下一个单词的 decoder-only 的 Transformer 语言模型
- 扩展语言模型的大小
语言模型名称 | 上下文长度 | 特点 | input 费用($/million tokens) | output 费用($/ 1M tokens) | 知识截止日期 |
---|---|---|---|---|---|
GPT-3.5-turbo-0125 | 16k | 经济,专门对话 | 0.5 | 1.5 | 2021 年 9 月 |
GPT-3.5-turbo-instruct | 4k | 指令模型 | 1.5 | 2 | 2021 年 9 月 |
GPT-4 | 8k | 性能更强 | 30 | 60 | 2021 年 9 月 |
GPT-4-32k | 32k | 性能强,长上下文 | 60 | 120 | 2021 年 9 月 |
GPT-4-turbo | 128k | 性能更强 | 10 | 30 | 2023 年 12 月 |
GPT-4o | 128k | 性能最强,速度更快 | 5 | 15 | 2023 年 10 月 |
Embedding 模型名称 | 维度 | 特点 | 费用($/ 1M tokens) |
---|---|---|---|
text-embedding-3-small | 512/1536 | 较小 | 0.02 |
text-embedding-3-large | 256/1024/3072 | 较大 | 0.13 |
ada v2 | 1536 | 传统 | 0.1 |
Claude 系列
- Claude 使用地址
- Claude 系列模型是由 OpenAI 离职人员创建的 Anthropic 公司开发的闭源语言大模型。最早的 Claude 于
2023 年 3 月 15 日
发布,在 2023 年 7 月 11 日,更新至 Claude-2, 并在2024 年 3 月 4 日
更新至 Claude-3。
Claude 3 系列包括三个不同的模型,分别是 Claude 3 Haiku、Claude 3 Sonnet 和 Claude 3 Opus,它们的能力依次递增,旨在满足不同用户和应用场景的需求。
模型名称 | 上下文长度 | 特点 | input 费用($/1M tokens) | output 费用($/1M tokens) |
---|---|---|---|---|
Claude 3 Haiku | 200k | 速度最快 | 0.25 | 1.25 |
Claude 3 Sonnet | 200k | 平衡 | 3 | 15 |
Claude 3 Opus | 200k | 性能最强 | 15 | 75 |
PaLM/Gemini 系列
- PaLM 官方地址
- Gemini 使用地址
- PaLM 系列语言大模型由 Google 开发。其初始版本于
2022 年 4 月
发布,并在 2023 年 3 月公开了 API。2023 年 5 月,Google 发布了 PaLM 2,2024 年 2 月 1 日
,Google 将 Bard(之前发布的对话应用) 的底层大模型驱动由 PaLM2 更改为 Gemini,同时也将原先的 Bard 更名为 Gemini。
目前的 Gemini 是第一个版本,即 Gemini 1.0,根据参数量不同分为 Ultra, Pro 和 Nano 三个版本。
文心一言
- 文心一言使用地址
- 文心一言是基于百度文心大模型的知识增强语言大模型,于
2023 年 3 月
在国内率先开启邀测。文心一言的基础模型文心大模型于 2019 年发布 1.0 版,现已更新到 4.0 版本。更进一步划分,文心大模型包括 NLP 大模型、CV 大模型、跨模态大模型、生物计算大模型、行业大模型。中文能力相对来说非常不错的闭源模型。
文心一言网页版分为免费版和专业版。
- 免费版使用文心 3.5 版本,已经能够满足个人用户或小型企业的大部分需求。
- 专业版使用文心 4.0 版本。定价为 59.9 元/月,连续包月优惠价为 49.9 元/月
星火大模型
- 星火大模型使用地址
- 讯飞星火认知大模型是科大讯飞发布的语言大模型,支持多种自然语言处理任务。该模型于
2023 年 5 月
首次发布,后续经过多次升级。2023 年 10 月
,讯飞发布了讯飞星火认知大模型 V3.0。2024 年 1 月
,讯飞发布了讯飞星火认知大模型 V3.5
1.3.2 开源大模型
LLaMA 系列
-
LLaMA 系列模型是 Meta 开源的一组参数规模 从 7B 到 70B 的基础语言模型。LLaMA 于
2023 年 2 月
发布,2023 年 7 月发布了 LLaMA2 模型,并于2024 年 4 月 18 日
发布了 LLaMA3 模型。 -
与 GPT 系列相同,LLaMA 模型也采用了 decoder-only 架构,同时结合了一些前人工作的改进:
Pre-normalization 正则化
:为了提高训练稳定性,LLaMA 对每个 Transformer 子层的输入进行了 RMSNorm 归一化,这种归一化方法可以避免梯度爆炸和消失的问题,提高模型的收敛速度和性能;SwiGLU 激活函数
:将 ReLU 非线性替换为 SwiGLU 激活函数,增加网络的表达能力和非线性,同时减少参数量和计算量;旋转位置编码(RoPE,Rotary Position Embedding)
:模型的输入不再使用位置编码,而是在网络的每一层添加了位置编码,RoPE 位置编码可以有效地捕捉输入序列中的相对位置信息,并且具有更好的泛化能力。
通义千问
- 通义千问使用地址
- 通义千问开源地址
- 通义千问由阿里巴巴基于“通义”大模型研发,于
2023 年 4 月
正式发布。2023 年 9 月,阿里云开源了 Qwen(通义千问)系列工作。2024 年 2 月 5 日,开源了 Qwen1.5(Qwen2 的测试版)。并于2024 年 6 月 6 日
正式开源了 Qwen2。 Qwen2 是一个 decoder-Only 的模型,采用SwiGLU 激活
、RoPE
、GQA
的架构。
目前,已经开源了 5 种模型大小:**0.5B、1.5B、7B、72B 的 Dense 模型和 57B (A14B)的 MoE 模型**;
GLM 系列
- ChatGLM 使用地址
- ChatGLM 开源地址
- GLM 系列模型是清华大学和智谱 AI 等合作研发的语言大模型。2023 年 3 月 发布了 ChatGLM。6 月发布了 ChatGLM 2。10 月推出了 ChatGLM3。2024 年 1 月 16 日 发布了 GLM4,并于
2024 年 6 月 6 日
正式开源。
开源了
对话模型 **GLM-4-9B-Chat**、
基础模型 **GLM-4-9B**、
长文本对话模型 **GLM-4-9B-Chat-1M**(支持 1M 上下文长度)、
多模态模型**GLM-4V-9B** 等
Baichuan 系列
- 百川使用地址
- 百川开源地址
- Baichuan 是由百川智能开发的开源可商用的语言大模型。其基于Transformer 解码器架构(decoder-only)。
- 2023 年 6 月 15 日发布了 Baichuan-7B 和 Baichuan-13B。百川同时开源了预训练和对齐模型,
预训练模型是面向开发者的“基座”
,而对齐模型则面向广大需要对话功能的普通用户
。 - Baichuan2 于
2023年 9 月 6 日
推出。发布了 7B、13B 的 Base 和 Chat 版本,并提供了 Chat 版本的 4bits 量化。 2024 年 1 月 29 日
发布了 Baichuan 3。但是目前还没有开源。
1.4 大模型的能力与特点
1.4.1 LLM 的能力
涌现能力 Emergent Abilities
- 区分大语言模型 LLM 与以前的预训练语言模型 PLM 最显著的特征之一是它们的涌现能力。
- 它类似物理学中的相变现象,涌现能力就像是模型性能随着规模增大而迅速提升,超过了随机水平,也就是常说的量变引起质变。
三个典型的涌现能力
上下文学习
- 这种能力允许语言模型在提供自然语言指令或多个任务示例的情况下,通过理解上下文并生成相应输出的方式来执行任务,而无需额外的训练或参数更新。
指令遵循
- 通过使用自然语言描述的多任务数据进行微调,也就是所谓的
指令微调
。
逐步推理
- 小型语言模型通常难以解决涉及多个推理步骤的复杂任务,例如数学问题。然而,LLM 通过采用
思维链(CoT, Chain of Thought)
推理策略,利用包含中间推理步骤的提示机制来解决这些任务,从而得出最终答案。据推测,这种能力可能是通过对代码的训练获得的。
作为基座模型支持多元应用的能力
- 2021年,斯坦福大学等多所高校的研究人员提出了 基座模型 foundation model 的概念,清晰了预训练模型的作用。
- 这是一种全新的 AI 技术范式,借助于海量无标注数据的训练,获得可以适用于大量下游任务的大模型(单模态或者多模态)。这样,多个应用可以只依赖于一个或少数几个大模型进行统一建设。
支持对话作为统一入口的能力
- 大型语言模型的出现再次让聊天机器人这种交互模式可以重新涌现。这引发我们对于
智能体(Agent)
类型应用前景的思考。
1.4.2 LLM 的特点
参数规模巨大
- 可以达到数十亿甚至数千亿个参数
预训练和微调
- 首先在大规模文本数据上进行预训练(无标签数据),学习通用的语言表示和知识。然后通过微调(有标签数据)适应特定任务,从而在各种 NLP 任务中表现出色。
上下文感知
- 能够理解和生成依赖于前文的文本内容。
多语言支持
- LLM 可以用于多种语言,不仅限于英语。
多模态支持
- 一些 LLM 已经扩展到支持多模态数据,包括文本、图像和声音。
伦理和风险问题
- LLM 引发了很多伦理和风险问题,包括生成有害内容、隐私问题、认知偏差等。因此,研究和应用 LLM 需要谨慎。
高计算资源需求,耗电量巨大
- LLM 参数规模庞大,需要大量的计算资源进行训练和推理。通常需要使用高性能的 GPU 或 TPU 集群来实现。
1.5 LLM 的应用与影响
- 最重要的是,LLM 的出现让人们重新思考了 通用人工智能(AGI) 的可能性。
2 检索增强生成 RAG 简介
2.1 什么是 RAG
- 大型语言模型 LLM 相较于传统的语言模型更强大,然而在某些场景下,LLM 仍可能无法提供准确完整的答案。
- 为了解决大型语言模型在生成文本时面临的一系列挑战,提高模型的性能和输出质量,研究人员提出了一种新的模型架构:检索增强生成(RAG, Retrieval-Augmented Generation)。
- 该架构巧妙地整合了从庞大知识库中检索到的相关信息,并以此为基础,指导大型语言模型生成更为精准的答案,从而显著提升了回答的准确性与深度。
2.1.1 RAG vs LLM 的问题
LLM 的 信息偏差/幻觉
- LLM 有时会产生与客观事实不符的信息。
- RAG 通过检索数据源,辅助模型生成过程,确保输出内容的精确性和可信度,减少信息偏差。
LLM 的知识更新滞后性
- LLM 基于静态的数据集训练,导致模型的知识更新滞后,无法及时反映最新的信息动态。
- RAG 通过实时检索最新数据,保持内容的时效性,确保信息的持续更新和准确性。
LLM 的内容不可追溯
- LLM 生成的内容往往缺乏明确的信息来源,影响内容的可信度。
- RAG 将生成内容与检索到的原始资料建立链接,一目了然的增强了内容的可追溯性,从而提升了用户对生成内容的信任度。
LLM 的领域专业知识能力欠缺
- LLM 采用通用的无标注数据集进行训练,而在处理特定领域的专业知识时,效果很难令人满意,会影响到其在领域专业知识方面生成回答的质量。
- RAG 通过外挂知识库,检索知识库中特定领域的相关文档,为模型提供丰富的上下文信息,直接提升了在领域专业知识方面问题回答质量的广度和深度。
LLM 的推理能力限制
- LLM 具有逐步推理 step-by-step reasoning的能力,但在面对复杂问题时,往往力不从心。
- RAG 结合检索到的信息和模型的生成能力,通过提供额外的背景知识和数据支持,增强了模型的推理和理解能力。
LLM 的应用场景适应性受限
- LLM 需在多样化的应用场景中保持高效和准确,但单一模型可能难以全面适应所有场景。
- RAG 使得 LLM 能够通过检索对应应用场景数据的方式,灵活适应问答系统、推荐系统等多种应用场景。
- 当然,现在的大模型处理上下文长度的能力越来越强,能处理的 tokens 也越来越长。
LLM 的长文本处理能力较弱
- RAG 通过检索和整合长文本信息,强化了模型对长上下文的理解和生成,有效突破了输入长度的限制,同时降低了调用成本,并提升了整体的处理效率。
2.2 RAG 的工作流程
- 图片来源于 https://github.com/datawhalechina/llm-universe/blob/main/figures/C1-1-RAG.png
2.2.1 数据处理阶段
- 对原始数据进行清洗和处理
- 将处理后的数据转化为检索模型可以使用的格式
- 将处理后的数据存储在对应的数据库中
2.2.2 检索阶段
- 将用户的问题输入到检索系统中,从数据库中检索相关信息
2.2.3 增强阶段
- 对检索到的信息进行处理和增强,以便生成模型可以更好地理解和使用
2.2.4 生成阶段
- 将增强后的信息输入到生成模型中,生成模型根据这些信息生成答案
2.3 RAG vs 微调 Finetune
微调: 通过在特定数据集上进一步训练大语言模型,来提升模型在特定任务上的表现。
特征比较 | RAG | 微调 |
---|---|---|
知识更新 | 直接更新检索知识库,无需重新训练。信息更新成本低,适合动态变化的数据。 | 通常需要重新训练来保持知识和数据的更新。更新成本高,适合静态数据。 |
外部知识 | 擅长利用外部资源,特别适合处理文档或其他结构化/非结构化数据库。 | 将外部知识学习到 LLM 内部。 |
数据处理 | 对数据的处理和操作要求低。 | 依赖于构建高质量的数据集,有限的数据集可能无法显著提高性能。 |
模型定制 | 侧重于信息检索和融合外部知识,但可能无法充分定制模型行为或写作风格。 | 可以根据特定风格或术语调整 LLM 行为、写作风格或特定领域知识。 |
可解释性 | 可以追溯到具体的数据来源,有较好的可解释性和可追踪性。 | 黑盒子,可解释性相对较低。 |
计算资源 | 需要额外的资源来支持检索机制和数据库的维护。 | 依赖高质量的训练数据集和微调目标,对计算资源的要求较高。 |
推理延迟 | 增加了检索步骤的耗时 | 单纯 LLM 生成的耗时 |
降低幻觉 | 通过检索到的真实信息生成回答,降低了产生幻觉的概率。 | 模型学习特定领域的数据有助于减少幻觉,但面对未见过的输入时仍可能出现幻觉。 |
伦理隐私 | 检索和使用外部数据可能引发伦理和隐私方面的问题。 | 训练数据中的敏感信息需要妥善处理,以防泄露。 |
|
3 LangChain 简介
3.1 什么是 LangChain
LangChain 框架是一个开源工具,充分利用了大型语言模型的强大能力,以便开发各种下游应用。
它的目标是为各种大型语言模型应用提供通用接口,帮助开发者们快速构建基于大型语言模型的端到端应用程序或工作流程。
- 具体来说,LangChain 框架可以实现数据感知和环境互动,也就是它能够让语言模型与其他数据来源连接,并且允许语言模型与其所处的环境进行互动。
利用 LangChain 框架构建 RAG 应用
- 在下图中:
每个椭圆形代表了 LangChain 的一个模块
,例如数据收集模块或预处理模块。每个矩形代表了一个数据状态
,例如原始数据或预处理后的数据。- 箭头表示数据流的方向,从一个模块流向另一个模块。
- 在每一步中,LangChain 都可以提供对应的解决方案,帮助我们处理各种任务。
- 图片来源于 https://github.com/chatchat-space/Langchain-Chatchat/blob/master/img/langchain+chatglm.png
3.2 LangChain 的核心组件
- LangChian 作为一个大语言模型开发框架,可以将 LLM 模型(对话模型、embedding 模型等)、向量数据库、交互层 Prompt、外部知识、外部代理工具整合到一起,进而可以自由构建 LLM 应用。 LangChain 主要由以下 6 个核心组件组成:
模型输入/输出(Model I/O)
- 与语言模型交互的接口
数据连接(Data connection)
- 与特定应用程序的数据进行交互的接口
链(Chains)
- 将组件组合实现端到端应用。比如后续我们会将搭建
检索问答链
来完成检索问答。
记忆(Memory)
- 用于链的多次运行之间持久化应用程序状态;
代理(Agents)
- 扩展模型的推理能力。用于复杂的应用的调用序列;
回调(Callbacks)
- 扩展模型的推理能力。用于复杂的应用的调用序列;
在开发过程中,我们可以根据自身需求灵活地进行组合。
3.3 LangChain 的稳定版本
-
2024 年 1 月 9 日
,LangChain 正式发布了其稳定版本 v0.1.0,这一里程碑式的更新,为开发者带来了全面而强大的功能支持。其涵盖了模型的输入与输出处理、数据连接、链式操作、记忆机制、代理服务以及回调处理等关键组件,为 LLM 应用的开发和部署提供了坚实的基础。 -
兼容性与支持: v0.1.0 版本兼顾了对
Python 和 JavaScript
的支持,同时保持了向后兼容性 -
架构改进:将核心组件 langchain-core 与合作伙伴包进行有效分离
-
可观察性:LangChain 通过与 LangSmith 的深度集成,提供了业界领先的调试和观测功能。
-
广泛的集成:LangChain 拥有近 700 个集成,覆盖了从 LLM 到向量存储、工具和智能体(Agent)等多个技术领域。
-
可组合性:借助
LangChain 表达式语言(LCEL)
,开发者可以轻松地构建和定制 chain,充分利用数据编排框架的优势,包括批量处理、并行化操作和备选方案等高级功能。 -
流式处理:LangChain 对流式处理进行了深度优化,确保所有利用 LCEL 创建的 chain 均能支持流式处理,包括中间步骤的数据流传输。
-
输出解析:LangChain 提供了一系列强大的输出解析工具,确保 LLM 能够以结构化的格式返回信息,这对于 LLM 执行具体行动计划至关重要。
-
检索能力:LangChain 引入了先进的检索技术,适用于生产环境,包括文本分割、检索机制和索引管道等,使得开发者能够轻松地将私有数据与LLM的能力相结合。
-
工具使用与智能体:LangChain 提供了丰富的智能体和工具集合,并提供了定义工具的简便方法,支持智能体工作负载,包括让LLM 调用函数或工具,以及如何高效地进行多次调用和推理,极大地提升了开发效率和应用性能。
3.4 LangChain 的生态
LangChain Community:
- 专注于第三方集成,极大地丰富了 LangChain 的生态系统,使得开发者可以更容易地构建复杂和强大的应用程序,同时也促进了社区的合作和共享。
LangChain Core
- LangChain 框架的核心库、核心组件,提供了基础抽象和 LangChain 表达式语言(LCEL),提供基础架构和工具,用于构建、运行和与 LLM 交互的应用程序,为 LangChain 应用程序的开发提供了坚实的基础。
LangChain CLI
- 命令行工具,使开发者能够通过终端与 LangChain 框架交互,执行项目初始化、测试、部署等任务。
LangServe
- 部署服务,用于将 LangChain 应用程序部署到云端,提供可扩展、高可用的托管解决方案,并带有监控和日志功能。
LangSmith
- 开发者平台,专注于 LangChain 应用程序的开发、调试和测试,提供可视化界面和性能分析工具。
4. 开发 LLM 应用的整体流程
4.1 何为大模型开发
将开发以大语言模型为功能核心、通过大语言模型的强大理解能力和生成能力、结合特殊的数据或业务逻辑来提供独特功能的应用 称为 大模型开发。
-
开发大模型相关应用,其技术核心点虽然在大语言模型上,但一般通过调用 API 或开源模型来实现核心的理解与生成,通过 Prompt Enginnering 来实现大语言模型的控制.
-
因此,虽然大模型是深度学习领域的集大成之作,大模型开发却更多是一个工程问题。
-
在大模型开发中,我们一般不会去大幅度改动模型,而是将大模型作为一个调用工具,通过 Prompt Engineering、数据工程、业务逻辑分解等手段来充分发挥大模型能力,适配应用任务,而不会将精力聚焦在优化模型本身上。因此更需要掌握使用大模型的实践技巧。
4.2 大模型开发 vs 传统 AI 开发
4.2.1 整体思路
传统的 AI 开发
- 首先需要将非常复杂的业务逻辑依次拆解,对于每一个子业务构造训练数据与验证数据,对于每一个子业务训练优化模型,最后形成完整的模型链路来解决整个业务逻辑。
大模型开发
- 大语言模型的两个核心能力:
指令遵循
与文本生成
提供了复杂业务逻辑的简单平替方案。 - 用 Prompt Engineering 来替代子模型的训练调优,通过 Prompt 链路组合来实现业务逻辑,用一个通用大模型 + 若干业务 Prompt 来解决任务,从而将传统的模型训练调优转变成了更简单、轻松、低成本的 Prompt 设计调优。
4.2.2 评估思路
传统 AI 开发
- 需要首先构造训练集、测试集、验证集,通过在训练集上训练模型、在测试集上调优模型、在验证集上最终验证模型效果来实现性能的评估。
大模型开发
- 流程更为灵活和敏捷。从实际业务需求出发构造小批量验证集,设计合理 Prompt 来满足验证集效果。然后,将不断从业务逻辑中收集当下 Prompt 的 Bad Case,并将 Bad Case 加入到验证集中,针对性优化 Prompt,最后实现较好的泛化效果。
4.3 大模型开发的一般流程
4.3.1 确定目标
- 开发前,首先需要确定开发的目标,即要开发的应用的应用场景、目标人群、核心价值。
- 对于个体开发者或小型开发团队而言,一般应先设定最小化目标,从构建一个 MVP(最小可行性产品)开始,逐步进行完善和优化。
4.3.2 设计功能
- 在确定开发目标后,需要设计本应用所要提供的功能,以及每一个功能的大体实现逻辑。
- 同样,对于个体开发者或小型开发团队来说,首先要确定应用的核心功能,然后延展设计核心功能的上下游功能;
- 例如,我们想打造一款个人知识库助手,那么核心功能就是结合个人知识库内容进行问题的回答,那么其上游功能的用户上传知识库、下游功能的用户手动纠正模型回答就是我们也必须要设计实现的子功能。
4.3.3 搭建整体架构
- 目前,绝大部分大模型应用都是采用的特定数据库 + Prompt + 通用大模型的架构。
- 我们需要针对我们所设计的功能,搭建项目的整体架构,实现从用户输入到应用输出的全流程贯通。
- 一般来说,我们推荐基于 LangChain 框架进行开发。LangChain 提供了 Chain、Tool 等架构的实现,我们可以基于 LangChain 进行个性化定制,实现从用户输入到数据库再到大模型最后输出的整体架构连接。
4.3.4 搭建数据库
- 个性化大模型应用需要有个性化数据库进行支撑。
- 由于大模型应用需要进行向量语义检索,一般使用诸如 Chroma 的向量数据库。
- 在该步骤中,我们需要收集数据并进行预处理,再向量化存储到数据库中。
- 数据预处理一般包括从多种格式向纯文本的转化,例如 PDF、MarkDown、HTML、音视频等,以及对错误数据、异常数据、脏数据进行清洗。完成预处理后,需要进行切片、向量化构建出个性化数据库。
4.3.5 Prompt Engineering
- 优质的 Prompt 对大模型能力具有极大影响,我们需要逐步迭代构建优质的 Prompt Engineering 来提升应用性能。
- 在该步中,我们首先应该明确 Prompt 设计的一般原则及技巧,构建出一个来源于实际业务的小型验证集,基于小型验证集设计满足基本要求、具备基本能力的 Prompt。
4.3.6 验证迭代
- 验证迭代在大模型开发中是极其重要的一步,一般指通过不断发现 Bad Case 并针对性改进 Prompt Engineering 来提升系统效果、应对边界情况。
- 在完成上一步的初始化 Prompt 设计后,我们应该进行实际业务测试,探讨边界情况,找到 Bad Case,并针对性分析 Prompt 存在的问题,从而不断迭代优化,直到达到一个较为稳定、可以基本实现目标的 Prompt 版本。
4.3.7 前后端搭建
- 完成 Prompt Engineering 及其迭代优化之后,我们就完成了应用的核心功能,可以充分发挥大语言模型的强大能力。
- 接下来我们需要搭建前后端,设计产品页面,让我们的应用能够上线成为产品。
- 前后端开发是非常经典且成熟的领域,此处就不再赘述,我们采用 Gradio 和 Streamlit,可以帮助个体开发者迅速搭建可视化页面实现 Demo 上线。
4.3.8 体验优化
- 在完成前后端搭建之后,应用就可以上线体验了。
- 接下来就需要进行长期的用户体验跟踪,记录 Bad Case 与用户负反馈,再针对性进行优化即可。
总结
- 第一章作为整个系列入门,简要的介绍了大型语言模型的概念、理论,以及大模型的发展历程,图片展示了时下比较流行的开源/闭源的大模型。
- 后面引出了我们是如何应用大模型来做工程化开发,指导思想就是检索增强生成 RAG,使用的工具主要就是 LangChain。
- 最后介绍了传统 AI 应用和大模型应用开发的不同之处,用长篇语言+文字的方式详细阐述了大模型项目开发的整个流程。