大模型开发流程(非常详细)零基础入门到精通,收藏这一篇就够了

523 篇文章 35 订阅
20 篇文章 0 订阅

何为大模型开发

本文内容由datawhale开源LLM开发教程节选点击阅读原文即可跳转学习

  • 我们将开发以大语言模型为功能核心、通过大语言模型的强大理解能力和生成能力、结合特殊的数据或业务逻辑来提供独特功能的应用称为大模型开发

  • 开发大模型相关应用,其技术核心点虽然在大语言模型上,但一般通过调用 API 或开源模型来实现核心的理解与生成,通过 Prompt Enginnering 来实现大语言模型的控制

    在大模型开发中,我们一般不会去大幅度改动模型,而是将大模型作为一个调用工具,通过 Prompt Engineering、数据工程、业务逻辑分解等手段来充分发挥大模型能力,适配应用任务,而不会将精力聚焦在优化模型本身上。因此,作为大模型开发的初学者,我们并不需要深研大模型内部原理,而更需要掌握使用大模型的实践技巧。

  • 大模型开发用 Prompt Engineering 来替代子模型的训练调优,通过 Prompt 链路组合来实现业务逻辑,用一个通用大模型 + 若干业务 Prompt 来解决任务,从而将传统的模型训练调优转变成了更简单、轻松、低成本的 Prompt 设计调优。

评估:

  • 传统 AI 开发需要首先构造训练集、测试集、验证集,通过在训练集上训练模型、在测试集上调优模型、在验证集上最终验证模型效果来实现性能的评估。

  • 大模型开发更敏捷、灵活,我们一般不会在初期显式地确定训练集、验证集,由于不再需要训练子模型,我们不再构造训练集,而是直接从实际业务需求出发构造小批量验证集,设计合理 Prompt 来满足验证集效果。

  • 然后,我们将不断从业务逻辑中收集当下 Prompt 的 Bad Case,并将 Bad Case 加入到验证集中,针对性优化 Prompt,最后实现较好的泛化效果。

大模型开发整体流程

  • 确定目标:即要开发的应用的应用场景、目标人群、核心价值。对于个人小型开发一般都是从构建一个 mvp(最小可行性产品)开始,逐步进行完善和优化。

  • 设计功能:设计本应用所要提供的功能,以及每一个功能的大体实现逻辑。因为越清晰、深入的业务逻辑理解往往也能带来更好的 Prompt 效果。

  • 搭建整体架构:绝大部分大模型应用都是采用的特定数据库+ Prompt + 通用大模型的架构。我们需要针对我们所设计的功能,搭建项目的整体架构,实现从用户输入到应用输出的全流程贯通。

  • 我们可以基于 LangChain 进行个性化定制,实现从用户输入到数据库再到大模型最后输出的整体架构连接。

  • 搭建数据库:个性化大模型应用需要有个性化数据库进行支撑。由于大模型应用需要进行向量语义检索,一般使用诸如 chroma 的向量数据库。在该步骤中,我们需要收集数据并进行预处理,再向量化存储到数据库中。

  • 数据预处理一般包括从多种格式向纯文本的转化,例如 pdf、markdown、html、音视频等,以及对错误数据、异常数据、脏数据进行清洗。完成预处理后,需要进行切片、向量化构建出个性化数据库。

  • Prompt Engineering:我们需要逐步迭代构建优质的 Prompt Engineering 来提升应用性能。在该步中,我们首先应该明确 Prompt 设计的一般原则及技巧,构建出一个来源于实际业务的小型验证集,基于小型验证集设计满足基本要求、具备基本能力的 Prompt。

  • 验证迭代:验证迭代在大模型开发中是极其重要的一步,一般指通过不断发现 Bad Case 并针对性改进 Prompt Engineering 来提升系统效果、应对边界情况。

  • 前后端搭建:至此就完成了应用的核心功能。接下来我们需要搭建前后端,设计产品页面,让我们的应用能够上线成为产品。

    两种快速开发 Demo 的框架:Gradio 和 Streamlit,可以帮助个体开发者迅速搭建可视化页面实现 Demo 上线。

  • 体验优化:在完成前后端搭建之后,应用就可以上线体验了。接下来就需要进行长期的用户体验跟踪,记录 Bad Case 与用户负反馈,再针对性进行优化即可。

流程简析(问答助手为例)

步骤一:项目规划与需求分析

1.项目目标:基于个人知识库的问答助手

2.核心功能

  1. 上传文档、创建知识库;

  2. 选择知识库,检索用户提问的知识片段;

  3. 提供知识片段与提问,获取大模型回答;

  4. 流式回复;

  5. 历史对话记录

3.确定技术架构和工具

  1. LangChain框架

  2. Chroma知识库

  3. 大模型使用 GPT、科大讯飞的星火大模型、文心一言、GLM 等

  4. 前后端使用 Gradio 和 Streamlit。

步骤二:数据准备与向量知识库构建

本项目实现原理如下图所示(图片来源 ),过程包括加载本地文档 -> 读取文本 -> 文本分割 -> 文本向量化 -> question向量化 -> 在文本向量中匹配出与问句向量最相似的 top k个 -> 匹配出的文本作为上下文和问题一起添加到 prompt中 -> 提交给 LLM生成回答。外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 收集和整理用户提供的文档。

用户常用文档格式有 pdf、txt、doc 等,首先使用工具读取文本,通常使用 langchain 的文档加载器模块可以方便的将用户提供的文档加载进来,也可以使用一些 python 比较成熟的包进行读取。

由于目前大模型使用 token 的限制,我们需要对读取的文本进行切分,将较长的文本切分为较小的文本,这时一段文本就是一个单位的知识。

  1. 将文档词向量化

使用文本嵌入(Embeddings)对分割后的文档进行向量化,使语义相似的文本片段具有接近的向量表示。然后,存入向量数据库,这个流程正是创建 索引(index) 的过程。

向量数据库对各文档片段进行索引,支持快速检索。这样,当用户提出问题时,可以先将问题转换为向量,在数据库中快速找到语义最相关的文档片段。然后将这些文档片段与问题一起传递给语言模型,生成回答

  1. 将向量化后的文档导入Chroma知识库,建立知识库索引。

Langchain 集成了超过 30 个不同的向量存储库。我们选择 Chroma 向量库是因为它轻量级且数据存储在内存中,这使得它非常容易启动和开始使用。

将用户知识库内容经过 embedding 存入向量知识库,然后用户每一次提问也会经过 embedding,利用向量相关性算法(例如余弦算法)找到最匹配的几个知识库片段,将这些知识库片段作为上下文,与用户问题一起作为 prompt 提交给 LLM 回答。

步骤三:大模型集成与API连接
  1. 集成GPT、星火、文心、GLM 等大模型,配置 API 连接。

  2. 编写代码,实现与大模型 API 的交互,以便获取问题答案。

步骤四:核心功能实现
  1. 构建 Prompt Engineering,实现大模型回答功能,根据用户提问和知识库内容生成回答。

  2. 实现流式回复,允许用户进行多轮对话。

  3. 添加历史对话记录功能,保存用户与助手的交互历史。

步骤五:核心功能迭代优化
  1. 进行验证评估,收集 Bad Case。

  2. 根据 Bad Case 迭代优化核心功能实现。

步骤六:前端与用户交互界面开发
  1. 使用 Gradio 和 Streamlit 搭建前端界面。

  2. 实现用户上传文档、创建知识库的功能。

  3. 设计用户界面,包括问题输入、知识库选择、历史记录展示等。

步骤七:部署测试与上线
  1. 部署问答助手到服务器或云平台,确保可在互联网上访问。

  2. 进行生产环境测试,确保系统稳定。

  3. 上线并向用户发布。

步骤八:维护与持续改进
  1. 监测系统性能和用户反馈,及时处理问题。

  2. 定期更新知识库,添加新的文档和信息。

  3. 收集用户需求,进行系统改进和功能扩展。

整个流程将确保项目从规划、开发、测试到上线和维护都能够顺利进行,为用户提供高质量的基于个人知识库的问答助手。

项目架构简析(问答助手为例)

1. 整体架构

经过上文分析,本项目为搭建一个基于大模型的个人知识库助手,基于 LangChain 框架搭建,核心技术包括 LLM API 调用、向量数据库、检索问答链等。项目整体架构如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如上,本项目从底向上依次分为 LLM 层、数据层、数据库层、应用层与服务层: ① LLM 层主要基于四种流行 LLM API 进行了 LLM 调用封装,支持用户以统一的入口、方式来访问不同的模型,支持随时进行模型的切换; ② 数据层 主要包括个人知识库的源数据以及 Embedding API,源数据经过 Embedding 处理可以被向量数据库使用; ③ 数据库层 主要为基于个人知识库源数据搭建的向量数据库,在本项目中我们选择了 Chroma; ④ 应用层 为核心功能的最顶层封装,我们基于 LangChain 提供的检索问答链基类进行了进一步封装,从而支持不同模型切换以及便捷实现基于数据库的检索问答; ⑤ 最顶层为服务层,我们分别实现了 Gradio 搭建 Demo 与 FastAPI 组建 API 两种方式来支持本项目的服务访问。

2. 代码结构

本项目的完整代码存放于 project 目录下,实现了项目的全部功能及封装,代码结构如下:

-project       -readme.md 项目说明       -requirements.txt 使用依赖包的版本        -llm LLM调用封装           -self_llm.py 自定义 LLM 基类           -wenxin_llm.py 自定义百度文心 LLM           -spark_llm.py 自定义讯飞星火 LLM           -zhipuai_llm.py 自定义智谱AI LLM           -call_llm.py 将各个 LLM 的原生接口封装在一起           -test.ipynb 使用示例       -embedding embedding调用封装           -zhipuai_embedding.py 自定义智谱AI embedding           -call_embedding.py 调用 embedding 模型        -data 源数据路径       -database 数据库层封装           -create_db.py 处理源数据及初始化数据库封装       -qa_chain 应用层封装           -qa_chain.py 封装检索问答链,返回一个检索问答链对象           -chat_qa_chian.py:封装对话检索链,返回一个带有历史记录的对话检索链对象           -get_vectordb.py 返回向量数据库对象           -model_to_llm.py 调用模型           -test.ipynb 使用示例       -serve 服务层封装           -run_gradio.py 启动 Gradio 界面           -api.py 封装 FastAPI           -run_api.sh 启动 API           -test.ipynb 使用示例   

3. 项目逻辑

  1. 用户:可以通过 run_gradio 或者 run_api 启动整个服务;

  2. 服务层调用 qa_chain.py 或 chat_qa_chain 实例化对话检索链对象,实现全部核心功能;

  3. 服务层和应用层都可以调用、切换 prompt_template.py 中的 prompt 模板来实现 prompt 的迭代;

  4. 也可以直接调用 call_llm 中的 get_completion 函数来实现不使用数据库的 LLM;

  5. 应用层调用已存在的数据库和 llm 中的自定义 LLM 来构建检索链;

  6. 如果数据库不存在,应用层调用 create_db.py 创建数据库,该脚本可以使用 openai embedding 也可以使用 embedding.py 中的自定义 embedding

4. 各层简析

4.1 LLM 层

LLM 层主要功能为将国内外四种知名 LLM API(OpenAI-ChatGPT、百度文心、讯飞星火、智谱GLM)进行封装,隐藏不同 API 的调用差异,实现在同一个对象或函数中通过不同的 model 参数来使用不同来源的 LLM。

在 LLM 层,我们首先构建了一个 Self_LLM 基类,基类定义了所有 API 的一些共同参数(如 API_Key,temperature 等);然后我们在该基类基础上继承实现了上述四种 LLM API 的自定义 LLM。同时,我们也将四种 LLM 的原生 API 封装在了统一的 get_completion 函数中。

在上一章,我们已详细介绍了每一种 LLM 的调用方式、封装方式,项目代码中的 LLM 层封装就是上一章讲解的代码实践。

4.2 数据层

数据层主要包括个人知识库的源数据(包括 pdf、txt、md 等)和 Embedding 对象。源数据需要经过 Embedding 处理才能进入向量数据库,我们在数据层自定义了智谱提供的 Embedding API 的封装,支持上层以统一方式调用智谱 Embedding 或 OpenAI Embedding。

在上一章,我们也已详细介绍了 Embdding API 的调用及封装方式。

4.3 数据库层

数据库层主要存放了向量数据库文件。同时,我们在该层实现了源数据处理、创建向量数据库的方法。

我们将在第四章详细介绍向量数据库、源数据处理方法以及构建向量数据库的具体实现。

4.4 应用层

应用层封装了整个项目的全部核心功能。我们基于 LangChain 提供的检索问答链,在 LLM 层、数据库层的基础上,实现了本项目检索问答链的封装。自定义的检索问答链除具备基本的检索问答功能外,也支持通过 model 参数来灵活切换使用的 LLM。我们实现了两个检索问答链,分别是有历史记录的 Chat_QA_Chain 和没有历史记录的 QA_Chain。

我们将在第五章讲解 Prompt 的构造与检索问答链的构建细节。

4.5 服务层

服务层主要是基于应用层的核心功能封装,实现了 Demo 的搭建或 API 的封装。在本项目中,我们分别实现了通过 Gradio 搭建前端界面与 FastAPI 进行封装,支持多样化的项目调用。

AI大模型学习福利

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

2024最新版CSDN大礼包:《AGI大模型学习资源包》免费分享

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

2024最新版CSDN大礼包:《AGI大模型学习资源包》免费分享

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

2024最新版CSDN大礼包:《AGI大模型学习资源包》免费分享

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

2024最新版CSDN大礼包:《AGI大模型学习资源包》免费分享

四、AI大模型商业化落地方案

img

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

2024最新版CSDN大礼包:《AGI大模型学习资源包》免费分享

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值