LLM代码生成器的挑战【GDELT早期观察】

越来越多的研究开始对LLM大模型生成的代码的质量提出质疑,尽管科技行业不断推出越来越多的旨在增强甚至取代人类编码员的工具。 随着我们(GDELT)继续探索和评估越来越多的此类工具,以下是我们的一些早期观察结果。

在这里插入图片描述

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

总的来说,我们发现代码生成器的实用性仅限于少数语言的基本任务,特别是 Python 和 HTML + JavaScript。 令人惊讶的是,尽管基本 shell 脚本在几乎每个现实世界的工作流程中都无处不在,但代码生成器通常在处理琐碎任务之外的任何事情上都表现得非常糟糕。 然而,最令人震惊的是,大型科技公司提供的编码助手在涉及这些公司自己的软件包时经常近乎无用,甚至无法输出能够完成最基本任务的代码。

当被要求生成其母公司开发的一个主要库的简单演示时,一个代码生成器不断输出与该库无关的参数和管道的随机排列,这证明了 RLHF 和其他训练和调整方法的至关重要性。 这些模型。 与围绕其使用的专家相比,他们不能仅仅获得给定库的用户手册,然后要求为其生成各种函数并在大多数情况下生成成功的代码。

要求代码生成器生成一个 Python 脚本,该脚本可以将具有特定标头集的 CSV 文件读取到 Pandas 数据框中,并且任何主要工具都可以生成完全可以通过的代码。 要求它用一种不太常见的语言做同样的事情,结果通常会是胡言乱语。 常见的与 Python 相关的软件通常都有强大的支持。 但是,即使是仅限于特定领域的一级软件也往往支持较差。 例如,虽然 ImageMagick 和 ffmpeg 是图像和视频处理事实上的黄金标准,但支持却参差不齐。

例如,当要求LLM:

将 ImageMagick 的‘convert’实用程序的临时目录更改为 /dev/shm

一个主要的代码生成器在运行四次不同的时间时会产生以下结果:

convert --tempdirectory="/dev/shm/"
convert --tmpdir="/dev/shm/"
convert --workingdir="/dev/shm/"
convert --useshmtmp

尽管基本的网络搜索都会返回正确的响应,但该实用程序只是尝试了看似合理但完全错误的参数的随机组合。 虽然在某些情况下,这些错误答案仍然可以作为起点,但在这种情况下,它们对于找到正确答案没有任何价值。

一些 LLM 的 JSON 输出之前经常出现的噪音前缀“json”会怎么样?让我们要求一个主要的生成器:

从 JSON 字符串中删除json前缀

LLM返回的答案如下:

jq -r . <string>

不幸的是,这不是一个非常有用的答案。 考虑到 JSON 在现代数据交换中的中心地位以及在 shell 脚本中删除前缀和后缀的通用性,这也令人惊讶。

另一个常见的 JSON 相关任务表现如何? 对于我们的 GCP Imagen 图像字幕演示,我们需要使用每个请求对图像的 Base64 版本进行编码。 我们使用如下提示:

使用 shell 命令Base64 对图像 ‘./RUSSIA1_20230215_083000_60_minut-000014.jpg’ 进行编码,并将 JSON 文件 ‘input.json’ 中的字段 ‘instances[0].image.bytesBase64Encoded’ 设置为编码后的图像。

反复运行,得到以下结果。 我们立刻明白的是,LLM 本质上是随机尝试命令行选项的不同排列,而不是根据对 jq 文档的实际理解进行操作:

jq -n -e '.instances[0].image.bytesBase64Encoded = base64(file("./RUSSIA1_20230215_083000_60_minut-000014.jpg"))' input.json > output.json 
jq -n -a '.instances[0].image.bytesBase64Encoded = base64file("./RUSSIA1_20230215_083000_60_minut-000014.jpg")' input.json > output.json 
jq -n -u '.instances[0].image.bytesBase64Encoded = base64("./RUSSIA1_20230215_083000_60_minut-000014.jpg")' input.json > output.json 
jq -n -r .instances[0].image.bytesBase64Encoded --base64 "./RUSSIA1_20230215_083000_60_minut-000014.jpg" input.json > output.json 
jq -n -b .instances[0].image.bytesBase64Encoded --encode --format base64 --inputfile "./RUSSIA1_20230215_083000_60_minut-000014.jpg" input.json > output.json 
jq -n .instances[0].image.bytesBase64Encoded --arg b64 "./RUSSIA1_20230215_083000_60_minut-000014.jpg" input.json > output.json 
jq -n --arg b64: base64("./RUSSIA1_20230215_083000_60_minut-000014.jpg") .instances[0].image.bytesBase64Encoded input.json > output.json 
jq -n --arg b64:.instances[0].image.bytesBase64Encoded base64("./RUSSIA1_20230215_083000_60_minut-000014.jpg") input.json > output.json 
jq '.instances[0].image.bytesBase64Encoded |= @base64("./RUSSIA1_20230215_083000_60_minut-000014.jpg")' input.json > output.json

对于一个代码生成器,我们甚至向它提供了 JQ 用户手册的相关部分作为提示的上下文框架,但无济于事。

这体现了开发人员和LLM驱动的代码生成器之间的一个关键区别:阅读文档的能力。 开发人员会查找 jq 的文档页面来查找其每个参数的描述,是否支持内置 Base64 编码,如果支持,如何使用它。 同时,像这样的高级用例通常不会在文档中列出,因此开发人员人员会交叉引用网络上的示例与文档并推断出他们的需求。 相比之下,这里的代码生成器似乎只是尝试对它在不同上下文中工作过的命令进行随机排列,并将它们粘合在一起,而不了解它们在 jq 中实际执行的操作或者它们是否存在。

对于像我们这样的生产环境来说至关重要的是,这些工具生成的代码通常针对可理解性和可读性进行优化,而不是针对安全性和安全性进行优化。 例如,当一个主要生成器被要求:

编写一个接受‘keyword’字段并使用它来关键字搜索 MySQL 数据库的 PHP 脚本
生成器输出了以下代码。 刚接触 SQL 的程序员可能会错过这段代码中明显的安全漏洞:

$keyword = $_POST["keyword"];
$sql = "SELECT * FROM table WHERE column_name LIKE '%$keyword%'";
$result = $conn->query($sql);

如果我们在提示中添加“安全”一词会怎么样?

编写一个接受‘keyword’字段并使用它来关键字搜索 MySQL 数据库的安全 PHP 脚本

乍一看,修改后的代码似乎完全合理,直到我们到达最后一行。 由于未知的原因,生成器生成了相当合理的代码,直到预计它会调用 execute(),然后它又恢复为不安全的代码:

$keyword = filter_input(INPUT_POST, 'keyword', FILTER_SANITIZE_STRING);
$sql = "SELECT * FROM table WHERE column_name LIKE ?";
$hand = $conn->prepare($sql);
$parm = "%$keyword%";
$hand->bind_param("s", $parm);
...
$result = $conn->query("SELECT * FROM table WHERE column_name LIKE '%" . $_POST["keyword"] . "%'");

这个特定的例子尤其阴险,因为新手程序员会错误地认为前面几行的某些内容通过全局行为改变改变了默认的 PHP 行为,而经验丰富的编码员在匆忙中可能会浏览前几行并发现它们看起来很合理 并且不向下滚动到 execute()命令(它们之间有大量注释和其他代码)并看到它被替换为 query()。

讽刺的是,当复制粘贴相同的代码并提示

此代码是否有任何漏洞?

生成器回答说:此 PHP 代码在技术上是准确的,但容易受到 SQL 注入的攻击,并使用危险的‘filter_input’函数。 目前尚不清楚它发现 filter_input有什么危险,但这次它正确地建议使用 $hand->execute()。

那么一个常见的被忽视的漏洞呢:密码硬编码。 许多开发人员将密码保存在快速测试脚本中,然后将其上传到 GitHub 等共享公共环境。 让我们问一个代码生成器

如何在 Python 脚本中安全地存储密码并防止其被读取?

令人惊讶的是,它提供了以下内容:

import base64
encodedpassword = b'BASE64ENCODEDPASSWORD'
password = base64.b64decode(encodedpassword).decode("utf-8")

第二个生成器提供了更合理的解决方案,将密码存储在脚本读取的环境变量中,但错误地解释说:环境变量提供了一种使脚本可以访问密码的安全方法。它们只能由指定的人读取 脚本,并且不能被系统上的任何其他用户或脚本访问。

虽然如果脚本是从在执行前设置环境变量的包装器 shell 脚本运行的,则情况可能是这样,但如果脚本通常作为从同一 shell 包装器运行的脚本序列的一部分运行,则情况也不会如此。 不熟悉 Unix 环境变量的程序员不一定能理解生成器解释中未说明的警告:

import os
password = os.environ.get("PASSWORD")

总的来说,我们对代码生成器的早期研究表明,对于需要快速模板代码来执行几种语言的常见任务的程序员来说,它们可以成为一个强大的助手,但当涉及到更复杂的任务或挑战时,经验丰富的程序员就会转向 StackOverflow 和其他网站 作为指导,代码生成器的作用只不过是像众所周知的键盘上的猴子一样操作。

有时,生成的排列之一虽然是错误的,但可能足够准确,可以为程序员提供找到正确答案所需的指针,但总体而言,它们在实际生产代码设计中的使用比通常描述的要有限得多。 虽然它们将像所有LLM一样不断改进,但其底层架构的基本局限性表明,公司在评估其潜力时要非常谨慎。


原文链接:LLM代码生成器的挑战 — BimAnt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/139101.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【ARM Coresight OpenOCD 系列 3 -- OpenOCD 常用命令与扫描链scan_chain】

文章目录 1.1 TAP Declaration1.1.1 扫描链 1.2 Autoprobing1.3 DAP declaration (ARMv6-M, ARMv7 and ARMv8 targets) 1.1 TAP Declaration 测试访问端口&#xff08;TAP&#xff09;是JTAG的核心。TAP扮演许多角色&#xff0c;包括&#xff1a; 调试目标&#xff1a;CPU TA…

linux安装git

目录 声明 前言 正文 &#xff08;1&#xff09;下载git压缩包 &#xff08;2&#xff09;git压缩包解压 &#xff08;3&#xff09;解压完成后需要进行源码的编译操作 a.首先进去到解压后的文件目录中&#xff1a; b.执行&#xff1a; 编译的过程中可能遇到的问题&am…

设计模式案例 (三)

文章目录 系列文章目录前言一、单例模式懒汉模式case 包饿汉模式case 包懒汉模式枷锁case 包 系列文章目录 第一章 设计模式案例 (一) 第二章 设计模式案例 &#xff08;二) 第三章 设计模式案例 &#xff08;二) 文章目录 系列文章目录前言一、单例模式懒汉模式case 包饿汉模…

给OFFICE增加一个功能搜索

OFFICE功能几乎是无限的。不论你怎么熟悉&#xff0c;总有出乎意料的功能。前几天我使用EXCEL时&#xff0c;发现一个功能改名了。于是我就想&#xff0c;OFFICE应该增加一个功能搜索&#xff1a; 提供一个搜索输入栏。这个已经有了。输入搜索字串弹出一个面板&#xff0c;附带…

Spring Boot: 约定优于配置的软件设计思想

文章目录 传统Spring框架的繁琐配置1. **管理jar包依赖**2. **维护web.xml**3. **维护Dispatch-Servlet.xml配置项**4. **应用部署到Web容器**5. **第三方组件集成到Spring IOC容器中的配置项维护** Spring Boot的简化与自动化1. Spring Boot Starter启动依赖2. 自动装配机制3.…

vue和小程序的异同之处

Vue和小程序&#xff08;微信小程序&#xff09;是两种不同的前端开发框架&#xff0c;它们有一些相似之处&#xff0c;但也有一些主要的区别。 相似之处&#xff1a; 都是用于构建前端应用程序的框架。都支持组件化开发&#xff0c;将页面拆分成独立的组件进行开发和复用。都…

【狂神说Java】Dubbo + Zookeeper

✅作者简介&#xff1a;CSDN内容合伙人、信息安全专业在校大学生&#x1f3c6; &#x1f525;系列专栏 &#xff1a;狂神说Java &#x1f4c3;新人博主 &#xff1a;欢迎点赞收藏关注&#xff0c;会回访&#xff01; &#x1f4ac;舞台再大&#xff0c;你不上台&#xff0c;永远…

【海德教育】什么是函授教育呢?

函授教育&#xff08;correspondence education &#xff09;是运用通信方式进行的一种远距离教育活动。学员以自学函授教材为主&#xff0c;面授为辅。教学环节包括自学教材&#xff0c;面授辅导&#xff0c;通信答疑&#xff0c;集中实验、实习、讲评作业&#xff0c;阶段测验…

跨域:利用JSONP、WebSocket实现跨域访问

跨域基础知识点&#xff1a;跨域知识点 iframe实现跨域的四种方式&#xff1a;http://t.csdnimg.cn/emgFr 注&#xff1a;本篇中使用到的虚拟主机也是上面iframe中配置的 目录 JSONP跨域 JSONP介绍 跨域实验&#xff1a; WebSocket跨域 websocket介绍 跨域实验 JSONP跨域…

javaSE学习笔记(五)集合框架-Collection,List,Set,Map,HashMap,Hashtable,ConcurrentHashMap

目录 四、集合框架 1.集合概述 集合的作用 集合和数组的区别 集合继承体系 数组和链表 数组集合 链表集合 2.Collection 方法 集合遍历 并发修改异常 3.List List集合的特有功能&#xff08;核心是索引&#xff09; 集合遍历 并发修改异常产生解决方案ListIterato…

PowerPoint to HTML5 SDK Crack

Convert PowerPoint to HTML5 Retaining Animations, Transitions, Hyperlinks, Smartart, Triggers and other multimedia effects World’s first and industry best technology for building web/mobile based interactive presentations directly from PowerPoint – that …

在Win11中使用docker安装Oracle19c

在Win11中使用docker安装Oracle19c 首先是去docker官网下 docker for windows安装oracle19c首先下载image运行镜像在工具中登录可能遇到的问题 首先是去docker官网下 docker for windows 官网&#xff1a; https://www.docker.com/get-started/ 如果Windows是专业版&#xff0…

HTML跳转锚点

跳转锚点适用于本页面和其他页面的任意标签的跳转以及JavaScript的运行 使用方法即给标签加上独一无二的id属性&#xff0c;再使用a标签跳转 如果是其他页面的标签只需加上其他页面的路径&#xff0c;eg.href"其他页面的路径#zp1" id属性的最好不要使用数字开头 <…

JVM在线分析-监控工具(jps, jstat, jstatd)

参考官方文档&#xff08;jdk11&#xff09; https://docs.oracle.com/en/java/javase/11/tools/troubleshooting-tools-and-commands.html#GUID-CB44BFBA-E5F9-4D80-8EE8-28E9F16BC451 1. 监控工具(jps, jstat, jstatd) jps -q Suppresses the output of the class name, J…

【六袆 - Framework】Angular-framework;前端框架Angular发展的由来0001;

Angular发展介绍&#xff0c;Angular17新特性 官方文档Angular框架发展的由来何为结构化、模块化 Angular17新特性 English unit Embarking on the journey of deep technical learning requires a well-structured approach, applicable to any programming language. The key…

python---设计模式

python中设计模式-单例模式 基于__new__方法实现 第一个设计&#xff1a; class MySingleton:def __init__(self):passdef __new__(cls, *args, **kwargs):passmysingleton1 MySingleton() mysingleton2 MySingleton() print(mysingleton1) print(mysingleton2) print(id(…

第 117 场 LeetCode 双周赛题解

A 给小朋友们分糖果 I 动态规划&#xff1a;设 p [ k ] [ i ] p[k][i] p[k][i] 为将 i i i 个糖果分给 k k k 个小朋友的方案数&#xff0c;先求 p [ 2 ] [ i ] p[2][i] p[2][i] &#xff0c;再求 p [ 3 ] [ n ] p[3][n] p[3][n] class Solution { public:using ll long …

CH11_重构API

将查询函数和修改函数分离&#xff08;Separate Query from Modifier&#xff09; function getTotalOutstandingAndSendBill() {const result customer.invoices.reduce((total, each) > each.amount total, 0);sendBill();return result; }function totalOutstanding() …

写在 Chappyz 即将上所之前:基于 AI 技术对 Web3 营销的重新定义

前不久&#xff0c;一个叫做 Chappyz 的项目&#xff0c;其生态代币 $CHAPZ 在 Seedify、Poolz、Decubate、ChainGPT、Dao Space 等几大 IDO 平台实现了上线后几秒售罄&#xff0c;并且 Bitget、Gate.io、PancakeSwap 等几大平台也纷纷表示支持&#xff0c;并都将在 11 月 13 日…

关于el-table+el-input+el-propover的封装

一、先放图片便于理解 需求&#xff1a; 1、el-input触发focus事件&#xff0c;弹出el-table(当然也可以为其添加搜索功能、分页) 2、el-table中的复选共能转化成单选共能 3、选择或取消的数据在el-input中动态显示 4、勾选数据后&#xff0c;因为分页过多&#xff0c;原先选好…