跳到主要内容

代码生成

像 ChatGPT 这样的 LLM 在代码生成方面非常有效。在本节中,我们将介绍如何使用 ChatGPT 进行代码生成的许多示例。

以下所有示例均使用 OpenAI 的 Playground(聊天模式)和 gpt-3.5-turbo 模型。

与 OpenAI 的所有聊天模型一样,您可以使用 系统消息 来定义响应的行为和格式。我们将在提示示例中使用以下系统消息:

你是一个可以教初级开发人员如何编码的有用的代码助手。你的首选语言是 Python。不要解释代码,只生成代码块本身。

基本示例

然后,用户消息 将是带有指示您希望模型生成的特定代码的提示本身。下面是代码生成的第一个基本提示的快照。请注意,最终代码是由 助手 生成的。

CODE1

如果您想自己尝试,请看下面的提示:

编写代码,询问用户的姓名并说“你好”

将注释转换为代码

您还可以仅通过注释使用这些 LLM 的代码生成能力来生成代码。让我们看另一个示例,它将指令作为注释块传递:

提示:

"""
1. 创建电影列表
2. 为这些电影创建评分列表
3. 将它们组合在一起,制作一个包含 10 部电影及其评分的 JSON 对象。
"""

输出:

movies = ["The Shawshank Redemption", "The Godfather", "The Dark Knight", "Schindler's List", "Pulp Fiction", "The Lord of the Rings: The Return of the King", "Forrest Gump", "Star Wars: Episode V - The Empire Strikes Back", "Inception", "The Silence of the Lambs"]

ratings = [9.3, 9.2, 9.0, 8.9, 8.9, 8.9, 8.8, 8.7, 8.7, 8.6]

movie_ratings = {}

for i in range(len(movies)):
movie_ratings[movies[i]] = ratings[i]

json_object = json.dumps(movie_ratings, indent=4)

print(json_object)

生成的代码看起来像是可工作的代码。但是,输出中没有一个重要的 import 语句,即 import json。虽然这些模型生成了可工作的代码,但您必须密切关注诸如此类的细节,并始终确保测试您的代码。

完整函数或下一行

这些 LLM 也已被整合到工具中,如 GitHub Copilot,这使它们对开发人员非常有用。模型的一个有用功能是能够完成函数。

提示:

# 用于将两个数字相乘并加 75 的函数

def multiply(

输出:

a, b):
result = a * b
result += 75
return result

MySQL 查询生成

除了上面的基本代码生成示例,您还可以使用该模型生成可用于编程其他方面的有用代码,比如创建和测试 MySQL 查询。

假设您有一个包含一些信息的数据集,您可以将其作为提示的一部分,并指示它生成一个特定的查询。例如:

"""
表 departments,列 = [DepartmentId, DepartmentName]
表 students,列 = [DepartmentId, StudentId, StudentName]
为计算机科学系中的所有学生创建一个 MySQL 查询
"""

输出:

SELECT students.StudentId, students.StudentName
FROM students
INNER JOIN departments
ON students.DepartmentId = departments.DepartmentId
WHERE departments.DepartmentName = '计算机科学';

模型生成了一个查询!但是,在这个示例中,我们编造了数据库,因此我们没有数据库来测试生成的查询。如果您正在测试这个示例,创建这个数据库可能会很有用。幸运的是,您也可以使用 ChatGPT 为您生成这个。一种方法是使用略微不同的指令的修改版本来生成数据库架构:

Table departments, columns = [DepartmentId, DepartmentName]
Table students, columns = [DepartmentId, StudentId, StudentName]
使用上述表和列创建一个有效的数据库架构

模型生成了以下架构:

CREATE TABLE departments (
DepartmentId INT PRIMARY KEY,
DepartmentName VARCHAR(50)
);

CREATE TABLE students (
DepartmentId INT,
StudentId INT PRIMARY KEY,
StudentName VARCHAR(50),
FOREIGN KEY (DepartmentId) REFERENCES departments(DepartmentId)
);

您可以使用类似 sqliteonline.com 的工具创建一个临时数据库。

您还需要虚拟数据来测试原始生成的查询是否有效。让我们也使用 ChatGPT 来做这个!提示可能看起来像下面这样:

CREATE TABLE departments (
DepartmentId INT PRIMARY KEY,
DepartmentName VARCHAR(50)
);

CREATE TABLE students (
DepartmentId INT,
StudentId INT PRIMARY KEY,
StudentName VARCHAR(50),
FOREIGN KEY (DepartmentId) REFERENCES departments(DepartmentId)
);
给定上述数据库模式,生成每个表格的包含4行的有效插入语句。

带有插入语句的输出:

INSERT INTO departments (DepartmentId, DepartmentName)
VALUES (1, '计算机科学'), (2, '数学'), (3, '物理'), (4, '生物');

INSERT INTO students (DepartmentId, StudentId, StudentName)
VALUES (1, 101, '约翰·杜'), (1, 102, '简·杜'), (2, 201, '爱丽丝·史密斯'), (2, 202, '鲍勃·约翰逊');

现在您已经有了数据库和虚拟数据,可以测试原始查询。根据虚拟数据,结果应为包含 简·杜约翰·杜 两行。

代码解释

如果您正在学习某种编程语言,提示模型解释某些代码片段可能会很有用。让我们重用上面生成的查询,并要求模型解释它。

如果您使用前面的系统消息,要注意您如何指示模型。例如,如果我们使用以下示例,模型会抱怨它是 Python 中的代码助手,但它仍然会提供解释。有时模型会拒绝生成您指示的内容,因为它设计为遵循系统消息。

提示:

SELECT students.StudentId, students.StudentName
FROM students
INNER JOIN departments
ON students.DepartmentId = departments.DepartmentId
WHERE departments.DepartmentName = '计算机科学';

解释上述 SQL 语句。

输出:

抱歉,作为 Python 中的代码助手,我无法生成 SQL 代码。但是,我可以解释所提供的 SQL 语句的目的。

这个 SQL 语句从 `students` 表中选择 `StudentId` 和 `StudentName` 列,其中 `departments` 表中的 `DepartmentName` 列等于 '计算机科学'。为了实现这一目的,该语句在 `students` 和 `departments` 表之间的 `DepartmentId` 列上执行内连接。

简单来说,它选择了在计算机科学系就读的学生的姓名和学号。