基于大模型,开发一款AI图片生成器丨“悟道之巅”公开课干实录(5)
作者:互联网
扫描图上二维码或点击原文文末“阅读原文”即可参赛!
如果你错过了上一波深度学习引发的NLP范式转换,不要再错过这一波超大预训练模型的崛起。
近日,“悟道”核心团队推出首档公开课,公开课已全部上线,手把手帮助中国开发者理解并应用“悟道”,从而进一步挖掘“悟道”的潜力,开发自己的智能应用。
通过“悟道”公开课,开发者们将与预训练模型这一人工智能领域最重要的趋势保持同步,更有125万+“悟道之巅”比赛奖金可以拿(比赛官网)。
第一讲视频点此观看
第二讲视频点此观看
第三讲视频点此观看
第四讲视频点此观看
第五讲视频点此观看
本次课程可以看做是面向所有人的大规模预训练模型(下文简称“大模型”)科普课,从大模型与传统机器学习模型的区别、机器学习范式的变化和 GPT-3 讲起,进一步介绍悟道模型及主要技术、悟道之巅大赛参与方式以及悟道 API 使用说明等等。
本期内容主要讲解如何使用悟道部署外部应用的思路,主讲人为季鲁,曾任北京创客空间 Creatica CTO,电荷猫创客教育创始人,并于多所知名学校担任技术类课程顾问,协助研发多门科技/编程类课程,带领学生获得多项国家级大奖。
第一讲干货见:一文入门大规模预训练语言模型丨“悟道之巅”公开课干货(1);
第二讲干货见:入门大模型后,如何优化其输出结果?丨“悟道之巅”公开课干货(2)
第三讲干货见:实践:用大模型开发一款智能应用丨“悟道之巅”公开课实录(3)
第四讲干货见:基于大模型,开发一款中文议论文写作平台丨“悟道之巅”公开课干货(4)
本期主要内容如下:
1、基于悟道 API 的 web 应用开发思路分享
2、悟道 API 的其它可行应用思路
3、成熟 GPT-3 模型的商业应用案例
一、基于悟道 API 的 web 应用开发思路分享
首先分析 Python Django 后台做外部应用的案例。
在之前的课程中分析过的 COGVIEW 网站,它是由悟道官方开发的基于文字描述生成图像的网站。
那么,类似这样的网站如何从零开始制作及生成?
网站主要用的是 Python 框架的 django 后台。
先介绍一下 django 后台。如果习惯于 Python 代码开发,可以去深入学习 django 后台。
django 会把前台和后台分开。
前台主要使用 html 语言,而所有的性质命令全部都被传送到后台的 django 中,使用 Python 代码完成所有数据的解析及数据库的读取运算,或是需要执行的请求。
django 的后台可以把网站部署在本地。在输入任何一个文字后,点击完成后就会生成图像,图像自于悟道官方的 API。
比如输入绿色的苹果,点击生成,首先在页面内加载,然后调用后台完成请求。在请求的过程中,无法进行其他操作。
因为这个网站是单线程的,即使有所操作也不会对后台产生任何的影响。推荐用 pytorch 完成开发 django 的框架。
因为 pytorch/pycharm 中自带 django 的文件框架,如果有 pycharm 专业版的话,当新建项目时,就可以直接创建 django project。
如果没有专业版的话,可以从网上下载初始化模板。基于初始化模板,只要可以运行 Python,用任何的编译器都可以。
django 框架中,比较关键的是 manage.py。
manage.py 是执行服务器的程序,可以用 manage.py 完成 django 服务器的本地化部署。
如果用 pycharm 制作,就不需要 manage.py 生成初始化文件,否则需要运行 manage.py 生成所有相关文件。
html 的框架有两部分。
一个是前台页面,也就是 html 文件。一个是在 html 文件中写的脚本,你可能需要了解 html 语言以及基础的 css 样式。
index.html 是首页,存放在 templates 文件夹中。
head 部分的所有的内容都是样式表,你也可以在这里导入其它的样式。
body 是网页的框架,div 相当于网站中的方块。这个方块中最前面放的图片,对应网站的头图。
h3、div 或 span 都是简单的标签,都叫做 css 样式。css 样式是在 html 中不同的元素。
h3 代表文字标签,div 代表区域标签,span 代表横向展开的区域标签。input 代表输入框的标签。
其中输入框标签的 ID 叫 text,在输入框中输入的任何内容,都可以被 input 标签读取,进行加载处理。
而 button 按钮是在网页前台的生成按键,如果把输入文字进行修改,前台也会有相应的变化,只是每次需要重开服务器。
在了解完了 input 标签和 button 标签后,接下来介绍它们的原理。
首先,在 button 的标签中,有一个 on click=submit。
其中,submit 是函数,在后面写了【加载中请稍后】的提示文件,提示文件也可以放置图片。网页前台的 div 标签目前是空置的,叫做 img-container。
在记住这一模块后,前台代码部分需要了解以下内容。
Body div 隶属于网页部分,网页展示的文字或是图片框,全部存储在这个大div中。script 是前台所有执行程序的脚本。
在定义了 sleep 函数后,相当于定义了等待程序。因为它是异步请求的 API,所以在拿到 test_id 后,需要重复对第二个地址进行请求,以获取最终的图像信息。
sleep 函数的主要意义是在重复请求的过程中,在每隔两秒或者三秒持续进行请求。
在点击 on click 时调用的 submit 函数,是前台最核心的函数。
首先 submit 函数定义了三个变量。loading 是标签,使用元素的 ID 可以直接调用。
那么,loading 的标签在初始化时,会把 visibility 设成 invisible。如果不点击,标签默认是看不到的。
也就是说,每次页面加载时是看不到字的(读取中请稍候字样)。而且 img-container 的 html 在最开始时定义为空,稍后得到返回结果把所有获取到的图像地址全部插入到 html 中,这样就可以显示图片了。
代码部分最核心的是 ajax 请求。
这个请求工具与 python 的代码格式不太一样,如果感兴趣的同学可以自己自己在网上搜索了解一下。
而 Ajax 对接了 Django 的后台,将前台内容进行请求与返回。django 中的 URL 中文翻译叫路由,本质上是从一个页面跳转到另外的页面或是程序中,路由有自己的表。
在与 templates 同级的 content2img 文件夹,django Project 中有一个 urls 文件,urls 就是它的路由表。urls 的路由表相当于程序之间互相调用关系的记录。
URL 请求的地址叫 API,API 是 URL 最终要调用的程序名,执行内容叫 submit。
首先,找到同名项目及同名文件夹,在 URL 中找到 path api,这个 API 就是 index 调用请求的 API。
在 API 中又二次调用了 app.urls,app.urls 代表 APP 文件夹中的 urls。
app.urls 调用了在 APP 文件夹中的 urls 中的 submit 和 result。在 content2img 主路由表中,调用了 API 路由,而 API 又帮助调用了 submit 和 result。
这个过程是在操作执行时用到的 Python 后台的程序。
首先,在 consent 中找到对应的 API,然后在 API 中找到 submit,通过这样的方式成功连接路由。
ajax 是请求的方式。在第一次 API 的请求中需要用到 post 请求,data 是上传的参数。
input 中的 ID 叫做 text,假设改成 text2,就会得到 text2.val。所以,第一个 ajax,本质上是调用 urls 的路由,找到 app.urls 中 submit 和 result 函数。
执行的函数叫 Submit Task API View,进入 views.py 程序。views.py 可以理解为 django 中的后台执行命令,那么,django 中所有的后台执行都要通过 views.py 实现。
定义一个 class 叫 Submit Task API View,由它执行请求。如果可以被转换才执行,如果不能转换,直接报错。
这样可以避免网页出现奇怪的 bug,使用 Submit Task Serializer 进行整理。
利用 Serializers.Char Field 函数做数据整理,那么,request 的数据可被执行时,调用 submit.task 函数,submit.task 是比较简单的 API 调用项目。
在 API 调用时,第一次得到的返回值是 task_id,所以第一个 Submit Task API View 给出的最终 return 值就是 task_id。
Success 是 ajax 自带的,那么,success 代表如果成功请求了,就创建函数把 result 的值传入到第二个函数中,相当于开了新的函数,依次请求第二个地址。
此时,不再适用 post请求,应该使用 get 请求。通过 true 循环,第二次使用 ajax 发送请求。
第一次使用 API 中的 submit,这次用的是 API 中的 result。 这次在路由表中的请求是在 app.urls 里进行 result 请求,result 是 get 函数,你可以从 GetResultAPIView 里面看到,class 中的 get 函数。
调用 get 函数,上传的参数是 result.task_id。在第二次请求时,唯一要做的就是把 task_id 发送过去,得到最终的结果,但是需要对最终的结果进行处理。
无论是使用 data regulation 还是 Char Field,都要进行分析,如果数据可以被读取,那么就使用 get_task_result 函数。
get_task_result 函数放在 utils.py 中, django 绝大部分的 python 后台代码都被写到 utils 中,这也是标准化框架。
要写出 get_task_result 函数,首先,需要 requests.get 请求返回值,然后把得到的值去进行处理。
如果 process_time 不是 0,就将 data print out 出。当然,要对 data result output 进行 print,所以,完成这个步骤后,最终得到 return 的值,也就是图像的 URL 地址,只不过 URL 地址会变成 list。
回到前台,把 result 值进行最终的处理。
首先,需要把 loading 进行 head,loading 是提醒加载中请稍后的 div 标签,首先将其隐藏,隐藏后要把 loop 关掉,防止页面在刷新时进入到死机的过程。
然后,需要把 result 里的 URL 地址放到图片标签的src里边,完成后图片就会出现了。因为 div 一直是 visible 的,只不过一开始是空的,后来才把图片给放进去的。
以上就是比较简单基础的网站实现方式,记住它的核心是用 django。
django 是把前台和后台分开。前后台之间的调用用的是 Ajax 请求方式,请求时,可以直接套用现在的代码模板,这个代码模板不光对于图像有效,对于文字也有效。只需要对 utils 中的 submit_task 和 get_task_result 进行修改,而修改实际上就是 Python 维度的修改。
你可以对代码功能进行调整,比如改成 qa,作为问答的功能。通过修改 API 和 secret,可以在其中加 print 观察输入输出格式。
在了解 web APP 的应用后,如果参加比赛,未必都要做一样的网站,还有其他的技术栈,也可以去了解。
二、其它可应用技术栈分享
本次的 API 开放范围有 8 个方向。
分别为文本生成,快速写诗,作诗,藏头诗,宋词,问答,生成新闻和智能绘图。本次课程前半部分演示的是智能绘图的效果。
参赛应用也可以做成微信小程序,而微信小程序用 html 就可以进行开发,不过小程序中需要对接的工作。
官网上也有相关的文档。那么,对于其他的范围,比如说文本生成,写诗,包括智能问答和新闻生成,本次也将分享比较好玩的技术栈。
除了 6 个官方给定的主题之外,还有自选主题,所以,这次大赛是非常开放的挑战赛。
前 6 个主题中,也可以不完全限制在软件的思路,可以尝试做好玩的软硬件结合的项目。
这里,除了 http 框架的网站开发以外,比较推荐使用 Unity 进行开发。
Unity 的开发可以做游戏,也可以直接打包成 iOS 或是安卓的 APP。
如果你用到过 VR、AR,或者接触过最近比较火的元宇宙的话题,会知道 Unity 都是非常好的开发工具。
工具的底层 C# 的语言,从 Python 迁移成 C# 不会特别难,如果有 C++ 的经验或者 C 的经验,那么 C# 学起还是比较方便。
唯一不同点是,C# 是非常明确的面向对象编程。所以,需要考虑语言框架逻辑。
Unity 可以实现很多应用的开发,包括 web 的开发,手机的 APP,开发游戏都是可行的,当然 Android Studio 和 Xcode 更专业一些,可以开发安卓的应用或是 iOS 手机端的应用。
除了软件类的应用,也可以尝试关于硬件类的应用。
硬件类的应用不局限于举例两个。
下图左侧用的是树莓派,树莓派本质上是一台小电脑,在这个系统上,可以把悟道的 API 搭载上去,然后将它与开发者熟悉的机器人或是其他的硬件应用连接。
可以开发例如 I0T 的应用或是智能医疗的设备,开放度会变得更大。
而右边的这套 ROS 系统,可以把 API 调用在这套系统上,将它和已有的机器人相连接,用 Python 语言,C 语言,C++ 语言都是可以的。
如果想要尝试新的可能性,以上 5 种工具都可以做到。
三、成熟 GPT-3 模型的商业应用案例
除此之外,在此分享一些国外的比较有趣的 GPT-3 应用案例。
而且,这些案例有很多已经拿到融资,但是国内好像没有特别理想的对标产品,所以,如果可以用悟道实现类似的功能的话,可以用来做参考。
第一个项目在国外非常著名。叫 AI Dungeon 的纯文字游戏,用 AI 生成游戏剧情,可以通过英文输入玩游戏。
底层原理是基于 GPT-3 的 few-shot learning。所以,如果有能力的话,参赛选手也可以进行 few-shot training,抛开简单的悟道 API,当然,这需要了解整个神经网络和人工智能,并且拥有一定的算力进行 few-shot learning。
但是,本质上这些难度不是特别大,毕竟整个 GPT-3 或者说悟道的框架都已经提供了。
第二个比较偏就业场景。
很多的公司在 hr 招聘时需要去写 job description,即 JD、职务描述。
但是 hr 可能不了解某个岗位需要面试者有什么技能。举个例子,现在想招代码硬件的实习生,帮助开发机器人,但是 hr 不知道具体需要用到哪些技术。
那么基于 GPT-3 的知识图谱功能,可以输入职位及需要做什么事情,通过 GPT-3 的框架模型,就可以直接生成完整的 job description。通过职务描述就可以招募到合适的人。
第三个是 fitness AI,它曾经一度通过 GPT-3 拿到了很大一笔融资。
这个项目用的是知识图谱的功能,相当于悟道中的问答功能。可以输入关于健身的知识,系统通过输入的问题,基于知识图谱会给出信息的反馈。比如输入体重大概是多少,需要怎么训练更加健康。
第四个是 copy writing,它的功能和 fitness AI 很像。
当想要发广告,但是英语不是特别好时。那么,可以将广告语或产品介绍输入到 copy.AI 中。
比如输入透明的玻璃杯子产品描述,目标是销售,调整广告语的生成方式,输出你完美的广告词。这个功能在悟道的官网上也有类似项目的应用。
第五个是 replika,是通过 GPT-3 训练虚拟陪伴的 AI。
这个 AI 的效果非常好,用户可以和 AI 聊天,并且 AI 具备长效记忆,也就是说,用户可以把它当真人一样。
以上便是本期全部内容。
“悟道之巅”比赛报名和交流
扫描图上二维码或点击原文文末“阅读原文”即可参赛!
微信交流群: 添加小助手微信biendata02备注“悟道之巅”加入讨论群。
标签:请求,之巅,生成器,可以,悟道,django,公开课,API,result 来源: https://blog.csdn.net/shujushizhanpai/article/details/121703421