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

news2025/1/12 9:03:36

越来越多的研究开始对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.coloradmin.cn/o/1198517.html

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

相关文章

将复数中的虚部取反 即对复数求共轭 numpy.conjugate()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 将复数中的虚部取反 即对复数求共轭 numpy.conjugate() [太阳]选择题 请问以下代码中执行语句输出结果是&#xff1f; import numpy as np a np.array([1 2j, 3 - 4j]) print("【显示…

Linux学习教程(第二章 Linux系统安装)1

第二章 Linux系统安装 学习 Linux&#xff0c;首先要学会搭建 Linux 系统环境&#xff0c;也就是学会在你的电脑上安装 Linux 系统。 很多初学者对 Linux 望而生畏&#xff0c;多数是因为对 Linux 系统安装的恐惧&#xff0c;害怕破坏电脑本身的系统&#xff0c;害怕硬盘数据…

第二十五节——Vuex--历史遗留

文档地址 Vuex 是什么&#xff1f; | Vuex version V4.x 一、概念 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 库。它采用集中式存储管理应用的所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化。一个状态自管理应用包含以下几个部…

大数据Doris(二十一):数据导入演示

文章目录 数据导入演示 一、启动zookeeper集群(三台节点都启动) 二、启动hdfs集群

计算机网络——物理层-传输方式(串行传输、并行传输,同步传输、异步传输,单工、半双工和全双工通信)

目录 串行传输和并行传输 同步传输和异步传输 单工、半双工和全双工通信 串行传输和并行传输 串行传输是指数据是一个比特一个比特依次发送的。因此在发送端和接收端之间&#xff0c;只需要一条数据传输线路即可。 并行传输是指一次发送n个比特&#xff0c;而不是一个比特&…

图论13-最小生成树-Kruskal算法+Prim算法

文章目录 1 最小生成树2 最小生成树Kruskal算法的实现2.1 算法思想2.2 算法实现2.2.1 如果图不联通&#xff0c;直接返回空&#xff0c;该图没有mst2.2.2 获得图中的所有边&#xff0c;并且进行排序2.2.2.1 Edge类要实现Comparable接口&#xff0c;并重写compareTo方法 2.2.3 取…

强化学习中蒙特卡罗方法

一、蒙特卡洛方法 这里将介绍一个学习方法和发现最优策略的方法&#xff0c;用于估计价值函数。与前文不同&#xff0c;这里我们不假设完全了解环境。蒙特卡罗方法只需要经验——来自实际或模拟与环境的交互的样本序列的状态、动作和奖励。从实际经验中学习是引人注目的&#x…

如何使用pngPackerGUI_V2.0,将png图片打包成plist的工具

pngPackerGUI_V2.0&#xff0c;此软件是在pngpacker_V1.1软件基础之后&#xff0c;开发的界面化操作软件&#xff0c;方便不太懂命令行的小白快捷上手使用。 具体的使用步骤如下&#xff1a; 1.下载并解压缩软件&#xff0c;得到如下目录&#xff0c;双击打开 pngPackerGUI.e…

SFTP远程终端访问

远程终端访问 当服务器部署好以后&#xff0c;除了直接在服务器上操作&#xff0c;还可以通过网络进行远程连接访问CentOS 7默认支持SSH(Secure Shell, 安全Shell 协议),该协议通过高强度的加密算法提高了数据在网络传输中的安全性&#xff0c;可有效防止中间人攻击(Man-in-th…

AI绘画神器DALLE 3的解码器:一步生成的扩散模型之Consistency Models

前言 关于为何写此文&#xff0c;说来同样话长啊&#xff0c;历程如下 我司LLM项目团队于23年11月份在给一些B端客户做文生图的应用时&#xff0c;对比了各种同类工具&#xff0c;发现DALLE 3确实强&#xff0c;加之也要在论文100课上讲DALLE三代的三篇论文&#xff0c;故此文…

web:[网鼎杯 2018]Fakebook

题目 点进页面&#xff0c;页面显示为 查看源代码 用dirsearch扫一下&#xff0c;看一下有什么敏感信息泄露 扫出另一个flag.php和robots.txt&#xff0c;访问flag.php回显内容为空 请求robots.txt 网页提示/user.php.bak&#xff0c;直接访问会自动下载.bak备份文件 进行代码…

Flink在汽车行业的应用【面试加分系列】

很多同学问我为什么要发这些大数据前沿汇报&#xff1f; 一方面是自己学习完后觉得非常好&#xff0c;然后总结发出来方便大家阅读&#xff1b;另外一方面&#xff0c;看这些汇报对你的面试帮助会很大&#xff0c;特别是面试前可以看看即将面试公司在大数据前沿的发展动向&…

DevOps平台两种实现模式

我们需要一个DevOps平台 要讨论DevOps平台的实现模式&#xff0c;似乎就必须讨论它们的概念定义。然而&#xff0c;当大家要讨论它们的定义时&#xff0c;就像在讨论薛定谔的猫。 A公司认为它不过是自动化执行Shell脚本的平台&#xff0c;有些人认为它是一场运动&#xff0c;另…

代码随想录算法训练营|动态规划三十八天~四十三天

动态规划五部曲&#xff1a; 1、确定dp数组以及下标的含义 2、确定递推公式 3、dp数组如何初始化 4、确定遍历顺序 5、举例推导dp数组 三十八天 斐波那契数 509. 斐波那契数 - 力扣&#xff08;LeetCode&#xff09; public class Solution {public int MonotoneIncre…

训练日志刷屏使我痛苦,我开发了VLog

训练日志刷屏使我痛苦&#xff0c;我开发了VLog&#xff0c;可以在任意训练代码中轻松使用~ 例如&#xff0c;通过callback嵌入到lightgbm/catboost/transformers/ultralytics&#xff0c;乃至keras库的训练代码流程中~ before: after&#xff1a; 为什么不用tensorboard或者wa…

Linux的make和Makefile

目录 一、 介绍二、快速使用三、依赖关系和依赖方法四、语法 一、 介绍 1、makefile带来的好处就是——“自动化编译”&#xff0c;一旦写好&#xff0c;只需要一个make命令&#xff0c;整个工程完全自动编译&#xff0c;极大的提高了软件开发的效率。 2、make是一个命令工具&…

dcat admin 各种问题

样式问题 如何根据条件给表格数据栏添加背景色 use Illuminate\Support\Collection;protected function grid(){return Grid::make(new BookArticle(), function (Grid $grid) {... 其他代码// Collection的完整路径&#xff1a;Illuminate\Support\Collection;$grid->row…

火星加载WMTS服务

这是正常的加载瓦片 http://192.168.1.23:8008/geoserver/mars3d/gwc/service/wmts?tilematrixEPSG%3A4326%3A7&layermars3d%3Abuffer&style&tilerow46&tilecol197&tilematrixsetEPSG%3A4326&formatimage%2Fpng&serviceWMTS&version1.0.0&…

超详细介绍对极几何和立体视觉及 Python 和 C++实现

您是否想过为什么戴着特殊的 3D 眼镜观看电影时可以体验到美妙的 3D 效果?或者为什么闭上一只眼睛很难接住板球?这一切都与立体视觉有关,立体视觉是我们用双眼感知深度的能力。这篇文章使用 OpenCV 和立体视觉为计算机提供这种感知深度的能力。代码以 Python 和 C++ 形式提供…

迷雾系统-1 地图及其区块

创建UGUI地图,每块地块&#xff08;Image&#xff09;上添加AreaNode脚本&#xff0c;根据PolygonCollider2D可视化编辑碰撞体形状&#xff0c;并以此生成Mesh Mc_AreaNode脚本&#xff1a; private GameObject _objPrefab; //创建的Mesh预制体private float _canvasPosZ;pr…