面向AI框架编程--引言&简介
引言
随着GPT在近一年的爆火(当前2024年1月10日),很多行业和打工人都受到了前所未有的冲击,国内众多互联网巨头在看到直接使用GPT毫无希望的情况下,都投入巨大精力开发属于自己的大模型,一方面是不想被所谓卡脖子的优良传统想法,一方面也是无法直接使用GPT的无奈之举。而打工人也开始变得两极分化,有快速接受能力的打工人持续使用一年后,工作生活已经完全离不开自己的“爹”,而固步自封的打工人依然认为GPT和元宇宙一样虚无缥缈,是资本家圈钱的工具,几乎没有使用的想法。GPT出现后,大厂们的态度和打工人的两级分化,是之前元宇宙所没有的,GPT更像是前几次工业革命,打工人的生产力进一步被释放,资本家像闻到血腥味一样纷纷下场,人与人的思想眼光见识知识被进一步扩大。当然,GPT到目前为止,也出现了5G大火时的“尴尬期”,众所周知,5G截至目前改变的只有赛博顶真的生活,那么GPT是不是会像5G一样随着尴尬期的结束就是退潮,还是会像法拉第发现电磁感应之初那样,一个天才婴儿已经诞生于人类社会。
GPT目前处于所谓的“尴尬期”,一方面原因是因为最有研发能力的大厂前期有观望,前期大都在卷出自己的大模型,甚至不惜录屏抢首发,宣传上各显神通;另一方面是大厂尾大不掉,不可能迅速的进入市场。以及上文中提到的打工人也是两极分化严重,而在非常善于使用GPT这方面人中,能够使用GPT API,并且能够系统的学习后进行落地的人,更是少之又少,这给很多人提供了充足的时间去入场发育。我认为尤其是互联网行业的人,尤其是测试开发,务必需要快速接受GPT,并且能尝试进行落地,GPT明显对于这个行业出现了最为巨大的冲击。
首先这里提到的测试开发,有工具开发能力,并且工作上有时间去设计开发工具的测试开发,而不是被互联网招聘冠以测试开发名头,招进来的偏管理的QA。之所以是测试开发,是因为以下几点原因:
开发工具:
目前日常小脚本GPT4写出来的大部分可以直接用,大的工具上各种思路和开发细节都可以去询问GPT,创新性的开发更应该是,笔者甚至和GPT在交流过程中沟通出全新的算法解决了实际问题;
GPT的自然语言理解能力,几乎释放了原来在人机交互上的设计,可以投入更多的精力和时间到工具核心开发上;
工具推广难的问题,由于GPT可以与人沟通,降低了工具的使用门槛,只要能描述自己想要干啥,就能正常使用工具;
项目组开发维护:
GPT凭借强大的知识储备,项目组日常出现的几乎所有问题,都可以通过正确的询问得到解答,笔者因为prompt写的好,多次利用GPT帮组内人员解决日常问题,比如svn,工具运行报错等,效率比谷歌搜索快上n倍;
流水线问题定位,项目组需要一个BM的角色,在游戏项目组是打包的运维,都是大家不太情愿去做的工具,维持整个组CI和CD流程的顺利进行,有了GPT的加持,该角色几乎可以使用大量的GPT自动化工具去释放人力;
以上主要是测试开发在工具开发运维方向,很多人说如果这样说程序员不是被淘汰的更快,并不是这样,GPT能力强大在于它的知识在结合了上下文之后,能力远远超过了你,但是空有知识没有上下文加持,也只是学术上的孔乙己罢了,茴字有再多写法也不是一个小伙计需要的,所以对于核心在于上下文的程序来说,并且这种上下文的prompt实现难度,不可能短时间内被替代。但是测试开发不同,所开发的工具上下文几乎不超过1k,运维的知识储备和简单的prompt,都决定了如果再不快速接受GPT,很快会被通用化的GPT工具逐步取代。当然也不能走太快,笔者认为对于已经有较多GPT使用经验和知识学习的测开来说,将现有工具改造接入到GPT中,是最快速成本最低且最有效果的一种方法,同时如果能和领导沟通,得到一些继续解决的问题会更好。
需求
上文提到,我们需要一种使得我们工具接入GPT并且变的只能化的方案,也就是说利用GPT强大的自然语言理解能力,成为工具和用户沟通的桥梁。构建这座桥梁其实方法有很多,如果工具量级比较少,使用GPT提到的函数调用功能即可接入,如果工具较多,那就需要一个框架来承载,GPT并没有提供类似更复杂的框架功能,如果我们自己开发这套框架,核心功能也比较简单,围绕GPT的函数调用功能为核心,实现prompt,工具集管理,以及交互功能即可。目前市场上已经有能够满足上述功能的框架,而且接入也比较简单,就是后续我们会一直围绕开发的LangChain框架和微软开源的Semantic Kernel
举一个实际的例子,由于GPT不能实时联网,为了实现和GPT聊天过程中获取今天天气的功能,笔者使用函数调用的办法实现了一个获取天气的功能。因为只是为了解释函数调用的功能,所以笔者更多的是介绍GPT如何调用函数,很多功能都简化或者忽略处理了,比如只能解决天气一个问题。如果此时想增加更多更复杂的功能,笔者写的demo基本上完全不可以实际应用,比如将目前我们小组很多功能改造接入GPT,那就需要功能分化,每一个功能都需要描述功能和接口,那就需要将所有功能进行分类,然后再增加获取功能描述的接口来做。实际上我们想做的核心是想让我们更多的功能智能化,然后却在和大语言模型交互上浪费了大量的精力去开发和设计。而且这种问题不仅仅只有笔者有,很多为了将大模型落地的同学都会有这种问题,成本过高导致大模型迟迟不能在自己组内落地,这就是语言模型应用开发框架的优势,解决了现在开发人工智能应用的一些切实痛点,所以如果想要大模型落地,语言模型应用开发框架是一个无法绕开的技术,LangChain和Semantic Kernel就是其中之二。
LangChain简介
LangChain是一个基于语言模型开发应用程序的非常著名的框架,它可以将语言模型和外部书连接起来,同时也允许语言模型与其环境进行交互,LangChain提供了构建基于大模型的AI应用所需的模块和工具,大大降低了AI应用开发的门槛,使得任何人都可以基于GPT-4等大模型构建自己的创意应用。整体来说可以看作是大语言模型作为地基,LangChain在其基础上建设了一座房子,我们需要做的不再是躺在大语言模型上玩泥巴,而是可以在LangChain建设的房子里装修出自己的家。
目前(2024年1月15日)已经正式发布了0.1版本,也就是LangChain v0.1.0,也是该框架首个稳定版本,同时官方也在该版本中增加了很多功能:LangChain v0.1.0
LangChain官方已经有比较系统的文档:LangChain_introduction,由于从创建到现在只有短短1年时间,虽然已经是比较主流的框架,但是相对学习资料目前还没有太多,一方面是时间确实过短,另一方面是官方更新的速度过快,可能1个月前的学习资料可能已经无法直接用来抄作业了,所以最好的学习方法建议是直接阅读官方提供的英文文档,国内的中文文档可能会稍微落后官方文档几个版本LangChain 中文文档