一、大语言模型概念
1.大语言模型(LLM,Large Language Model),也称大型语言模型,是一种旨在理解和生成人类语言的人工智能模型。
通俗一点的意思就是参数多,模型大
2.大语言模型分类
2.1 闭源大模型
2.2 开源大模型
二、大模型的能力与特点
大模型最突出的能力是其涌现能力
,包括上下文学习、指令遵循、逐步推理
三个最重要的能力。
三、检索增强生成 RAG 和LangChain简介
为了解决大型语言模型在处理文本时面临的
信息偏差/幻觉,知识更新滞后,内容不可追溯,专业领域知识欠缺,推理能力限制,应用场景适应性受限,长文本处理能力较弱
等文通,研究人员提出了一种新的模型架构:检索增强生成(RAG, Retrieval-Augmented Generation)。该架构巧妙地整合了从庞大知识库中检索到的相关信息,并以此为基础,指导大型语言模型生成更为精准的答案。
尽管大型语言模型的调用相对简单,但要创建完整的应用程序,仍然需要大量的定制开发工作,包括 API 集成、互动逻辑、数据存储等等。
为了解决这个问题,从 2022 年开始,许多机构和个人相继推出了多个开源项目,旨在帮助开发者们快速构建基于大型语言模型的端到端应用程序或工作流程。其中一个备受关注的项目就是LangChain 框架
。
1.RAG的工作流程
![](https://img-blog.csdnimg.cn/direct/93d02c6fbeec40d89d803a67c59c3893.png)
- 数据处理阶段
- 对原始数据进行清洗和处理。
- 将处理后的数据转化为检索模型可以使用的格式。
- 将处理后的数据存储在对应的数据库中。
- 检索阶段
- 将用户的问题输入到检索系统中,从数据库中检索相关信息。
- 增强阶段
- 对检索到的信息进行处理和增强,以便生成模型可以更好地理解和使用。
- 生成阶段
- 将增强后的信息输入到生成模型中,生成模型根据这些信息生成答案。
2.LangChain核心组件
LangChain图片来源 主要由以下 6 个核心组件组成:
- 模型输入/输出(Model I/O):与语言模型交互的接口
- 数据连接(Data connection):与特定应用程序的数据进行交互的接口
- 链(Chains):将组件组合实现端到端应用。比如后续我们会将搭建
检索问答链
来完成检索问答。 - 记忆(Memory):用于链的多次运行之间持久化应用程序状态;
- 代理(Agents):扩展模型的推理能力。用于复杂的应用的调用序列;
- 回调(Callbacks):扩展模型的推理能力。用于复杂的应用的调用序列
四、开发 LLM 应用的整体流程
在大模型开发中,我们一般不会去大幅度改动模型,而是将大模型作为一个调用工具,通过
Prompt Engineering、数据工程、业务逻辑分解
等手段来充分发挥大模型能力,适配应用任务,而不会将精力聚焦在优化模型本身上。
1.开发思路
- 传统的 AI 开发:首先需要将非常复杂的业务逻辑依次拆解,对于每一个子业务构造训练数据与验证数据,对于每一个子业务训练优化模型,最后形成完整的模型链路来解决整个业务逻辑。
- 大模型开发:用
Prompt Engineering
来替代子模型的训练调优,通过Prompt 链路
组合来实现业务逻辑,用一个通用大模型 + 若干业务 Prompt
来解决任务,从而将传统的模型训练调优转变成了更简单、轻松、低成本的Prompt 设计调优
。
2.评估思路
- 传统 AI 开发:需要首先构造训练集、测试集、验证集,通过在训练集上训练模型、在测试集上调优模型、在验证集上最终验证模型效果来实现性能的评估。
- 大模型开发:流程更为灵活和敏捷。从实际业务需求出发构造
小批量验证集
,设计合理 Prompt 来满足验证集效果。然后,将不断从业务逻辑中收集当下 Prompt 的Bad Case
,并将 Bad Case 加入到验证集中,针对性优化 Prompt
,最后实现较好的泛化效果。
3.大模型开发流程
包括
确定目标,设计功能,搭建整体框架,搭建数据库,Prompt Engineering,验证迭代,前后端搭建,体验优化
等步骤。
4. 搭建 LLM 项目的流程简析(以知识库助手为例)
步骤一:项目规划与需求分析
1.项目目标:基于个人知识库的问答助手
2.核心功能
- 将爬取并总结的 MarkDown 文件及用户上传文档向量化,并创建知识库;
- 选择知识库,检索用户提问的知识片段;
- 提供知识片段与提问,获取大模型回答;
- 流式回复;
- 历史对话记录
3.确定技术架构和工具
- 框架:LangChain
- Embedding 模型:GPT、智谱、M3E
- 数据库:Chroma
- 大模型:GPT、讯飞星火、文心一言、GLM 等
- 前后端:Gradio 和 Streamlit
步骤二:数据准备与向量知识库构建
本项目实现原理如下图所示(图片来源):加载本地文档 -> 读取文本 -> 文本分割 -> 文本向量化 -> question 向量化 -> 在文本向量中匹配出与问句向量最相似的 top k 个 -> 匹配出的文本作为上下文和问题一起添加到 Prompt 中 -> 提交给 LLM 生成回答。
1.收集和整理用户提供的文档
用户常用文档格式有 PDF、TXT、MD 等,首先,我们可以使用 LangChain 的文档加载器模块方便地加载用户提供的文档,或者使用一些成熟的 Python 包进行读取。
由于目前大模型使用 token 的限制,我们需要对读取的文本进行切分,将较长的文本切分为较小的文本,这时一段文本就是一个单位的知识。
2.将文档词向量化
使用文本嵌入(Embeddings)技术
对分割后的文档进行向量化,使语义相似的文本片段具有接近的向量表示。然后,存入向量数据库,完成 索引(index)
的创建。
利用向量数据库对各文档片段进行索引,可以实现快速检索。
3.将向量化后的文档导入 Chroma 知识库,建立知识库索引
Langchain 集成了超过 30 个不同的向量数据库。Chroma 数据库轻量级且数据存储在内存中,这使得它非常容易启动和开始使用。
将用户知识库内容经过 Embedding 存入向量数据库,然后用户每一次提问也会经过 Embedding,利用向量相关性算法(例如余弦算法)找到最匹配的几个知识库片段,将这些知识库片段作为上下文,与用户问题一起作为 Prompt 提交给 LLM 回答。
步骤三:大模型集成与 API 连接
- 集成 GPT、星火、文心、GLM 等大模型,配置 API 连接。
- 编写代码,实现与大模型 API 的交互,以便获取问题回答。
步骤四:核心功能实现
- 构建 Prompt Engineering,实现大模型回答功能,根据用户提问和知识库内容生成回答。
- 实现流式回复,允许用户进行多轮对话。
- 添加历史对话记录功能,保存用户与助手的交互历史。
步骤五:核心功能迭代优化
- 进行验证评估,收集 Bad Case。
- 根据 Bad Case 迭代优化核心功能实现。
步骤六:前端与用户交互界面开发
- 使用 Gradio 和 Streamlit 搭建前端界面。
- 实现用户上传文档、创建知识库的功能。
- 设计用户界面,包括问题输入、知识库选择、历史记录展示等。
步骤七:部署测试与上线
- 部署问答助手到服务器或云平台,确保可在互联网上访问。
- 进行生产环境测试,确保系统稳定。
- 上线并向用户发布。
步骤八:维护与持续改进
- 监测系统性能和用户反馈,及时处理问题。
- 定期更新知识库,添加新的文档和信息。
- 收集用户需求,进行系统改进和功能扩展。
整个流程将确保项目从规划、开发、测试到上线和维护都能够顺利进行,为用户提供高质量的基于个人知识库的问答助手。