程序设计时代经历了面向机器,面向过程,面向对象,面向领域的时代。随着AI的发展,NLP领域将自然语言大模型的能力也引入到代码任务中,现在程序设计已经进入到了面向自然语言时代。
今天我就和大家一起讨论下面向自然语言的编程时代以及体验下腾讯混元大模型的代码能力。
大模型的代码能力
其实在2021年的codex工具就已经展示了语言模型的代码生成能力。
随着大模型的热度,更多Code领域的大模型出现,我随便列一些:Code LLaMA、WizardCoder、StarCoder 、 GPT-C、CodeGPT、PolyCoder、CodeGen、PyCodeGPT、Pangu-Coder、CodeGeeX、Phi-1、CodeFuse、CodeShell、DeepSeek Coder等。
能直接使用的提效工具也不少:GitHub Copilot 、 GhostWriter、CodeWhisperer 、Cody、Tabnine、MutableAI、AskCodi 、Codeium 、CodePal AI2sql 、CodeGeeX 、通义灵码等等。
是不是眼花缭乱?只有一两个工具咱还知道怎么选?当有一堆工具摆在我面前的时候,不知所措...
主要是随便查哪个大模型,都会说他在某个能力的指标数据是数一数二的。更加迷茫了...
我们当然不需要每个模型都去测试一遍,或者每个工具都去体验。
想了解代码能力排行榜?有的:https://www.datalearner.com/ai-models/llm-coding-evaluation
想看看具有中文能力的排行榜?满足:https://github.com/jeinlee1991/chinese-llm-benchmark
想了解大语言模型的代码能力综述?请看论文:《A Survey on Language Models for Code》
为什么都看上了代码能力
大模型出现后很多公司首先都会从两个应用方向下手:智能问答和提效工具。大语言模型本身就是针对自然语言处理,智能问答作为一大应用方向很正常。那提效工具中为什么都要从代码能力工具入手呢?
我本人能想到的主要是以下几个方向,大家还有其他想法欢迎在评论区一起讨论。
1. 公司性质。2022年底chatGPT的出现让大模型火了,首批将重点转移到大模型的应该都是科技公司,科技公司的程序员比例必然不少,我们不提降本,增效首当其冲应该就面向程序员吧。所以大模型的代码能力应用是重要的。
2. 数据。上面提到了科技公司,那内部的不谈质量,代码数据肯定是不少的;要看质量,github代码仓库,按star或者fork来排序也非常容易下载到高质量的数据。所以做代码领域的模型,数据获取相对容易。
3. 紧随openai产品。2021年 OpenAI Codex提供技术支持的github Copilot就已经出现了,有现成的大模型应用baseline摆在这,大模型能干什么,产品需要开发哪些功能的栗子,需求单和设计稿都放在这儿呢。那为什么已经有GPT,有很棒的开源模型了,还有这么多轮子呢?首先前期这些模型对中文的效果并不好;其次代码对公司是很重要的数据资产不能上传给第三方接口使用;最后不可说。
4. 技术角度。最后我们从技术角度分析下,大模型为什么这么看重代码能力。大模型很重要的能力就是推理和决策,理解和生成。他需要很好的理解用户的问题,然后逻辑清晰的去一步步回答问题。是不是像极了优秀程序员?所以我认为在大模型的训练数据中增加代码数据集和逻辑思维问答对是有助于大模型的理解能力的,而这个任务又有助于代码能力,双赢。另一方面,通用大模型目前是很难有超越人类的能力原因就是我们很难去对通用大模型的回答做评测,在强化学习过程中reward函数很难构造,但是代码能力不一样,代码有个指标是pass@1,代码能运行通过就是正确的。所以代码大模型是可以超越人类的。所以代码能力是大模型一个很好的应用方向。
根据以上几点分析,所以很多大厂和公司的大模型都会有一项指标是模型的代码能力,随后可能都会出一款自己的提效工具集成到IDE。AI平台性公司,还会提供服务让你能基于自己公司的代码微调大模型部署在自己服务器~
那所有公司都要有去部署自己的提效工具吗?那当然不是。有些公司自己部署大模型的原始是担心代码安全性问题。
但是通用性代码问答其实是不涉及代码安全的,如果是业务代码不涉及核心数据应该也不涉及代码安全,如果需要问的问题真的需要涉及到公司业务了,程序员耶,聪明如你,换个方式脱敏去问题应该难不倒你的~所以个人觉得至少80%的问题是可以借助API的,另外20%真的做不到,那就自己写吧。当然我建议就算用API,大模型想收集数据,了解大家在问什么,就调国内大模型接口吧...人家都帮我们提效了,给他们点数据分析来提升模型效果,双赢!
上面介绍了大模型的代码能力的重要性以及普及性,我们今天就一起来体验一个低调不参与排名的大模型,实测代码能力很不错!那就是腾讯的混元大模型!
腾讯混元大模型代码能力
代码能力主要体现在哪些方面呢?支持多种语言(java,python, C等), 支持中文,代码问答,代码生成/补全,代码解读,代码注释,代码重构,代码单元测试等。
所以现在的大模型代码能力已经很强大了。
不要再拿着一个LLM就问:“你是谁?”;拿着一个代码工具就问:”使用python写一个排序算法。”
我建议大模型将这两个问题缓存起来,节省下GPU资源。
我们今天直接让混元实现一个功能,看看人工智能里面的人工成分占多少。
我们就选保姆级教程:使用gradio搭建服务调用chatGPT接口这篇文章的功能,让混元帮我实现一个gradio部署调用chatGPT接口的服务。
1. 实现调用openAI_chatGPT接口函数
提问:使用python编写一个调用chatGPT的接口并逐行注释的代码。
回答:
运行:
可以很好的生成需求代码,并且告诉我们需要安装的库以及如何申请API密钥。我们运行一下这段代码,可以正确输出:The capital of France is Paris.
2. 使用gradio部署
下面我们希望将以上接口使用gradio部署,以界面形式呈现。
提问:我需要将以上接口使用gradio部署
回答:
运行:
同样很详细的告诉我们需要安装的环境,给出代码,给出解释和使用方法,而且是具有上下文记忆能力,能结合上面的历史信息进行回答。
继续对错误信息进行提问
这里指出gradio的Textbox是没有lines参数的,但是第一步生成过程中设置了此参数,我们将代码中错误参数删除,然后直接运行:
服务可以启动,而且能正常运行~
3. 替换gradio界面,使用flask部署
下面我们再上升难道,我们不想要gradio的界面,我们使用flask自己部署,看混元能不能一次成功。
提问:以上代码gradio部署的调用chatGPT服务,使用flask来部署,代码应该如何写?
回答:
分析:
可以看出第一次提问由于我们只告诉模型,我需要用flask替换gradio,没有很明确的指出页面html也需要实现,模型就只是提供了flask部署代码。所以我们在写prompt的时候要注意两大原则:1. 给出清晰详细的指令;2.给模型足够的思考时间。
在第二次提问,我们给出详细的布局情况和具体的需求,模型就会给出部署和前端页面代码。
运行:
一行代码没有修改,可以成功运行。
4. 总结
只通过一个实例,涉及到算法接口调用,前端和后台开发,混元都能很好的回答,我几乎没有仔细看代码都是直接拷贝到IDE中。
之前我花3个小时写的文章 保姆级教程:使用gradio搭建服务调用chatGPT接口,混元二轮问答就能实现。即使加大难度,让他完成整套的外部接口调用,后台部署和前端开发需求,也是几乎不用人为修改代码,就能正确运行。
因为我之前就有安装好环境和准备好openAI-key ,整个过程4轮问答,十分钟就实现了以上功能.....
3小时写文章,其中代码实现算1个小时吧,混元需要4轮对话算10分钟吧,就本文的实例来讲,提效(60-10)/60=83.33%