我,一个普通开发,眼中的大模型浪潮
(文章封面为AIGC内容------正在加班的年轻码农)
AI和曾经的我
2022末,当作为国内放开口罩就感染新冠的首批患者的我还没有从新冠中康复之际,chatGPT3.5/4横空出世。随之而来的是文心一言的发布上线以及各个群聊里的调侃:
起初,并没有人在意这次AI刷屏新闻,毕竟类似的新闻哪怕在作为00后的我的记忆里就有好多次了:从"深蓝"战胜卡斯帕罗夫到阿法狗大战柯洁。似乎每几年AI都会有一次引爆,然后未达预期,归于平静。
但经过了2023年一整年的发酵,且不论ChatGPT在全世界的推广和妙用,国内大厂几乎都推出了自己的大模型,甚至连我所在的银行软开、这种以安全稳健为第一位的开发团队,都简历了自己的LLM平台并在公司上下全面推广。只要开技术大会活动,议题必然包括AIGC,从热度到推广力度远超近几年Web3、区块链等概念。
这次,确实是不一样了
我本人就是2016年那次深度学习浪潮后对计算机产生了兴趣,进入大学便选择了计算机专业。我大学的专业是软件工程,当时除了数字图像处理,并没有其他AI相关的课程。
于是我就开始一边和实验室老师交流,一边自学AI相关知识。AI领域脍炙人口的"西瓜书"、《深度学习》等著作我也曾跟着网上推公式视频一起推导过。相比学校里的专业课,李飞飞、何凯明、吴恩达等老师的课可能我更感兴趣。期间我参加过一些数据挖掘比赛,也发表过EI论文(有大佬带)。几年AI学习经历下来,直观感受就是
- 卷。大神多,可以说每个学校里最聪明的一批人都在做这方面研究
- 浮躁。很多高校老师前半生可能研究方向和AI八竿子打不着,现在都转到了AI上,然后让手下的学生写论文
- 门槛高。想真正在AI领域从事研发工作,如果还是模型算法研发,对学历要求和学术要求越来越高。而且这方面的候选人实在太多了
- 收益不达预期。此前每次AI浪潮都对AI寄予类似工业革命的厚望,最后对生产的变革的变革都未能达到这个预期。那几年恐怕最大的感受还是高校大门前的刷脸门禁吧
后来随着考研失败,我决定不二战先去社会闯荡一番,就开始春招投简历找工作了。我自知AI岗位早已一片红海,投的岗位全是研发相关。最终从事方向也挺满意的,目前一直在做云原生相关的开发,云计算相关领域也是学生时除了AI我比较关注的。
就这样,曾经我以为我以后的工作应该和AI不会有太大关系了,直到2023年,AI3.0大模型时代的到来。
AIGC带给了开发者什么------我自己的实际感受
作为直接的开发者和第一线用户,AIGC对于程序开发人员的冲击应该是最大的。这一年来,我经历了学习使用LLM到适应使用LLM,下面谈谈我的使用经历和感受
Prompt写的好,啥事都能做
现在市场上甚至出现了一个职业叫"提示词工程师",字面意思就是专门给AI训练写Prompt的。刚看到这个职业时我和同事忍不住调侃到,这是一个专门给语言学同学定制的高端职位。
事实是,只要写出好的Prompt,AI几乎可以在现有的知识体系下帮你解决所有问题。我在熟悉了一段时间的Prompt使用后,几乎已经是左手写代码,右手ChatGPT了。就连我的Leader也吐槽到,那不是GPT,那是你的小秘(啊这......)。以下是我在日常工作中一些常用的场景
复杂的算法逻辑生成
平时业务开发中,时常会遇到一些复杂的业务逻辑,这些逻辑类似LeetCode中的算法题,在思考和处理边界上即思考起来费时又容易出错,但是交给AI,它生成的代码可以先帮助我理清复杂算法的逻辑。
下面是我像ChatGLM大模型提问如何根据JVM各空间的值计算JAVA_OPTS参数的场景。如果要我一开始从0开始写这个算法逻辑,由于涉及到JVM复杂的组成以及单位转换等问题,可能会写很久还出错
go
//ChatGLM大模型提供的参考代码
package main
import (
"fmt"
)
func generateJavaOpts(metaSpace, heap, stack, totalMemory int) []string {
// 转换为字节
metaSpaceBytes := metaSpace * 1024 * 1024
heapBytes := heap * 1024 * 1024
stackBytes := stack * 1024
totalMemoryBytes := totalMemory * 1024 * 1024
// 计算最大元空间大小,通常是总内存减去初始堆内存和栈内存
maxMetaspaceSize := totalMemoryBytes - heapBytes - stackBytes
// 生成 JAVA_OPTS 参数
javaOpts := []string{
"-Xms" + fmt.Sprintf("%dM", heap/1024), // 初始堆大小
"-Xmx" + fmt.Sprintf("%dM", heap/1024), // 最大堆大小
"-Xss" + fmt.Sprintf("%dK", stack/1024), // 栈大小
"-XX:MetaspaceSize=" + fmt.Sprintf("%dM", metaSpace/1024), // 元空间初始大小
"-XX:MaxMetaspaceSize=" + fmt.Sprintf("%dM", maxMetaspaceSize/1024), // 元空间最大大小
}
return javaOpts
}
func main() {
// 假设这些值是从用户那里得到的
metaSpace := 256 // MetaSpace 区域大小,单位:K
heap := 1024 // Heap 区域大小,单位:K
stack := 256 // Stack 区域大小,单位:K
totalMemory := 3072 // 总内存大小,单位:K
// 生成 JAVA_OPTS 参数
javaOpts := generateJavaOpts(metaSpace, heap, stack, totalMemory)
// 打印结果
fmt.Println("Generated JAVA_OPTS:")
for _, opt := range javaOpts {
fmt.Println(opt)
}
}
可以看出,ChatGLM大模型提供的代码虽然不能直接嵌入到我的业务逻辑中,但完成了算法核心逻辑的编写,并辅助我进行了逻辑梳理,我需要做的就是把generateJavaOpts
函数合理地和业务代码组合。
代码解读
我们自己写的代码,如果比较复杂,可能过一周后回头看都要好一会儿才能看懂,更不用说与他人协作或者接手代码。但现在借助AI就可以辅助我们看懂代码背后的核心业务逻辑。
下面以分析开源项目KubeVela的一段源码为例,这段代码本身有很强的业务前后关联,加上使用了func hanlder,初次读起来并不是很轻松
go
// BuildCache if optimize-list-op enabled, ResourceTracker and ApplicationRevision will be cached by
// application namespace & name
func BuildCache(ctx context.Context, scheme *runtime.Scheme, shardingObjects ...client.Object) cache.NewCacheFunc {
fn := sharding.BuildCache(scheme, shardingObjects...)
return func(config *rest.Config, opts cache.Options) (cache.Cache, error) {
c, err := fn(config, opts)
if err != nil {
return nil, err
}
if OptimizeListOp {
if err = c.IndexField(ctx, &v1beta1.ResourceTracker{}, AppIndex, func(obj client.Object) []string {
return []string{k8s.GetLabel(obj, oam.LabelAppNamespace) + "/" + k8s.GetLabel(obj, oam.LabelAppName)}
}); err != nil {
return nil, err
}
if err = c.IndexField(ctx, &v1beta1.ApplicationRevision{}, AppIndex, func(obj client.Object) []string {
return []string{obj.GetNamespace() + "/" + k8s.GetLabel(obj, oam.LabelAppName)}
}); err != nil {
return nil, err
}
}
return c, nil
}
}
我询问ChatGLM如何解读,他是这么回答的(片段):
LLM不但可以从总体上分析代码的业务含义,甚至可以逐行、逐段分析
可见,就算是上下文紧密联系的业务代码,大模型也能尽可能的从单纯的语言层面逻辑上进行梳理。这对于接手代码的开发者来说,绝对算是当读不懂晦涩的学术著作时拿到了一本不错的参考书。
知识搜索
日常业务开发中,如果业务分的很细,其知识搜索起来其实是比较困难的。
比如我日常工作中负责的K8s开发,虽然网上K8s资料相比其他的云原生技术已经比较多了,但如果我直接问到源码层面实现逻辑或者很细节的设计,在LLM大模型出来前确实很麻烦。
比如我在《K8s中的Client》一文中提到的几种客户端接口,中文互联网上资料截至目前也很少,即便是看源码的注释也只能是一知半解,但是当向大模型提问时:
即使是比较简单的Prompt,大模型也能按图索骥替我们搜索出一些答案,帮助我们作进一步的深究。
以上就是我日常开发工作中大模型的几种辅助开发场景,此外还不限于输入代码找bug、想变量名等。如果诸位还有其他妙用,欢迎和我交流
温馨提示:业务敏感代码务必注意大模型的网络环境,避免造成数据泄露
危机感
任何跨时代的技术都是一把双刃剑。若大模型真的推动了时代进步,那被他伤到的也绝不可能是少数。最容易被AI替代的工作中,程序员一直名列前茅。
ChatGPT4问世不久,国外因为使用大模型裁掉员工的新闻层出不穷,说没有危机感是不可能的。
淘汰?
技术的革新必将淘汰部分人,这是毋庸置疑的。20世纪40年代的埃尼阿克需要几十上百人同时维护,可现在手上的一部手机性能就远胜于他。那减少的人呢?某种程度上其实就算失业了,在他原来的那份伺候庞然大物的工作中失业了。
可技术的革新也必将产生新的职位,正如前面提到的Prompt工程师,这在以前是完全不可能想到的。
所以在我看来,AI催生被淘汰是一种必然,与其等被AI彻底淘汰,现在该做的应该是先试着怎么去和AI相处,怎么让AI能够为我所用,为我的生产力赋能。况且作为软件从业人员,身处AI技术的第一线,应当有着更敏锐的嗅觉。
现在已经有通过不少AIGC创作来创造营收的案例,本质上就是一种AI为我所用。所以说,先培养如何使用AI帮助我们更好的工作吧,未来大有可为。
业务为王
曾经公司内网不少人抱怨,自己在公司干了几年,做的都是业务,技术增长乏力,担心脱离企业这个环境就失去了竞争力。就连我也曾吐槽过,说是云原生开发,感觉很基础很底层,但还是在适配各种内部系统和业务场景。
但首先不论技术的革新本身就是由业务需求孵化出来的,现在有没有发现,很多你认为技术上的问题,AI可能可以比你更快地学会和应用;很多技术上的资料、逻辑,AI搜索得更快更准确。业务的重要性反而凸显了。
比如要设计一个主从架构的分布式系统,AI或许可以按照你的设计的提示词帮助你写出Shell脚本和K8s YAML完成搭建,但是AI无法回答你,什么样的架构模式在你的场景下是最好的,什么样的分布式算法对现在的场景是最优解。AI甚至无法告诉你,你现在是否有必要搭建这个主从架构。
知识上的搜索、整理AI或许可以帮忙,但是前所未有的创造力、对业务理解的经验之谈,AI无法帮忙,这也是AI的使用者最大的价值。
甚至某种程度上,我们可以认为AIGC帮助我们封装了更多技术上的API,至于如何调用这些API、如何组合逻辑,根源还是对业务的把控
同理心制胜
2017年,我还是个高中生,那时还是阿法狗引爆深度学习技术的AI2.0时代,我读过一本书《不会被机器替代的人》
这本书豆瓣只有6.7分,但书中的一个观点我至今记忆犹新"人相比机器最宝贵的是同理心"。
作为开发者,虽然我们不一定是产品经理,但我们最终的面向的还是用户。先站在用户使用的角度去思考怎样把产品做好,肯定是不会错的。这也是AI无法替代的。
我司曾有一位技术Leader早在手机银行开始使用时变发现,各种身份认证策略对盲人用户十分不友好,便开始四处走访收集需求,着力研发盲人版的手机银行,最终盲人用户也能很安全却很方便的在移动端管理自己的银行账户。这种观点和思维AI能想到吗?想不到。
转行or衔接
前些天看到一个前端前辈的文章,35岁后决定搭上AI浪潮的末班车,申请调到了算法研究部门做AI方面的前端对接。我想这也是当下很多未踏入AI从业的同行甚至非程序员们在考虑的
我到底要不要到AI赛道卷一卷?如何入局?
首先可以明确的是,AI的卷相比前几年更厉害了。虽然在大模型的加持下,AI人才需求扩大,但是仍然是供大于求。
首先是学AI的人真的太多了。首批AI专业的本科生们已经从学校毕业了,更不要说近几年几乎和计算机相关的专业学生都会或多或少的学AI。我刚上大学时,AI在学长学姐们那还只是一门比较简单的选修课,毕业后从事移动端开发、Java后端开发才是主流;当我快毕业时,学弟学妹们几乎都参加过数据挖掘比赛,能随口说几个机器学习算法。
更重要的是当下的经济周期和国际局势,就业市场总体比较冷淡,显卡也时不时被卡脖子,在此不必多谈。而且这一周期何时好转何时结束,谁也不知道。当然目前政策层面对于信创和AI相关的支持力度还是很大的,这也算是一个好消息。
至于如何入局?我想起大学时看百度AI公开课时一位百度工程师的话:
"你是打算以后从事AI算法模型研究还是AI工程研发,如果是后者的话可能简单一点"
就当下AI人才市场的供给情况,客观来说,如果本身学历没有优势,希望只是通过培训班、课程就完全转向AI模型研究,除非公司刚好有机会,否则基本是没机会的。但和AI相关的开发,正如前文提到的那位向AI业务靠拢的前端老哥,如果自身愿意去争取一下,还是有机会的。
就拿我现在的云原生开发来说吧,我目前考虑的搭上AI车的思路有以下两个:AI赋能云原生,或者云原生赋能AI。
- AI赋能云原生,即在AI的加持下更好地搭建云原生平台基础设施。目前FinOps、AIOps等概念已在阿里、美团等大厂落地。2023年我在公司也参与过几期AIOp开发,场景类似于算法辅助线上问题定界。目前这块也是今后云原生技术比较有前景的领域。
- 云原生赋能AI,即通过云原生技术的能力更好地使用AI。目前比较典型的有CNCF开源项目KubeDL,KubeFlow等,包括文心一言也是在K8s集群上进行的多核训练。以K8s为代表的分布式调度系统和AI这种多核计算场景非常搭,我认为未来会有越来越多公司愿意搭建专门的基于云原生架构的深度学习平台。
所以关于AI浪潮,我的观点即,你可以不投身,但你不能不了解,更不能不会用。