一、什么是大语言模型LLM?
大语言模型(LLM,Large Language Model),是一种可以理解和生成人类语言的人工智能模型。它们通过海量的文本数据进行训练,从而获得对语言深层次的理解能力。LLM 通常指包含数百亿(或更多)参数的语言模型。
国外的知名 LLM 有 GPT-3.5、GPT-4、PaLM、Claude 和 LLaMA 等。
国内的有文心一言、讯飞星火、通义千问、ChatGLM、百川等。
二、什么是RAG?
RAG又叫检索增强生成(RAG, Retrieval-Augmented Generation),顾名思义他是一种通过检索的方式来增强大模型的生成能力。因为大模型是提前训练好的,它的能力受限于训练的数据样本,因此然而在某些情况下,面对一些特有的应用场景它们仍可能无法提供准确的答案。而通过RAG手段就可以为大语言模型补充这部分的知识,从而获得较好的生成能力。
RAG 是一个完整的系统,其工作流程可以简单地分为数据处理、检索、增强和生成四个阶段:
1.数据处理阶段
(1)对原始数据进行清洗和处理。
(2) 将处理后的数据转化为检索模型可以使用的格式。
(3) 将处理后的数据存储在对应的数据库中。
2.检索阶段
(1)将用户的问题输入到检索系统中,从数据库中检索相关信息。
3.增强阶段
(1)对检索到的信息进行处理和增强,以便生成模型可以更好地理解和使用。
4.生成阶段
(1)将增强后的信息输入到生成模型中,生成模型根据这些信息生成答案。
三、什么是langchain?
langchain是大模型应用开发中一个辅助框架,用于帮助开发者们快速构建基于大型语言模型的端到端应用程序或工作流程。
利用 LangChain 框架,我们可以轻松地构建如下所示的 RAG 应用(图片来源)。在下图中,每个椭圆形代表了 LangChain 的一个模块
,例如数据收集模块或预处理模块。每个矩形代表了一个数据状态
,例如原始数据或预处理后的数据。箭头表示数据流的方向,从一个模块流向另一个模块。在每一步中,LangChain 都可以提供对应的解决方案,帮助我们处理各种任务。
LangChain 的核心组件
LangChian 作为一个大语言模型开发框架,可以将 LLM 模型(对话模型、embedding 模型等)、向量数据库、交互层 Prompt、外部知识、外部代理工具整合到一起,进而可以自由构建 LLM 应用。 LangChain 主要由以下 6 个核心组件组成:
- 模型输入/输出(Model I/O):与语言模型交互的接口
- 数据连接(Data connection):与特定应用程序的数据进行交互的接口
- 链(Chains):将组件组合实现端到端应用。比如后续我们会将搭建
检索问答链
来完成检索问答。 - 记忆(Memory):用于链的多次运行之间持久化应用程序状态;
- 代理(Agents):扩展模型的推理能力。用于复杂的应用的调用序列;
- 回调(Callbacks):扩展模型的推理能力。用于复杂的应用的调用序列;
在开发过程中,我们可以根据自身需求灵活地进行组合。
四、LLM应用开发是怎样一个流程?
在大模型开发中,我们一般不会去大幅度改动模型,而是将大模型作为一个调用工具,通过 Prompt Engineering、数据工程、业务逻辑分解等手段来充分发挥大模型能力,适配应用任务,而不会将精力聚焦在优化模型本身上。因此,作为大模型开发的初学者,我们并不需要深研大模型内部原理,而更需要掌握使用大模型的实践技巧。
我们一般可以将大模型开发分解为以下几个流程:
1.确定目标。在进行开发前,我们首先需要确定开发的目标,即要开发的应用的应用场景、目标人群、核心价值。对于个体开发者或小型开发团队而言,一般应先设定最小化目标,从构建一个 MVP(最小可行性产品)开始,逐步进行完善和优化。
2.设计功能。在确定开发目标后,需要设计本应用所要提供的功能,以及每一个功能的大体实现逻辑。虽然我们通过使用大模型来简化了业务逻辑的拆解,但是越清晰、深入的业务逻辑理解往往也能带来更好的 Prompt 效果。同样,对于个体开发者或小型开发团队来说,首先要确定应用的核心功能,然后延展设计核心功能的上下游功能;例如,我们想打造一款个人知识库助手,那么核心功能就是结合个人知识库内容进行问题的回答,那么其上游功能的用户上传知识库、下游功能的用户手动纠正模型回答就是我们也必须要设计实现的子功能。
3.搭建整体架构。目前,绝大部分大模型应用都是采用的特定数据库 + Prompt + 通用大模型的架构。我们需要针对我们所设计的功能,搭建项目的整体架构,实现从用户输入到应用输出的全流程贯通。一般来说,我们推荐基于 LangChain 框架进行开发。LangChain 提供了 Chain、Tool 等架构的实现,我们可以基于 LangChain 进行个性化定制,实现从用户输入到数据库再到大模型最后输出的整体架构连接。
4.搭建数据库。个性化大模型应用需要有个性化数据库进行支撑。由于大模型应用需要进行向量语义检索,一般使用诸如 Chroma 的向量数据库。在该步骤中,我们需要收集数据并进行预处理,再向量化存储到数据库中。数据预处理一般包括从多种格式向纯文本的转化,例如 PDF、MarkDown、HTML、音视频等,以及对错误数据、异常数据、脏数据进行清洗。完成预处理后,需要进行切片、向量化构建出个性化数据库。
5.Prompt Engineering。优质的 Prompt 对大模型能力具有极大影响,我们需要逐步迭代构建优质的 Prompt Engineering 来提升应用性能。在该步中,我们首先应该明确 Prompt 设计的一般原则及技巧,构建出一个来源于实际业务的小型验证集,基于小型验证集设计满足基本要求、具备基本能力的 Prompt。
6.验证迭代。验证迭代在大模型开发中是极其重要的一步,一般指通过不断发现 Bad Case 并针对性改进 Prompt Engineering 来提升系统效果、应对边界情况。在完成上一步的初始化 Prompt 设计后,我们应该进行实际业务测试,探讨边界情况,找到 Bad Case,并针对性分析 Prompt 存在的问题,从而不断迭代优化,直到达到一个较为稳定、可以基本实现目标的 Prompt 版本。
7.前后端搭建。完成 Prompt Engineering 及其迭代优化之后,我们就完成了应用的核心功能,可以充分发挥大语言模型的强大能力。接下来我们需要搭建前后端,设计产品页面,让我们的应用能够上线成为产品。前后端开发是非常经典且成熟的领域,此处就不再赘述,我们采用 Gradio 和 Streamlit,可以帮助个体开发者迅速搭建可视化页面实现 Demo 上线。
8.体验优化。在完成前后端搭建之后,应用就可以上线体验了。接下来就需要进行长期的用户体验跟踪,记录 Bad Case 与用户负反馈,再针对性进行优化即可。