LLM 大模型应用开发:原理、实践与框架指南
如今,大模型应用已经渗透到各个领域,从自然语言处理到计算机视觉,再到推荐系统。这些复杂而强大的模型,如 GPT-3.5/4、文心一言和 Claude3,成为科技领域的瑰宝,引领着人工智能的浪潮。然而,对于许多开发者来说,这些大模型应用似乎充满神秘色彩,仿佛只有少数专家才能参与其中。事实上,深入了解这些模型的原理和应用,并付诸实践,并不遥不可及。
类比一下,对于程序员而言,如果学习前端开发,应该怎么做?通常,我们要先学习 HTML、JavaScript、CSS 的基本原理,然后动手跟着教程写一些例子,最后在实际的前端应用中去不断实践,形成循环迭代,进而真正掌握这门技术。面向大模型的应用开发也是一样的,理解大模型的基本原理,实际动手实践,在具体应用中对大模型进行微调,同样是一个循环迭代的过程。
双手沾泥,探索大模型应用的世界,将为我们揭示更多的乐趣。
1. 大模型的基本原理
谈到大模型一般会从 AI 说起,什么是开发者视角中的 AI 呢?
人工智能在一定程度上是可以通过自然语言体现的,可以追溯到图灵测试。而通过大模型通常是指大型语言模型(Large Language Model),确切地说,大概应该叫大型基础模型,是参数规模庞大、拥有深层结构的神经网络,能够处理复杂的任务。GPT-3/4、Claude3 等类似的大模型与 AI、机器学习和深度学习的关系如下图所示:

大模型的以 GPT-3 为例,这是一个由数十亿个参数组成的深度神经网络,通过无监督学习在大规模文本数据上进行预训练,从而具备了惊人的语言生成能力。这主要归功于 Transformer 架构,它能够处理长文本序列并记住上下文。Transformer 的核心支柱是自注意力机制(Self-Attention),即关注一句话中最相关的词,交叉注意力和自注意力是其中两个广泛使用的模块。其中,自注意力机制的示意图如下:

GPT-X 等大模型充分利用了 Transformer 架构的潜力,而 ChatGPT 可以看作融入了对话管理的大模型应用,背后的模型应该是 gpt-3.5-turbo,它根据制定的输入提示词逐个预测下一个词,进而生成问答。另外,GPT-4 同时支持插件功能。
OpenAI 提供的很多模型都会不断更新,但都是涉及到一些基本概念,例如提示词(Prompt)、token 和嵌入(Embedding)。其中,提示词可以参考《解读提示工程(Prompt Engineering)》,进一步,还可以参考《Agent 应用于提示工程》;token 可以参考《解读大模型(LLM)的 token》,同时注意 token 和 tokenization 的区别;嵌入可以参考《深入浅出 Embedding》随笔。
Token 与 Tokenization
Token 是大模型处理文本的最小单位。不同的模型使用不同的分词策略,常见的有 Byte Pair Encoding (BPE) 或 WordPiece。Tokenization 是将原始文本转换为 Token 列表的过程。理解 Token 的数量至关重要,因为大多数 API 计费是基于 Token 数量的。例如,一个中文字符可能对应 1 到 3 个 Token,具体取决于编码方式。
上下文窗口(Context Window)
上下文窗口决定了模型能'记住'多少之前的内容。GPT-4 模型的窗口大小通常是 gpt-3.5-turbo 的两倍甚至更多,这意味着它可以处理更长的文档或更长的对话历史。然而,窗口越大,计算成本越高,延迟也可能增加。
2. 动手体验
要想真正掌握大模型应用,光有理论知识是不够的。我们必须深入实践,通过亲手操作、不断尝试,才能真正理解其内在的逻辑和规律。这就像农民种地一样,只有双手沾泥,亲身感受土地的温暖和湿润,才能种出丰收的庄稼。同样,只有我们亲手搭建模型、调整参数、处理数据,才能真正掌握大模型应用的精髓。
对于大模型在各种任务上的表现,可以在其厂商提供的控制台直接体验。例如,OpenAI Playground 就是一个很好的体验途径。
对程序员而言,新技术的学习一般都会始于'永远的 hello world',大模型应用也不例外,只不过是基于 Python 这种编程语言而已,关于 Python 的一些基础用法可以参考《全栈 Python 编程必备》。
安装环境的命令 pip install openai,以下代码实现 hello world:
import openai
openai.api_key = "YOUR_API_KEY"
resp = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": "Hello World!"}]
)
print(resp["choices"][0]["message"]["content"])
当然,这里默认设置了 OPENAI_API_KEY 的环境变量。在实际生产中,建议使用 .env 文件配合 python-dotenv 库来管理密钥,避免硬编码。
GPT-3.5-turbo 可能是最便宜且功能最多的模型,可以作为大模型应用开发的初始选择。在广泛联系之前,要考虑一下成本和数据隐私。例如,OpenAI 是以每千个 token 定价的,且每个模型的定价不同。gpt-4 模型的窗口大小是 gpt-3.5-turbo 的两倍,但成本会更高。另外,OpenAI 会保留 30 天的用户输入用于改进服务,注意敏感信息的保护,管理好密钥。
错误处理与重试
网络请求可能会失败,因此实现重试机制非常重要。可以使用 tenacity 库来处理指数退避重试,确保在 API 暂时不可用时不会立即崩溃。
3. 尝试应用
开发基于大模型的应用,核心是将大模型与其提供的 API 结合起来,需要注意的是,应用要与模型解耦,绑定会带来紧耦合,不利于系统扩展。一个典型使用 OpenAI API 的 web 程序如下图所示:

需要注意的是,大模型应用无法避免提示词注入(Prompt Injection),提示词的这一功能特性带来了安全风险。一般的应对策略包括:
- 使用特定规则控制用户输入
- 控制输入的长度
- 控制输出格式(如强制 JSON)
- 监控与审计日志
- 意图分析
提示工程(Prompt Engineering)
提示工程专注于以最佳实践的方式来构建 LLM 的最佳输入,从而尽可能以程序化方式生成目标结果。由于大模型将数字视为 token,所以缺乏真正的数学逻辑和类似的推理能力。可以在提示词末尾添加'让我们逐步思考'这样的话,这种技术被称为'零样本思维链'(Zero-Shot Chain-of-Thought)。思维链是指使用提示词鼓励模型逐步思考的技术,one-shot 和 few-shot 也是常见技术手段,总之,提示工程是一个反复试错的迭代过程。
Few-Shot Prompting 示例
Q: 苹果是什么颜色的?
A: 红色
Q: 香蕉是什么颜色的?
A: 黄色
Q: 葡萄是什么颜色的?
A:
通过提供几个示例,模型可以更准确地遵循模式。
微调(Fine-Tuning)
另外,面向特定任务,我们还需要微调大模型,示意图如下:

大多数时候,预训练的大模型需要在特定任务上进行微调,以适应具体应用场景。微调过程包括调整模型的超参数、选择合适的数据增强方法,以及解决过拟合等问题。微调要使用基础模型,而不能使用像 InstructGPT 系列中的模型。而且,微调通常也需要大量的数据,成本也不低。
目前主流的微调方法包括全量微调(Full Fine-Tuning)和参数高效微调(PEFT),后者如 LoRA(Low-Rank Adaptation)和 QLoRA。LoRA 通过冻结预训练权重并在旁路中引入低秩矩阵来更新模型,大大减少了显存需求和训练时间。更多有关微调的理解和思考可以参考《解读大模型的微调》。
《大模型应用开发极简入门》一书中给了一些不错的练手项目,都可以动手尝试。
4. 大模型应用框架的使用
站在巨人的肩膀上,从零构建一个成熟且复杂的大模型应用并不是一件轻松的事。和 Web 应用的开发类似,是类似 Spring 这样的应用框架,给我们带来了极大的便利。对大模型应用而言也是如此,LangChain 就是一个当前看来还不错的应用框架。
LangChain 核心组件
关于 LangChain 的进一步了解,可以参考《解读 LangChain》。Agent 及相关工具是 LangChain 框架提供的关键功能之一,让大模型能够执行各种操作并与各种功能集成,从而解决复杂的问题。在 LangChain 中使用 Agent 的示意如下:

关于 Agent 的更多理解,可以参考《基于大模型(LLM)的 Agent 应用开发》。
Document Loaders 是 LangChain 中的一个重要模块,通过这个模块,可以快速将文本数据从不同的数据源加载到应用程序中,然后,对文本实现向量化,例如使用 OpenAIEmbeddings 模块,从而使搜索更加容易。这是 RAG(Retrieval-Augmented Generation,检索增强生成)的典型应用模式,关于 RAG 的更多理解可以参考《大模型系列——解读 RAG》。
LangChain 以向量数据库为核心,有多种向量数据库可以选择,如 Pinecone, Milvus, Chroma 等。关于向量数据库可以参考《解读向量数据库》。
RAG 架构详解
RAG 架构允许模型利用外部知识库来回答问题,减少幻觉。基本流程包括:
- 索引:将文档切片并向量化存储。
- 检索:根据用户查询在向量数据库中查找相似片段。
- 生成:将检索到的片段作为上下文输入给 LLM 生成答案。
为了优化检索效果,可以采用混合搜索(Hybrid Search),结合关键词匹配和向量相似度。此外,重排序(Re-ranking)步骤可以进一步提升检索结果的准确性。
另外,GPT-4 的插件功能重新定义了我们与大模型的交互方式,我们可以自行开发插件,进而提供更为广泛的功能。
5. 推荐学习路径
当然,通过一本书实现大模型应用开发入门是可能的,但和传统软件开发一样,如果要掌握大模型应用的开发技能,实践仍然是不二的法门。
- 通过阅读相关文献、参与在线课程,将有助于建立对大模型原理的深刻理解,就论文而言,《系统学习大模型的 20 篇论文》或许是个不错的起点;
- 通过与社区和团队共同探讨,将为我们提供更多的机会和启示;
- 通过亲自编写代码、搭建模型,我们能够深刻理解模型训练和推理的过程,可以与《如何构建基于大模型的 App》相互印证。
阶段规划
阶段 1:AI 大模型时代的基础理解
- 目标:了解 AI 大模型的基本概念、发展历程和核心原理。
- 内容:
- 人工智能简述与大模型起源
- 大模型与通用人工智能
- GPT 模型的发展历程
- 模型工程方法论与实践
- GPT 应用案例
阶段 2:AI 大模型 API 应用开发工程
- 目标:掌握 AI 大模型 API 的使用和开发,以及相关的编程技能。
- 内容:
- API 接口接入(OpenAI, Azure 等)
- Python 接口接入与 BOT 工具类框架
- Prompt 框架设计与应用
- 流水线工程的概念与应用
阶段 3:AI 大模型应用架构实践
- 目标:深入理解 AI 大模型的应用架构,并能够进行私有化部署。
- 内容:
- Agent 模型框架的设计理念与实现
- MetaGPT 与多智能体协作
- ChatGLM 与 LLAMA 等开源模型的使用
- 其他大模型介绍与对比
阶段 4:AI 大模型私有化部署
- 目标:掌握多种 AI 大模型的私有化部署,包括多模态和特定领域模型。
- 内容:
- 模型私有化部署概述
- 关键技术(量化、蒸馏)
- 实施步骤与场景
学习计划建议
- 阶段 1:1-2 个月,建立 AI 大模型的基础知识体系。
- 阶段 2:2-3 个月,专注于 API 应用开发能力的提升。
- 阶段 3:3-4 个月,深入实践 AI 大模型的应用架构和私有化部署。
- 阶段 4:4-5 个月,专注于高级模型的应用和部署。
请根据您的个人进度和时间安排,适当调整学习计划。记得在学习过程中,理论与实践相结合,不断进行项目实践和反思,以加深理解和技能的掌握。
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。如果你能在 15 天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。
双手沾泥,大模型应用并不神秘。选择一个熟悉的任务,让我们开始构建相应的大模型应用吧。