AI 大模型系统实战

AI 大模型是什么?

维基百科对基础模型的定义是这样的,基础模型是一种大型机器学习模型,通常在大量数据上进行大规模训练(通过自监督学习或半监督学习),以使它可以适应各类下游任务。因此,它需要兼顾参数量大(大型模型),训练数据量大(大量数据大规模训练)和迁移学习能力强(适应多种下游任务)几点才能够叫做基础模型,而不只是参数量大,就能够叫做基础模型,我们在甄别时需要特别注意。

另一个重要的定义就是 AIGC,目前工业界普遍将 AIGC(Artificial Intelligence Generated Content)称为生成式人工智能。

所谓“涌现”,指的是在大模型领域,当模型突破某个规模时,性能显著提升,表现出让人惊艳、意想不到的能力。

所谓思维链(Chain-of-thought,CoT)指的是通过一系列有逻辑关系的思考步骤,形成一个完整的思考,进而得出答案的过程。

大模型的“大”是一个相对概念,是一个持续的过程。更大规模的训练数据需要模型具备更强的记忆、理解和表达能力。而为了拥有更强的记忆、理解和表达能力,模型则需要更大的参数量,也就是更大的模型。

生成式 AI 大模型的兴起

不仅仅是由于模型规模变大,而是多个因素相互作用形成的。

首先,在近年的技术发展中,大型语言模型,特别是以 GPT 3.0 为代表的大模型,展现出了出色的涌现、思维链和上下文学习的能力,不再停留在“人工智障”的阶段,极大地提升了自然语言理解和生成的能力,然而,这只是其中的一个必要条件。

第二个必要条件是跨模态建模能力的发展。这让同一个模型能像人类一样同时理解和处理 Excel、PPT、PDF、图像和视频等多种形式的数据。加持了这样的能力,算法生成的信息量从此发生质变,生成式人工智能发挥作用的舞台就更多了。

第三个必要条件是生成式模型的交互方式。生成式 AI 产品巧妙地利用了人类的惰性,通过新的交互方式,大大提高了产品的渗透率。这使得人们不断地使用 ChatGPT,并逐渐产生了依赖。这也成为了当前 AI 大模型产业,迅速发展的关键点。

然而,所有这些前提条件的实现,都依赖于存储和计算能力的持续发展,“孩子”身体的发育,使模型能够容纳和记忆更大规模的数据。不过,以上只是生成式 AI 大模型兴起的一些必要条件,但其全面走红还涉及到资本和产业发展的需求等多个因素的综合效果。

任务规划(Planning)

这种方法可以让 LLM 对自己的想法进行调整和反思,最经典的方法是 ReAct,他有三个概念:

Thought:表示让大语言模型思考,目前需要做哪些行为,行为的对象是谁,它要采取的行为是不是合理的。

Act:也就是针对目标对象,执行具体的动作,比如调用 API 这样的动作,然后收集环境反馈的信息。

Obs:它代表把外界观察的反馈信息,同步给大语言模型,协助它做出进一步的分析或者决策。

我们可以用这种方法来启发 LLM 工作,比如让它帮你制定工作方案,并持续向它提问,例如:你的执行步骤有哪些潜在隐患和风险、有哪些方法可以降低风险、能否帮助我制定一些安全风险预案等等问题,以确保它生成的内容安全可靠。在这个过程中,你要尽量唤醒 LLM 的相关知识,生成合理的计划,此时思维链技术(CoT)就非常重要了,它可以让 LLM 将任务分解为可解释的步骤。

记忆唤醒(Memory)

无论是在制定计划、使用工具或执行任务的过程中,LLM 都需要外部信息的帮助来辅助进行思考。为了更好地让 LLM 拥有记忆力,我们不妨先参考一下人类是如何记忆的。在神经科学研究中,人类的记忆可分为感觉记忆、短期记忆和长期记忆三种类型。

感觉记忆,是人体接收到外部信号以后,瞬间保留的视觉、听觉、触觉的记忆片段,在 AI 系统中类似于高维嵌入表示,也就是我们常说的 “Embedding”。

短期记忆,是你当前意识中的信息,在 LLM 中类似于提示词(Prompt)中的所有信息。

长期记忆,包含了你能回忆的所有信息,在 LLM 中类似于外部向量存储。

驾驭工具(Tools)

要让 LLM 学会使用工具,首先需要让它认识工具,比如 TALM、Toolformer 和 Gorilla 等方法让 LLM 学会理解 API 的调用注释,这是 Plugin 和 Function 等功能的基础。下图展示了 Gorilla 教会 LLM 使用 API 的全过程。

首先,我们使用大量 API 调用代码和文档作为语料,训练一个可以理解 API 的大语言模型。

然后,AI 系统还将对这些 API 进行向量化操作,将它们存储在向量数据库中作为外部记忆。

随后,当用户发起请求时候,AI 系统会从外部记忆中,获取跟请求相关的 API 交给 LLM。

最后,LLM 组合串联这些 API 形成代码,并执行代码,完成 API 的调用,生成执行结果。

链式调用黏合剂(Langchain)

首先,我们来为你的原型系统搭建一个“调度中心”。这个调度中心将帮助大语言模型(LLM)连接到我们之前学到的各种生态组件,如计划组件、记忆组件和工具组件等等。目前最主流的做法是采用链式调用。链式调用可以让你的编码更高效,只需少量代码,就能让用户、LLM 和组件之间进行复杂的互动。

为了让大语言模型能够实现与人类友好的多轮对话,我们需要额外引入两个组件。第一个是 ConversationBufferMemory,它将帮助 LLM 记录我们的对话过程。第二个是 ConversationChain,它会帮我们管理整个会话过程,通过调取 BufferMemory 中的对话信息,让无状态的 LLM 了解我们的对话上下文。同时,ConversationChain 还会通过补充一些“提示语”,确保 LLM 知道它在与人类进行交流。

from langchain.llms import OpenAI
from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory

import os
os.environ["OPENAI_API_KEY"] = '...'

llm = OpenAI(temperature=0)
mem = ConversationBufferMemory()

# Here it is by default set to "AI"
conversation = ConversationChain(llm=llm, verbose=True, memory=mem)

conversation.predict(input="Hi there!")

零代码快速搭建(Flowise)

在学习更高级的用法之前,先给你一个学习加速包,让你“无痛”地进行下面的过程。这个加速包叫做 Flowise,用于零代码搭建 LLM 应用平台。通过使用它,你可以在一分钟内搭建起刚才的应用。

领域知识库(Embedding & 向量检索引擎)

这类模型有两个标准动作。第一是让 LLM 做好考前“冲刺训练”也就是领域微调,它的训练成本较高,我们会在第四章中讲解这个方法。第二是为模型增加外部记忆,在提示词中引入一些领域知识,帮助模型提升回答质量。先使用第二种方法:具体制作步骤是这样的。

对团队的技术文档进行切片,生成语义向量(Embedding),存入向量数据库作为外部记忆。

根据同事所提问题中的内容,检索向量数据库,获取技术文档的内容片段。

把文档片段和同事的问题一并交给大语言模型(LLM),让它理解文档内容,并针对问题形成恰当回答,返回给同事。

接下来,我们继续使用 Flowise 实现这个项目,你只需要依次加入以下组件。

1、Folder with Files 组件,负责将相关知识文档上传。

2、Recursive Character Text Splitter 组件,用来给上传的文档内容做断句切片。

3、OpenAI Embeddings 组件负责将断句后的内容切片映射成高维 Embedding。

4、In-Memory Vector Store 组件用来将 Embedding 存入数据库中,供给 LLM 作为外部记忆。

5、Conversational Retrieval QA Chain  组件则会根据问题,获得外部知识,在 LLM 思考形成回答后返回给用户问题答案。

自主可控 LLM 底座(LocalAI)

OpenAI API 的开源替代方案——LocalAI,它可以将唾手可得的开源 LLM,封装成 OpenAI API 相同的接口形式,为你的应用提供服务。下面我们开始搭建这个底座,首先执行以下指令,部署 LocalAI 的代码:

$ git clone https://github.com/go-skynet/LocalAI
$ cd LocalAI

更高、更快、更强(Llama)

其实你可以使用“更大”的模型来提升效果,比如 Meta 开源的 Llama 系列模型。Llama 是 Meta AI 公司于 2023 年 2 月发布的大型语言模型系列,Llama-2 已经非常接近 GPT-3.5 的水平,而且可以免费商用。

首先,如下面的代码所示,我们去 HuggingFace 下载 Llama-2 最新的 ggml 版本。这里我们使用 7B 通用版本来进行演示。

$ wget -c "https://huggingface.co/TheBloke/Llama-2-7B-chat-GGML/resolve/main/llama-2-7b-chat.ggmlv3.q4_0.bin" ./models

下载了模型之后,我们根据以下指令,启动 LocalAI 来快速测试一下模型,确保模型文件没有问题。

$ docker-compose up -d
$ curl -v  http://localhost:8080/v1/models
{"object":"list","data":[{"id":"llama-2-7b-chat.ggmlv3.q4_0.bin","object":"model"}]}

最后,我们回到 Flowise 的界面,将模型名称修改为 llama-2-7b-chat.ggmlv3.q4_0.bin。再次测试聊天机器人,它是不是变得更加聪明了?如果需要更大的模型,你可以按需下载。Local AI 已经在底层支持了 llama.cpp,所以 ggml 格式的模型基本都可以适配。你还可以尝试常用的量化方法,但要注意你的 GPU 是否支持。

AI 大模型系统的理论知识

通俗一点解释,其实模型可以看作一个函数,它模拟了人类智能的运行方式。在模型训练中,你所做的就是解出这个函数中未知变量的值。接着,我们需要通过特征工程让模型更好地理解训练数据。特征工程的核心是对样本数据的改造,可以将数据映射到更细致的维度,或者映射到更高维度的空间。

如何训练一个大模型

如何在实际工业场景中,通过构建离线数据工程和模型训练系统,使你能够独立地训练模型,并进行在线实时的增量更新。这些步骤是让 AI 系统变得智能的关键。如何进行多机多卡的分布式训练,制造一个真正的大模型。实际应用中,通常只需要对模型进行微调。重点使用强化学习(RLHF)的方法,来微调你的大模型。

如何构建一个工业级的 AI 系统

工业级 AI 大模型系统最鲜明的一个特征,就是针对自己的业务场景,基于数据驱动的业务系统框架去定制大模型。

首先,需要了解 AI 系统的策略建模方法。思路是把业务问题转化为数学问题,然后对这些数学问题进行建模,最终将它们转化为工程问题。在这个过程中,掌握如何根据不同的场景选择合适的模型算法。

其次若希望系统在商业竞争中处于优势地位,就需要有针对性地设计系统模块,结合在线服务的特性来实现算法。这样,系统才可能成为商业竞争中有竞争力的智能体。

最后对于 AIGC 系统而言,为了避免过高的推理开销增加商业成本,模型小型化的方法也必不可少,这能大大降低在线推理的开销。

相关推荐

  1. AI模型学习和实践

    2024-07-10 18:32:04       24 阅读
  2. 部署模型API实战教程

    2024-07-10 18:32:04       43 阅读
  3. AI模型学习

    2024-07-10 18:32:04       21 阅读
  4. AI模型学习

    2024-07-10 18:32:04       27 阅读
  5. AI模型学习

    2024-07-10 18:32:04       26 阅读
  6. AI模型学习

    2024-07-10 18:32:04       22 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 18:32:04       5 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 18:32:04       5 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 18:32:04       4 阅读
  4. Python语言-面向对象

    2024-07-10 18:32:04       6 阅读

热门阅读

  1. 概率基础——矩阵正态分布matrix normal distribution

    2024-07-10 18:32:04       7 阅读
  2. 网络编程:常用网络测试工具

    2024-07-10 18:32:04       11 阅读
  3. 在 React 中使用自定义 Hooks 封装 Service 逻辑

    2024-07-10 18:32:04       11 阅读
  4. 【AI原理解析】—遗传算法(GA)原理

    2024-07-10 18:32:04       10 阅读
  5. 微服务: 初识 Spring Cloud

    2024-07-10 18:32:04       11 阅读
  6. 【C++与python】| splice语法对比列表切片

    2024-07-10 18:32:04       9 阅读
  7. 从IBM ESB升级到RestCloud iPaaS的全面指南

    2024-07-10 18:32:04       11 阅读
  8. css之transform-origin

    2024-07-10 18:32:04       9 阅读
  9. LeetCode题练习与总结:乘积最大子数组--152

    2024-07-10 18:32:04       9 阅读
  10. Kafka发送对象消息

    2024-07-10 18:32:04       10 阅读
  11. 【C++】Google Test(gtest)单元测试

    2024-07-10 18:32:04       10 阅读