“Datawhale AI 夏令营”第四期·大模型应用开发笔记

        本假期参与了Datawhale AI 夏令营第四期,主要是对大模型应用开发方向感兴趣。希望在夏令营可以学到更多知识,认识更多小伙伴。

        跑完Task1,感觉没有想象中那么难,对新手很友好!!!

个人学习计划

序号

日期

今日目标

今日学习资料 & 学习计划

Day1

8月9日

跑通Baseline并学习大模型开发基础

动手学大模型应用全栈开发

Day2

8月10日

继续学习大模型开发基础并完成认证

动手学大模型应用全栈开发

大模型开发工程师考试

Day3

8月12日

完成组队

提交作品规则 & Task1案例:智能编程助手

Day4

8月13日

打卡task2

案例直播分享

与队友探讨项目

Task2:头脑风暴会Task2:线上Hackathon必知必会

Day5

8月14日

RAG技术原理与实践

Task3:源大模型RAG实战

Day6

8月15日

案例分析

Task3案例:AI科研助手

Day7

8月18日

模型微调技术原理与实践

Task4:源大模型微调实战-知识点文档

···

···

···

···

Task1

Task1.1 动手学大模型应用全栈开发

学习内容提要:通过学习大模型部署、大模型检索增强生成(Retrieval Augmented Generation, RAG)实战、大模型微调实战,掌握大模型应用全栈开发.

Step0:开通阿里云PAI-DSW试用

链接:阿里云免费试用 - 阿里云

  • 开通免费试用

  • 魔搭社区进行授权

    链接:https://www.modelscope.cn/my/mynotebook/authorization

    如果这一步授权失败,可跳过此步骤,继续往下进行

  • 新用户需要先注册 & 绑定阿里云账号

  • 新用户还需要完成阿里云账号的实名认证,直接完成即可

  • 新用户还需要完成阿里云账号的实名认证,直接完成即可

Step1:在魔搭社区创建PAI实例!(点击即可跳转)

链接:https://www.modelscope.cn/my/mynotebook/authorization

Step2:Demo搭建!

第一步:文件下载

点击终端,然后输入如下命令,回车运行!

 
 

git lfs install git clone https://www.modelscope.cn/datasets/Datawhale/AICamp_yuan_baseline.git

第二步:环境安装

点击终端,然后输入如下命令,回车运行!

 
 

pip install streamlit==1.24.0

等待依赖安装成功!

第三步:启动Demo

点击终端,然后输入如下命令,回车运行!

 
 

streamlit run AICamp_yuan_baseline/Task\ 1:零基础玩转源大模型/web_demo_2b.py --server.address 127.0.0.1 --server.port 6006

Step3:对话体验!

点击链接,跳转到浏览器新页面!

注意⚠️:这里一定要保存效果截图去打卡哦!!一定要保存效果截图去打卡哦!!一定要保存效果截图去打卡哦!

显示Demo名称,后台正在运行中!

等待后台完成模型下载和加载!

弹出对话框,现在开始对话吧!

下面,让你的编程助手简单写个代码吧!输入后回车即可运行!

参考Prompt:

给我一个python打印helloword的代码

改成c++的

关闭PAI实例!!!!(点击即可跳转)

链接:https://www.modelscope.cn/my/mynotebook/authorization

Task2

一些项目的idea

1.文档处理类应用

参考需求表

(可根据自身队伍能力进行删减和增加预期功能)

项目背景

在信息时代,文档处理是日常工作和学术研究中不可或缺的一部分。然而,传统的文档处理方式往往效率低下,且难以满足个性化和智能化的需求。AI技术的引入,特别是Yuan2.0-2B-Mars大模型,为文档处理提供了新的解决方案。

预期产品功能

  1. 多格式文档读取:支持PDF、DOC、MD、TEX等多种文档格式的读取。

  2. 信息提取:能够从文档中提取关键信息,如文本、图表、公式等。

  3. 信息再处理:根据用户需求对提取的信息进行进一步的处理,如格式化、摘要生成等。

  4. 自然语言与写作语法转换:对于MD、TEX文件,支持自然语言和写作语法的相互转换,方便用户编辑和使用。

参考技术方案

  • 前端技术:使用Gradio快速开发,提供动态和响应式的用户界面。

  • 后端技术:采用Python 直接开发接口,处理文档读取、信息提取和转换等逻辑。

  • 文档解析引擎:开发或集成强大的文档解析引擎,以支持多种格式的文档读取。

  • 信息提取算法:利用NLP技术提取文档中的关键信息。

  • 自然语言处理(NLP):使用Yuan2.0-2B-Mars模型的NLP能力进行自然语言理解和生成。

  • 机器学习和深度学习:应用机器学习算法优化信息提取和处理的准确性。

预期运行效果

  • 高兼容性:能够读取和处理多种格式的文档。

  • 高准确性:提取的信息准确无误,满足用户需求。

  • 高效率:快速完成文档的读取和信息提取。

  • 用户友好:提供直观的用户界面,简化操作流程。

预期应用价值

  1. 提高工作效率:帮助用户快速处理大量文档,节省时间。

  2. 促进知识管理:通过信息提取和再处理,更好地管理和利用知识。

  3. 支持学术研究:为研究人员提供文档处理的辅助工具,加速研究进程。

  4. 个性化服务:根据用户的个性化需求提供定制化的文档处理服务。

2.领域知识类应用

参考需求表

(可根据自身队伍能力进行删减和增加预期功能)

项目背景

当前,随着人工智能技术的快速发展,越来越多的行业开始寻求AI解决方案以提高效率和准确性。特别是在法律、医学、金融和教育领域,专业知识的深度和广度要求极高,传统的搜索引擎和问答系统往往难以满足专业人士的需求。Yuan2.0-2B-Mars大模型提供了强大的语言理解和生成能力,为开发领域知识类AI原生应用提供了基础。

预期产品功能

  1. 领域专精问答:系统能够理解并回答 法律/医学/金融/初高中学科 等专业领域的问题。

  2. 内容完整性与逻辑自洽:确保回答内容不仅准确,而且完整、逻辑清晰。

  3. 参考文献引用:为每个回答提供相关的参考文献篇名和链接,增加回答的权威性。

  4. 问题领域判断:自动识别问题是否属于专精领域,并据此调整回答策略。

参考技术方案

  • 前端技术:使用Gradio快速开发,提供动态和响应式的用户界面。

  • 后端技术:采用Python 直接开发接口,处理文档读取、信息提取和转换等逻辑。

  • 自然语言处理(NLP):利用Yuan2.0-2B-Mars模型的NLP能力进行语言理解与生成。

  • 知识图谱构建:构建各专业领域的知识图谱,以支持深度问答。

  • 机器学习:通过机器学习算法不断优化问答模型,提高准确性和响应速度。

  • API集成:集成外部数据库和API,如法律数据库、医学研究论文库等,以提供最新的领域信息。

  • 视情况微调

预期运行效果

  • 高准确率:确保在专业领域内提供高准确率的答案。

  • 快速响应:快速处理用户查询,提供即时反馈。

  • 用户友好:界面简洁,易于专业人士使用。

  • 持续学习:系统能够根据用户反馈和新数据不断学习和进化。

预期应用价值

  1. 提高决策效率:专业人士可以通过系统快速获取准确信息,辅助决策。

  2. 教育辅助:为学生和教师提供即时的学科知识查询服务,增强学习体验。

  3. 知识普及:帮助非专业人士理解复杂概念,促进知识的普及。

  4. 研究支持:为研究人员提供深入的文献资料,加速研究进程。

3.数据分析类应用

参考需求表

(可根据自身队伍能力进行删减和增加预期功能)

项目背景

在数据驱动的商业环境中,数据分析已成为决策过程中的关键步骤。企业和研究人员需要从大量数据中提取有价值的信息,进行深入分析以指导决策。Yuan2.0-2B-Mars大模型提供了处理和分析数据的能力,使得开发一个高效的数据分析应用成为可能。

预期产品功能

  1. 多格式数据读取:支持读取XLS、CSV、JSON、SQL、HDF5等多种数据文件。

  2. 数据对象提取:从各种数据文件中提取数据对象,如表格、记录、数组等。

  3. 数据归纳与检索:对提取的数据进行归纳、分类和检索,以便于分析和使用。

  4. 数据计算与分析:根据需求对数据进行计算和分析,提供统计摘要、趋势预测等。

  5. 图表输出:对于CSV、XLS数据,支持生成图表,直观展示数据。

  6. 数据格式转换:支持将文本格式信息转化为JSON格式数据,以便于数据交换和处理。

参考技术方案

  • 前端技术:使用Gradio快速开发,提供动态和响应式的用户界面。

  • 后端技术:采用Python 直接开发接口,处理文档读取、信息提取和转换等逻辑。

  • 数据解析引擎:开发或集成数据解析引擎,以支持多种格式的数据文件读取。

  • 数据仓库技术:使用数据仓库技术存储和管理大量数据。

  • 数据分析工具:集成数据分析工具,如统计分析、机器学习模型等。

  • 可视化技术:应用可视化技术生成图表,帮助用户直观理解数据。

  • API集成:集成外部API,如数据库查询API、数据转换API等。

预期运行效果

  • 高兼容性:能够读取和处理多种格式的数据文件。

  • 高效率:快速完成数据的读取、提取和分析。

  • 高准确性:确保数据分析结果的准确性和可靠性。

  • 用户友好:提供直观的用户界面和交互方式,简化数据分析流程。

预期应用价值

  1. 提高决策质量:通过深入的数据分析帮助用户做出更明智的决策。

  2. 优化业务流程:分析业务数据,发现流程中的瓶颈和改进点。

  3. 增强竞争力:利用数据分析结果优化产品和服务,提高市场竞争力。

  4. 促进科研发展:为科研人员提供强大的数据分析工具,加速研究进程。

4.编程助手类应用

参考需求表

(可根据自身队伍能力进行删减和增加预期功能)

项目背景

编程是一项需要高度专业知识和技能的工作。随着技术的发展,编程语言和框架不断更新,开发者需要一个能够提供即时帮助和指导的工具。Yuan2.0-2B-Mars大模型具备处理和生成代码的能力,为开发编程助手类应用提供了强大的基础。

预期产品功能

  1. 多语言支持:支持Python、C/C++、Java、Javascript等多种编程语言的代码输出。

  2. 代码解释:为输入的代码提供详细的解释和文档,帮助理解代码逻辑和功能。

  3. 逐步代码输出:根据用户的学习进度和需求,逐步展示代码,便于学习和理解。

  4. 代码编辑器:内置代码编辑器,支持代码编写、格式化和实时预览。(可直接作为vs code 插件开发)

  5. 编译器集成:集成编译器,支持代码的编译和运行,即时反馈结果。

参考技术方案

  • 前端技术:使用Gradio快速开发,提供动态和响应式的用户界面。

  • 后端技术:采用Python 直接开发接口,处理文档读取、信息提取和转换等逻辑。

  • 代码生成算法:利用Yuan2.0-2B-Mars模型生成特定编程语言的代码。

  • 代码解释引擎:开发代码解释引擎,提供代码的详细解释和文档。

  • 代码编辑器技术:集成或开发代码编辑器,支持语法高亮、代码补全等功能。(可直接作为vs code 插件开发)

  • 编译器接口:与现有编译器进行接口集成,实现代码的编译和运行。

  • 机器学习和深度学习:应用机器学习算法优化代码生成和解释的准确性。

预期运行效果

  • 高兼容性:支持多种编程语言,满足不同开发者的需求。

  • 高准确性:代码解释准确,帮助用户深入理解代码。

  • 高效率:内置编辑器和编译器,提高编程效率。

  • 用户友好:提供简洁直观的用户界面,简化编程流程。

预期应用价值

  1. 提升编程效率:帮助开发者快速编写和理解代码,提升编程效率。

  2. 降低学习门槛:通过逐步代码输出和详细解释,降低编程语言的学习门槛。

  3. 促进技术交流:提供代码共享和讨论的平台,促进技术交流和知识传播。

  4. 支持教育和培训:作为编程教育和培训的工具,帮助学生和新手快速掌握编程技能。

开发&执行路径

常见的AI应用开发经验(Agent可以理解为一种AI应用方向)

做事、做开发的经验路径

Task3 源大模型RAG实战

1.引言

1.1 什么是RAG

        在上一节,我们成功搭建了一个源大模型智能对话Demo,亲身体验到了大模型出色的能力。然而,在实际业务场景中,通用的基础大模型可能存在无法满足我们需求的情况,主要有以下几方面原因:

  • 知识局限性:大模型的知识来源于训练数据,而这些数据主要来自于互联网上已经公开的资源,对于一些实时性的或者非公开的,由于大模型没有获取到相关数据,这部分知识也就无法被掌握。

  • 数据安全性:为了使得大模型能够具备相应的知识,就需要将数据纳入到训练集进行训练。然而,对于企业来说,数据的安全性至关重要,任何形式的数据泄露都可能对企业构成致命的威胁。

  • 大模型幻觉:由于大模型是基于概率统计进行构建的,其输出本质上是一系列数值运算。因此,有时会出现模型“一本正经地胡说八道”的情况,尤其是在大模型不具备的知识或不擅长的场景中。

        为了上述这些问题,研究人员提出了检索增强生成(Retrieval Augmented Generation, RAG)的方法。这种方法通过引入外部知识,使大模型能够生成准确且符合上下文的答案,同时能够减少模型幻觉的出现。

        由于RAG简单有效,它已经成为主流的大模型应用方案之一。

        如下图所示,RAG通常包括以下三个基本步骤:

  • 索引:将文档库分割成较短的 Chunk,即文本块或文档片段,然后构建成向量索引。

  • 检索:计算问题和 Chunks 的相似度,检索出若干个相关的 Chunk。

  • 生成:将检索到的Chunks作为背景信息,生成问题的回答。

1.2 一个完整的RAG链路

从上图可以看到,线上接收到用户query后,RAG会先进行检索,然后将检索到的 Chunksquery 一并输入到大模型,进而回答用户的问题。

为了完成检索,需要离线将文档(ppt、word、pdf等)经过解析、切割甚至OCR转写,然后进行向量化存入数据库中。

接下来,我们将分别介绍离线计算和在线计算流程。

1.2.1 离线计算

首先,知识库中包含了多种类型的文件,如pdf、word、ppt等,这些 文档(Documents)需要提前被解析,然后切割成若干个较短的 Chunk,并且进行清洗和去重。

由于知识库中知识的数量和质量决定了RAG的效果,因此这是非常关键且必不可少的环节。

然后,我们会将知识库中的所有 Chunk 都转成向量,这一步也称为 向量化(Vectorization)或者 索引(Indexing)。

向量化 需要事先构建一个 向量模型(Embedding Model),它的作用就是将一段 Chunk 转成 向量(Embedding)。如下图所示:

一个好的向量模型,会使得具有相同语义的文本的向量表示在语义空间中的距离会比较近,而语义不同的文本在语义空间中的距离会比较远。

由于知识库中的所有 Chunk 都需要进行 向量化,这会使得计算量非常大,因此这一过程通常是离线完成的。

随着新知识的不断存储,向量的数量也会不断增加。这就需要将这些向量存储到 数据库 (DataBase)中进行管理,例如 Milvus 中。

至此,离线计算就完成了。

1.2.2 在线计算

在实际使用RAG系统时,当给定一条用户 查询(Query),需要先从知识库中找到所需的知识,这一步称为 检索(Retrieval)。

检索 过程中,用户查询首先会经过向量模型得到相应的向量,然后与 数据库 中所有 Chunk 的向量计算相似度,最简单的例如 余弦相似度,然后得到最相近的一系列 Chunk

由于向量相似度的计算过程需要一定的时间,尤其是 数据库 非常大的时候。

这时,可以在检索之前进行 召回(Recall),即从 数据库 中快速获得大量大概率相关的 Chunk,然后只有这些 Chunk 会参与计算向量相似度。这样,计算的复杂度就从整个知识库降到了非常低。

召回 步骤不要求非常高的准确性,因此通常采用简单的基于字符串的匹配算法。由于这些算法不需要任何模型,速度会非常快,常用的算法有 TF-IDFBM25 等。

另外,也有很多工作致力于实现更快的 向量检索 ,例如 faissannoy

另一方面,人们发现,随着知识库的增大,除了检索的速度变慢外,检索的效果也会出现退化。

这是由于 向量模型 能力有限,而随着知识库的增大,已经超出了其容量,因此准确性就会下降。在这种情况下,相似度最高的结果可能并不是最优的。

为了解决这一问题,提升RAG效果,研究者提出增加一个二阶段检索——重排 (Rerank),即利用 重排模型(Reranker),使得越相似的结果排名更靠前。这样就能实现准确率稳定增长,即数据越多,效果越好(如上图中紫线所示)。

通常,为了与 重排 进行区分,一阶段检索有时也被称为 精排 。而在一些更复杂的系统中,在 召回精排 之间还会添加一个 粗排 步骤,这里不再展开,感兴趣的同学可以自行搜索。

综上所述,在整个 检索 过程中,计算量的顺序是 召回 > 精排 > 重排,而检索效果的顺序则是 召回 < 精排 < 重排

当这一复杂的 检索 过程完成后,我们就会得到排好序的一系列 检索文档(Retrieval Documents)。

然后我们会从其中挑选最相似的 k 个结果,将它们和用户查询拼接成prompt的形式,输入到大模型。

最后,大型模型就能够依据所提供的知识来生成回复,从而更有效地解答用户的问题。

至此,一个完整的RAG链路就构建完毕了。

1.2 开源RAG框架

目前,开源社区中已经涌现出了众多RAG框架,例如:

  • TinyRAG:DataWhale成员宋志学精心打造的纯手工搭建RAG框架。

  • LlamaIndex:一个用于构建大语言模型应用程序的数据框架,包括数据摄取、数据索引和查询引擎等功能。

  • LangChain:一个专为开发大语言模型应用程序而设计的框架,提供了构建所需的模块和工具。

  • QAnything:网易有道开发的本地知识库问答系统,支持任意格式文件或数据库。

  • RAGFlow:InfiniFlow开发的基于深度文档理解的RAG引擎。

  • ···

2 源2.0-2B RAG实战

        1.首先创建一个PAI实例。

        2.环境准备

        进入终端

        运行下面代码,下载文件,并将Task 3:源大模型RAG实战中内容拷贝到当前目录。

git lfs install git clone https://www.modelscope.cn/datasets/Datawhale/AICamp_yuan_baseline.git cp AICamp_yuan_baseline/Task\ 3:源大模型RAG实战/* .

        双击打开Task 3:源大模型RAG实战.ipynb,然后运行所有单元格。

        通过下面的命令,我们可以看到ModelScope已经提供了所需要的大部分依赖,如 torchtransformers 等。

# 查看已安装依赖
pip list

        但是为了进行模型微调以及Demo搭建,还需要在环境中安装streamlit

# 安装 streamlit pip install streamlit==1.24.0

        安装成功后,我们的环境就准备好了。

2.2 模型下载

在RAG实战中,我们需要构建一个向量模型。

向量模型通常采用BERT架构,它是一个Transformer Encoder。

输入向量模型前,首先会在文本的最前面额外加一个 [CLS] token,然后将该token最后一层的隐藏层向量作为文本的表示。如下图所示:

(在基于BERT的文本分类中,这个表示会送入分类器,得到标签。)

目前,开源的基于BERT架构的向量模型有如下:

  • BGE Embedding:智源通用embedding(BAAI general embedding, BGE)

  • BCEmbedding:网易有道训练的Bilingual and Crosslingual Embedding

  • jina-embeddings:Jina AI训练的text embedding

  • M3E:MokaAI训练的 Massive Mixed Embedding

  • ···

除了BERT架构之外,还有基于LLM的向量模型有如下:

其次,还有API:

在本次学习中,我们选用基于BERT架构的向量模型 bge-small-zh-v1.5,它是一个4层的BERT模型,最大输入长度512,输出的向量维度也为512。

bge-small-zh-v1.5 支持通过多个平台进行下载,因为我们的机器就在魔搭,所以这里我们直接选择通过魔搭进行下载。

模型在魔搭平台的地址为 AI-ModelScope/bge-small-zh-v1.5

单元格2.2 模型下载 会自动执行向量模型和源大模型下载。

3 课后作业

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值