GPT-探索-的无穷潜力-从文本生成到代码编写 (探索版和普通版区别)
简介
自 GPT-4 发布以来,我们一直尝试让其修改长篇代码文件。尽管它在解决复杂问题或从零开始创建复杂系统方面表现出色,但在向一个 200 行代码的 Flask 服务器中插入日志时,它却举步维艰。显然后者更为实用。
挑战
我们经常听到的一种抱怨是:可以完成这项任务,但你们的 Sweep. 却不能。这是因为 GPT-4 并不能一致地编辑长篇文件,它往往会在中途写入
Restofthecode
,或错误地复制一段代码,而使用 ChatGPT 的人类可以轻松解决这个算法无法解决的问题。因此,我们不能简单地通过从头开始重写文件的方式来修改文件。
尝试和失败
以下是我们做过的所有让 GPT-4 修改文件的尝试,以及由于 GPT-4 未能正确格式化或计数而导致的成功和失败。
版本 0:简单地重写整个文件
如前所述,完全重写文件存在两个主要问题:
-
对于超过 50 行的文件,GPT-4 最终会生成类似
Restofthecode
的内容。 - 文件太长。拥有 k 个令牌的文件将需要 k 个输入令牌和 k 个输出令牌。
- GPT-4 会错误地复制代码。它有时会删除或添加额外的注释或空白,或更改缩进。
我们来看一个如何解决第一个问题的示例。在本文中,我将使用以下简短的 Flask 服务器实现作为我们正在编辑的文件的示例。出于简洁考虑,我选择了一个简短的示例,因此对于这个特定示例,GPT-4 也许不会出现这些错误,但在较大的文件中经常会出现类似的错误。
Flask application factory
from flask import Flask, jsonify, request
app = Flask(__name__)
Example data
tasks = [
{
'id': 1,
'title': 'Buy milk',
'done': False
},
{
'id': 2,
'title': 'Clean the house',
'done': False
}
]
Routes
@app.route('/tasks')
def get_tasks():
return jsonify({'tasks': tasks})
@app.route('/tasks', methods=['POST'])
def create_task():
if not request.json:
return jsonify({'error': 'Bad request'}), 400
task = request.json
tasks.append(task)
return jsonify({'task': task}), 201
@app.route('/tasks/
', methods=['PUT'])
def update_task(task_id):
task = next((task for task in tasks if task['id'] == task_id), None)
if not task:
return jsonify({'error': 'Not found'}), 404
if not request.json:
return jsonify({'error': 'Bad request'}), 400
task.update(request.json)
return jsonify({'task': task})
@app.route('/tasks/
', methods=['DELETE'])
def delete_task(task_id):
task = next((task for task in tasks if task['id'] == task_id), None)
if not task:
return jsonify({'error': 'Not found'}), 404
tasks.remove(task)
return jsonify({'result': 'OK'})
if __name__ == '__main__':
app.run(debug=True)
要求 GPT-4 添加日志,我们可能会得到以下内容:
Flask application factory
from flask import Flask, jsonify, request, logging
app = Flask(__name__)
Example data
tasks = [
{
'id': 1,
'title': 'Buy milk',
'done': False
},
{
'id': 2,
'title': 'Clean the house',
'done': False
}
]
Routes
@app.route('/tasks')
def get_tasks():
logging.info('Getting all tasks')
return jsonify({'tasks': tasks})
@app.route('/tasks', methods=['POST'])
def create_task():
logging.info('Creating a task')
if not request.json:
return jsonify({'error': 'Bad request'}), 400
task = request.json
tasks.append(task)
logging.info('Task created')
return jsonify({'task': task}), 201
@app.route('/tasks/
显然,我们不能仅凭这段代码创建拉取请求(PR)!我们必须撤销所有
Restofthecode
的修改。
版本 1:使用 DiffLib 修复
restofthecode
救命稻草
最简单的解决方案似乎是检查两个文件的差异,并回滚所有带有
Restofthecode
、
Remainingofthecode
部分的内容。上面示例的差异如下所示:
- Flask application factory
+ Flask applicationfactory
from flask import Flask, jsonify, request, logging
现在,我们只需撤销每个删除后面带一个形如
+Restoftest
注释的部分。我们使用以下方法检查这些注释:
diff_without_rest = '\n'.join([line for line in diff.splitlines() if not line.startswith('')])
在这个示例中,它解决了问题:我们最终得到了我们所期望的结果,即在每个函数的开头有一个打印语句。
限制
不幸的是,这个差异回滚系统的能力仍然相当有限。有时 GPT-4 会写下诸如
Moreuntitestshere
、
Completetheimplementation
、... 等注释,有无限多可能。有些情况下,差异算法无法找到具体应当被替换的行。例如,让我们要求 GPT-4 添加一个删除端点,它的回应是:
Flask application factory
from flask import Flask, jsonify, request, logging
app = Flask(__name__)
@app.route('/tasks')
def get_tasks():
logging.info('Getting all tasks')
return jsonify({'tasks': tasks})
@app.route('/tasks', methods=['POST'])
def create_task():
logging.info('Creating a task')
if not request.json:
return jsonify({'error': 'Bad request'}), 400
task = request.json
tasks.append(task)
logging.info('Task created')
return jsonify({'task': task}), 201
@app.route('/tasks/
', methods=['PUT'])
def update_task(task_id):
logging.info('Updating a task')
task = next((task for task in tasks if task['id'] == task_id), None)
if not task:
return jsonify({'error': 'Not found'}), 404
if not request.json:
return jsonify({'error': 'Bad request'}), 400
task.update(request.json)
logging.info('Task updated')
return jsonify({'task': task})
Delete endpoint
@app.route('/tasks/
', methods=['DELETE'])
defdelete_task(task_id):
logging.info('Deleting a
GPT是什么?
GPT是生成式预训练模型(Generative Pre-trained Transformer)的缩写,它是一种基于Transformer网络架构的人工智能技术。 GPT模型通过大规模的预训练数据,学习自然语言处理的规律,从而具备生成自然语言文本的能力。 它可以根据输入的文本生成高质量、连贯的自然语言文本,使得计算机系统能够更好地理解和生成自然语言。 GPT技术在自然语言处理领域有着广泛的应用前景,如文本生成、文本改写、机器翻译等。 景联文科技作为长三角地区规模最大的AI基础数据服务商之一,拥有千人从业经验丰富的数据标注团队及丰富的图像和文本标注经验,可为ChatGPT模型提供图像和NLP相关数据采集和数据标注服务,根据客户需求迅速调配有相关经验的标注员。 数据质量是模型效果的必要条件,优质的标注人员又是数据质量的保障。 景联文科技拥有丰富的专家资源,有代码、医学、高等数学、世界常识、翻译、文学创作等领域专家可对垂直领域数据信息进行标注,从而保证数据质量,满足当前标注需求。 针对数据定制标注服务,景联文科技拥有先进的数据标注平台与成熟的标注、审核、质检机制,支持计算机视觉:语义分割、矩形框标注、多边形标注、关键点标注、3D立方体标注、2D3D融合标注、目标追踪、属性判别等多类型数据标注;支持自然语言处理:文本清洗、OCR转写、情感分析、词性标注、句子编写、意图匹配、文本判断、文本匹配、文本信息抽取、NLU语句泛化、机器翻译等多类型数据标注。 景联文科技提供的产品为全链条AI数据服务,从数据采集、清洗、标注、到驻场的全流程、垂直领域数据解决方案一站式AI数据服务,满足了不用应用场景下的各类数据采集标注业务的需要,协助人工智能企业解决整个人工智能链条中数据采集标注环节的相对应问题,推动人工智能在更多地场景下实现落地应用,构建完整的AI数据生态。 景联文科技|数据采集|数据标注助力人工智能技术,赋能传统产业智能化转型升级
GPT模型是什么?
ChatGPT(全名:Chat Generative Pre-trained Transformer),是OpenAI 研发的一款聊天机器人程序,于2022年11月30日发布 。ChatGPT是人工智能技术驱动的自然语言处理工具,它能够基于在预训练阶段所见的模式和统计规律,来生成回答,还能根据聊天的上下文进行互动,真正像人类一样来聊天交流,甚至能完成撰写邮件、视频脚本、文案、翻译、代码,写论文等任务。
GPT模型,尤其是它们使用的Transformer架构,代表着AI研究的重大突破。GPT模型的兴起是机器学习广泛采用的转折点,因为该技术现在可用于自动化和改进各种任务,从语言翻译和文档摘要到撰写博客文章、构建网站、设计视觉效果、制作动画、编写代码、研究复杂话题,甚至创作诗歌。这些模型的价值在于其速度和运行规模。例如,您可能需要几个小时来研究、撰写和编辑一篇关于核物理的文章,而GPT模型只需几秒钟就能生成一篇。GPT模型引发AI领域对于实现通用人工智能所做的研究,这项研究意味着机器可以帮助组织达到新的生产力水平,重塑其应用程序和客户体验。
景联文科技是AI基础数据行业的头部企业,拥有千人从业经验丰富的数据标注团队及丰富的图像和文本标注经验,可为ChatGPT模型的大语言模型提供图像和NLP相关数据采集和数据标注服务,并根据客户需求迅速调配有相关经验的标注员。网页链接
针对数据定制标注服务,景联文科技拥有先进的数据标注平台与成熟的标注、审核、质检机制,支持计算机视觉:语义分割、矩形框标注、多边形标注、关键点标注、3D立方体标注、2D3D融合标注、目标追踪、属性判别等多类型数据标注;支持自然语言处理:文本清洗、OCR转写、情感分析、词性标注、句子编写、意图匹配、文本判断、文本匹配、文本信息抽取、NLU语句泛化、机器翻译等多类型数据标注。
景联文科技提供的产品为全链条AI数据服务,从数据采集、清洗、标注、到驻场的全流程、垂直领域数据解决方案一站式AI数据服务,满足了不用应用场景下的各类数据采集标注业务的需要,协助人工智能企业解决整个人工智能链条中数据采集标注环节的相对应问题,推动人工智能在更多地场景下实现落地应用,构建完整的AI数据生态。
免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。