首页 > 编程语言 >LLM 应用于编程辅助调研

LLM 应用于编程辅助调研

时间:2023-05-23 09:22:41浏览次数:48  
标签:return BigDecimal 代码 编程 list LLM Copilot public 调研

目录

前言

AI辅助编程出现之前需要简单重复技艺的修炼,也就是拔刀速度影响了发挥,今后拔刀速度可以忽略了。

往后的开发可以思考道为主,反正简单重复技艺的部分都可以交给AI,甚至一部分求道的过程是跟AI共同完成。

一、能做什么

  • 解析代码:陈年代码一时难以理解,快速解析用途、优缺点等;

  • 语言转换

  • 代码刷子:可以增强代码可读性,添加类型,智能修复可能的bug,比code Runner更优秀的即时代码调试,优化冗余代码.....

  • 测试用例生成

以下引用于(PS:调查数据本身可能存在偏向性,仅做参考):https://github.blog/2022-09-07-research-quantifying-github-copilots-impact-on-developer-productivity-and-happiness/

开发者们报告称,Copilot 能帮助他们稳步推进开发流程(73%),并在处理重复性任务期间降低精力消耗(87%)

有近 90% 的开发者们表示,在使用 Copilot 时,他们完成任务,特别是重复性任务的速度更快了。这也符合 GitHub 在产品设计时做出的基本预期。

为了在实践中观察并量化这种提升效果,GitHub 组织了一场对照实验。两个受试小组(其中一组使用 Copilot)需要接受计时,核算用 JavaScript 编写 HTTP 服务器的平均用时。

  • 实验发现:
  1. 使用 Copilot 的小组完成任务的比例更高,为 78%,未使用 Copilot 的小组完成任务比例为 70%。
  2. 更显著的区别在于,使用 Copilot 的开发者完成任务的速度明显更快,要比未使用 Copilot 的开发者快 55%。具体来看,使用 Copilot 的开发者完成此项任务的平均用时为 1 小时 11 分钟,而未使用 Copilot 的开发者平均用时达 2 小时 41 分钟。
    综上,该项调查和实验最终得出的结论是,“Copilot 有助于加快工作完成速度,帮助开发者减少精神内耗,以更加饱满的精神状态专注于工作内容,最终在自己的编码过程中找到更多乐趣。”

二、局限性

辅助编程并不是万能的,也存在局限性。

  1. 缺乏上下文理解:尽管Copilot使用了先进的自然语言处理技术,但它仍然可能无法完全理解程序员试图实现的上下文或业务逻辑,从而生成的代码可能不完全符合预期。

  2. 缺乏安全性保障:Copilot生成的代码可能存在安全漏洞,这是因为它只是根据输入的提示和上下文生成代码,并没有考虑到潜在的安全风险。

  3. 受限于语言和库:Copilot只支持特定的编程语言和库,因此在不支持的领域或者语言中使用它可能会受到限制。

  4. 代码风格不统一:Copilot生成的代码可能不符合团队或者组织的编码规范和风格指南,这可能导致代码质量和可维护性下降。

  5. 需要云服务支持:Copilot只能在与GitHub相关的云服务中使用,这可能会对一些开发者造成限制。

  6. 代码敏感安全性:Copilot 在使用过程中,会通过向 GitHub 提交代码进行学习,因此需要注意提交的代码内容是否包含敏感信息。

以下引用于:https://github.blog/2022-09-07-research-quantifying-github-copilots-impact-on-developer-productivity-and-happiness/

根据 OpenAI 的论文,Codex 只有 29% 的时间会给出正确答案。而且它编写的代码往往重构得很差,无法充分利用现有的解决方案。

Copilot 之所以比那些水平一般的程序员更糟糕,一个关键问题在于,它甚至没有尝试编译代码或检查代码是否有效,也没有考虑过自己是否真的遵循了文档的指示。

此外,Codex 没有接受过去一两年内创建代码的训练,因此它完全没学过最新版本、库和语言特性。例如,提示它创建 fastai 代码后,它只会给出使用 v1 API 的建议,而不是大约一年前发布的 v2 版本。

三、效果展示

https://youtu.be/4RfD5JiXt3A

https://d16xvuom8mr9m8.cloudfront.net/videos/completions/main.mp4

以下代码均通过编写注释,按tab自动生成

package com.example.demo.service;
 
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
 
import org.springframework.stereotype.Service;
 
/**
 * 该服务用于提供数学计算支持,包括但不限于加、减、乘、除、取平均、取余等
 */
@Service
public class MathService {
    //提供精确到小数点后5位的数值加法
    public BigDecimal plus(BigDecimal a, BigDecimal b){
        return a.add(b);
    }
 
    public BigDecimal plus(String a, String b){
        return plus(new BigDecimal(a), new BigDecimal(b));
    }
 
    public BigDecimal plus(Integer a, Integer b){
        return plus(new BigDecimal(a), new BigDecimal(b));
    }
 
    public BigDecimal plus(Long a, Long b){
        return plus(new BigDecimal(a), new BigDecimal(b));
    }
 
    public BigDecimal plus(Double a, Double b){
        return plus(new BigDecimal(a), new BigDecimal(b));
    }
     
     
    //提供精确到小数点后2位的数值减法
    public BigDecimal minus(BigDecimal a, BigDecimal b){
        return a.subtract(b);
    }
     
    public BigDecimal minus(String a, String b){
        return minus(new BigDecimal(a), new BigDecimal(b));
    }
 
    //统计分析list中元素最多的10个
    public Integer max10(List<Integer> list){
        return list.stream().max(Integer::compareTo).get();
    }
 
    //求list中所有数值的平均值
    public BigDecimal avg(List<BigDecimal> list){
        return list.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
    }
 
    //求list中所有数值的中位数
    //####################此处明显可以看到,中位数求值明显错误
    public BigDecimal mid(List<BigDecimal> list){
        return list.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
    }
    //####################此处明显可以看到,中位数求值明显错误
    //求list中所有数值的最大值
    public BigDecimal max(List<BigDecimal> list){
        return list.stream().max(BigDecimal::compareTo).get();
    }
 
    //求list中所有数值的最小值
    public BigDecimal min(List<BigDecimal> list){
        return list.stream().min(BigDecimal::compareTo).get();
    }
 
    //求list中最大值
    public Integer max(Integer[] list){
        return list.stream().max(Integer::compareTo).get();
    }
}

四、业界应用

WPS珠海金山,应用chatgpt开发自动化测试vbscript脚本,据说有一倍的开发效率提升,不过仍然需要花时间调试代码处理正确性

五、多产品对比

工具 收费 链接 模型 备注
copilot 个人:10$每月 100$每年
企业级:19$每人每月
https://github.com/features/copilot gpt4 按tab键自动填充代码
企业级受限于github账户以及与github账户关联的组织
chatgpt-genie ai 20$每月 https://github.com/ai-genie/chatgpt-vscode
https://www.loom.com/share/1a57be874e5d4ec099493cc68ed31e04
gpt4 用于vscode集成与chatgpt对话
需开启chatgpt会员,获取 secret key
https://platform.openai.com/account/api-keys
Tabnine AI Autocomplete
for Javascript, Python, Typescript, PHP, Go, Java, Ruby & more
免费14天
pro:12$每人每月
企业版:待深入沟通
https://www.tabnine.com/pricing gpt4 按tab键自动填充代码
vscode插件
试用过程中发现提示实现代码有逻辑错误
StarChat 免费 需要采购硬件训练 https://huggingface.co/blog/starchat-alpha
https://huggingface.co/bigcode/starcoder
https://huggingface.co/HuggingFaceH4/starchat-alpha
gpt like 采用GPU :
512 Tesla A100 训练耗时 24天
512 Tesla A100 * 8训练耗时 45分钟

Copilot

3月23日消息,当地时间3月22日,微软旗下代码托管平台GitHub发布了编程辅助工具Copilot的全新版本Copilot X,新版本接入GPT-4,并新增了聊天和语音功能,允许开发人员用自然语言询问如何完成特定的编码功能。

六、总结

1.多产品成熟度

copilot > chatgpt-genie ai > Tabnine AI Autocomplete > StarChat

2.编程辅助

综合来看AI应用于编程辅助,越是枯燥乏味的代码补全越是准确,的确可以提高写代码效率。

但是真正在写代码而不是模仿时,缺乏基于业务上下文的灵巧联想能力;同时也不能保证提示代码完全正确,需要测试验证;有时也会提示一些并不满足需求的实现。

**使用Copilot前**
这个功能不会写
1. google / stack overflow
2. ctrl C
3. ctrl V
4. 改改输入,改改输出
done!

**使用Copilot后**
这个功能不会写
1. 管他呢!先写个方法名,再来点注释
2. 猜一个库函数名,然后在IDE智能提示里选一个看起来差不多的,回车
3. 让copilot跳出来自动补全,一路tab
4. 改改输入,改改输出
done!
备注:步骤3,4 ctrl c + v可以省略

3.业务场景

围绕着开发测试脚本、单元测试等场景,不如效仿WPS直接采用ChatGPT。

标签:return,BigDecimal,代码,编程,list,LLM,Copilot,public,调研
From: https://www.cnblogs.com/snifferhu/p/17422298.html

相关文章

  • 实验四 函数与异常处理编程
    task1.py源代码1print(sum)2sum=423print(sum)4definc(n):5sum=n+16print(sum)7returnsum8sum=inc(7)+inc(7)9print(sum)运行截图答:不是同一个对象的名称。line1是内置作用域,line3,line11的sum是全局作用域,line7的sum是局部作用域......
  • 实验4 函数与异常处理编程
    实验任务1task1.py1print(sum)2sum=423print(sum)45definc(n):6sum=n+17print(sum)8returnsum910sum=inc(7)+inc(7)11print(sum)回答:不是,line1是Built-in内置作用域,line3和line11是Global全局作用域,line7是Local局部......
  • 实验4 函数与异常处理编程
    task1.py运行代码:1print(sum)2sum=423print(sum)45definc(n):6sum=n+17print(sum)8returnsum910sum=inc(7)+inc(7)11print(sum)运行结果:问题:不是,line1是build-infunctionsum,line3是指引入的sum=42,line7是指sum......
  • 2023.5.22编程一小时打卡
    一、问题描述:线性代数中的矩阵可以表示为一个row*column的二维数组,当row和column均为1时,退化为一个数,当row为1时,为一个行向量,当column为1时,为一个列向量。建立一个整数矩阵类matrix,其私有数据成员如下:introw;intcolumn;int**mat;建立该整数矩阵类matrix构造函数;建立一个*(......
  • 实验四 函数与异常处理编程
    实验任务一    task1    源代码     ViewCode    运行截图         函数名(line1)、参数(line3、7、11),其中line7为自定义函数inc内参数实验任务二    task2_1    源代码     ViewCode   ......
  • 编程打卡:面向对象程序设计
    importosimportsqlite3#Createadatabaseconnectionconn=sqlite3.connect('todo.db')#Createatodotablecur=conn.cursor()cur.execute('''CREATETABLEtodo(idINTEGERPRIMARYKEYAUTOINCREMENT,titleTEXTNOTNUL......
  • 实验4 函数与异常处理编程
    task1实验源码:print(sum)sum=42print(sum)definc(n):sum=n+1print(sum)returnsumsum=inc(7)+inc(7)print(sum)实验结果:问题回答:不是。line1中是Python的内置函数,line3是指lin2的全局变量sum,line7中是inc函数中的局部变量,line11中是指line......
  • Java网络编程----通过实现简易聊天工具来聊聊NIO
    前文我们说过了BIO,今天我们聊聊NIO。NIO是什么?NIO官方解释它为NewlO,由于其特性我们也称之为,Non-BlockingIO。这是jdk1.4之后新增的一套IO标准。为什么要用NIO呢?我们再简单回顾下BIO:阻塞式IO,原理很简单,其实就是多个端点与服务端进行通信时,每个客户端有一个自己的socket,他们与服......
  • < Python全景系列-5 > 解锁Python并发编程:多线程和多进程的神秘面纱揭晓
    欢迎来到我们的系列博客《Python全景系列》!在这个系列中,我们将带领你从Python的基础知识开始,一步步深入到高级话题,帮助你掌握这门强大而灵活的编程语法。无论你是编程新手,还是有一定基础的开发者,这个系列都将提供你需要的知识和技能。这是本系列的第五篇,我们将深入探讨Python中的......
  • 实验四 函数与异常编程处理
    实验任务1task1-1实验源码print(sum)sum=42print(sum)definc(n):sum=n+1print(sum)returnsumsum=inc(7)+inc(7)print(sum)实验截图问题:task1.py源码中,共有4处有python语句print(sum)(line1,line3,line7,line11)。这4处使用的标识......