编码感受和评估
在过去一周多的时间里,我在的协助下,生成了做一个简单编辑器的产品文档、技术方案文档,然后在这个基础上,进行程序的编码。
使用的工具纪要
为了更全面地感受AIIDE对研发过程的影响,我特意选择了一个我不太了解的项目,并且以整体形式做下来,从中深度感受AIIDE对我们开发过程的影响。
产品文档和技术文档生成的辅助工具:,-
编程过程使用的编程工具:+/,
涉及的编程语言:、CSS、HTML、、SQL
涉及的组成部分:前端、后台、数据库、相关的图形处理接口
累计耗时:在过去一周多,断断续续地使用了15+小时(包括生成产品和技术方案文档,有不少时间用于排查程序Bug)。
代码规模:1500行+
个人使用感受记录 使用的第一感受
产生一种惊喜感,发现用它来做我所不了解的项目,也能对我形成比较大的帮助。
显著减少了我查询和搜索技术文档的时间,通过对话,能直接完成不少的工作。
是一种开发模式的变革,虽然现在还存在不足,但是,潜力无限!
关于研发效率
会有提升,但是比例不会很大,个人感觉30%左右,因为生成的结果代码仍然需要进一步的详细和测试。
在描述非常详细的情况下,例如登录功能,它生成了详细的异常判断逻辑,这一块的生成非常快。当提供给它的比较模糊时,则需要多次互动,而且未必能提供符合我们预期的代码。
关于IDE的选择(推荐)
非常推荐使用,它不仅支持对话,而且能够选中指定代码,让它做逻辑修改,它会将修改记录反馈出来,问你是否?并且,能够清晰看见它进行的代码改动。支持精细化控制,使用过程中,个人的强烈感受到,选中的范围越小、越细,它的结果越好,错误也越少。
如下图所示(我让它给添加样式):
指定具体的函数,让它添加代码注释。
注释添加的结果:
关于它的不足之处(关键阅读项):
代码规模少的时候,例如只有1个文件,100-200行代码时,它生成和修改都比较准确,当代码规模和文件逐渐变多,逻辑变多时,它的生成和修改变得有误,会遇到包括变量未定义、错删代码、没有考虑上下文逻辑等问题。缩小代码的选中范围、让变得更详细能够一定程度上减少问题,但是,仍然会出现。
生成的代码中,偶尔会含有不存在的、但是命名很通用的样式、函数,它有时会默认认为你的上下文中存在这种“通用”函数,实际上并没有。
如果我修改的逻辑要同时改动多个文件,该功能并不支持,它目前只支持一个文件一个文件修改。不过,使用对话功能,它能以对话的方式告诉我们要在多个文件里修改代码,此时要我们手动复制和修改代码。
开发者对开发领域具体问题的认知仍然非常重要,如果开发者在里没有提及,则它生成的代码也不考虑。例如,需要等待img.src的load完成后再重新刷新画布,如果不提及,它的代码就是直接刷新画布,此时由于img并没有load完成,画布刷新的内容是空白的。
相比于生成文档、注释,程序代码对错误几乎是零容忍度的,一个未定义的变量就可以让整个程序完全终止运行,但是,生成文档有少量错误是不影响文档的阅读的,出版社对著作出版要求错误率达到万分之一。对于一个大规模程序而言,这个要求要高得多。
根据个人对NLP领域AIGC的理解,AIGC本质是根据前文推理下文,模型精度越高,推理越准确,对于代码来说,则要求推理的准确度非常高,后面2-3代的GPT可能能解决该问题。
对话中,反馈结果以英文为主,偶尔才能看见中文。
简要总结:
短期看,GPT还远不足以取代程序员,长期看,它的潜力无限,是一种趋势,随着它持续升级和迭代,预计它对研发效率的提升会越来越多。
我们应当拥抱AIIDE,构造更详细、逻辑清晰的,充分利用它的能力提升研发效率。
编码过程纪要(部分): 帮我生成一个基于VueJS的登录HTML页面,包含如下逻辑:
与其他子模块的接口:无
业务数据描述:
边界值处理:
修改为引用项目文件夹内的vue.js
登陆界面比较简陋,能帮我美化一下吗?
我想把页面元素居中
页面中的两个input没有对齐,帮我修改CSS
链接数据库操作
写一段代码,它的主要逻辑是读取用户表的账号密码,然后判断url请求传入的账号密码是否匹配,并且该文件能以web服务形式运行。
相关信息:链接MySQL数据库,IP是111.230.249.101,port是20086,库名是。
表结构:`users`(
`id`int(11)T,
“(16),
“(32),
“,
(`id`),
“(“)
)===utf8;
它的表编码为,不正确,修改为utf8
帮我写一个web图片编辑器页面,包含以下功能:
上传或的效果,表现比较差:
修复x报错
图片上传后,图片展示在里变形了,请修复该问题。画布先定义为1000*800
(AI一直没有找到,是人工找出来的)
用div包起来,画布固定到页面的右侧
画布支持上传多个图片,这些图片是共存的,并且,每个图片可以在画布中被移动.
这次它写得比较好,基本上只需要很少的修改就一步到位了。
这是上一条命令:画布支持上传多个图片,这些图片是共存的,并且,每个图片可以在画布中被移动。在上一条命令的基础上,除了支持移动之外,还支持选中图片后的放大和缩小。
它提供的代码犯了一个小错,上下文理解不到位,变量名不对。(人工:手动修正)
在放大缩小问题上,它总是给我加这个事件,这个事件并不是我想要的,我想要的是稿定编辑器的那种效果。
但是,它添加的边框总是不生效,问了它多次,它也回答不出来。
人工发现,代码有Bug,这句话让边框自动消失了。
比较正常的代码需要保存,AI有时会把代码改乱,导致之前有的功能消失,例如,多张图片共存的能力。
在编辑器中,支持图片对象的选中和拖动
先问:基于实现的web编辑器中,要实现选中一张图,出现一个边框,可以拖过拖拉边框实现放大和缩小,html和JS代码要怎么实现?
,它们提供了一些示例代码和解释,如何使用实现图片的拖拽和缩放功能。基本思路是:
当选中某个图片时:
就当前阶段的AI而言,还是需要懂得代码,只是自己写的代码量变少了,程序员仍然有其价值。
添加缩放按钮,实现放大和缩小功能
AI实现了这个功能,但是没有考虑保持图片原来的比例。
修正:
编辑器简单旋转功能开发
增加旋转后,坐标计算错误:
让它纠正,它一直都改不过来,一直错(后来我手动修正)。
创建后端服务代码()
给当前代码增加跨域:放开cess–Allow-,允许跨域访问
from flask import Flask, request, jsonify
app = Flask(__name__)
# Connect to the MySQL database
mydb = mysql.connector.connect(
host="111.230.249.101",
port="20086",
user="root",
password="hello",
database="editor"
)
# Define a route for the login page
@app.route('/login')
def login():
# Get the username and password from the URL request
username = request.args.get('username')
password = request.args.get('password')
# Query the user table for the given username and password
mycursor = mydb.cursor()
sql = "SELECT * FROM users WHERE username = %s AND password = %s"
val = (username, password)
mycursor.execute(sql, val)
result = mycursor.fetchone()
# If the query returns a result, the username and password are valid
if result:
response = jsonify({"message": "Login successful"})
response.headers.add('Access-Control-Allow-Origin', '*')
return response
else:
response = jsonify({"message": "Invalid username or password"})
response.headers.add('Access-Control-Allow-Origin', '*')
return response
if __name__ == '__main__':
app.run()
能统一添加吗?这样每行都添加比较麻烦?
下文中的CORS(app)就实现了统一添加跨域头。
from flask import Flask, request, jsonify
from flask_cors import CORS
app = Flask(__name__)
CORS(app)
# Connect to the MySQL database
mydb = mysql.connector.connect(
***
)
# Define a route for the login page
@app.route('/login', methods=['POST'])
def login():
# Get the username and password from the request body
data = request.json
username = data['username']
password = data['password']
# Query the user table for the given username and password
mycursor = mydb.cursor()
sql = "SELECT * FROM users WHERE username = %s AND password = %s"
val = (username, password)
mycursor.execute(sql, val)
result = mycursor.fetchone()
# If the query returns a result, the username and password are valid
if result:
return jsonify({"message": "Login successful"})
else:
return jsonify({"message": "Invalid username or password"})
if __name__ == '__main__':
app.run()
This IP 171.88.32.138 has been from to our . If you this to be in error, us at .
When us, the in the email:
: block
IP: 171.88.32.138
RAY ID:
GEO: CN
This IP 171.88.32.138 has been from to our . If you this to be in error, us at .
When us, the in the email:
: block
IP: 171.88.32.138
RAY ID:
GEO: CN