Generating Code

生成代码

⚠️

本节正在开发中。

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

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

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

You are a helpful code assistant that can teach a junior developer how to code. Your language of choice is Python. Don't explain the code, just generate the code block itself.

基本示例

然后,User Message 将作为提示本身,包含您希望模型生成的特定代码的指令。以下是代码生成的第一个基本提示的快照。请注意,最终代码是由 Assistant 生成的。

CODE1

如果你想自己尝试,这里是提示:

Write code that asks the user for their name and say "Hello"

将评论转化为代码

你也可以利用这些LLM的代码生成能力,仅从注释生成代码。让我们看另一个将指令作为注释块传递的示例:

提示:

"""
1. Create a list of movies
2. Create a list of ratings for these movies
3. Combine them to make a json object of 10 movies with their ratings.
"""

输出:

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。虽然这些模型生成的代码可以工作,但你必须密切关注这些小细节,并始终确保测试你的代码。

完成函数或下一行

这些大型语言模型(LLMs)已经被集成到像GitHub Copilot这样的工具中,这使得它们对开发者非常有用。一个有用的功能是模型能够完成函数。

提示:

# function to multiply two numbers and add 75 to it
 
def multiply(

输出:

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

MySQL 查询生成

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

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

"""
Table departments, columns = [DepartmentId, DepartmentName]
Table students, columns = [DepartmentId, StudentId, StudentName]
Create a MySQL query for all students in the Computer Science department
"""

输出:

SELECT students.StudentId, students.StudentName
FROM students
INNER JOIN departments
ON students.DepartmentId = departments.DepartmentId
WHERE departments.DepartmentName = 'Computer Science';

模型生成了一个查询!然而,在这个例子中,我们虚构了数据库,因此我们没有数据库来测试生成的查询。如果你正在测试这个例子,创建这个数据库可能会很有用。幸运的是,你也可以使用ChatGPT来生成这个数据库。一种方法是使用上述提示的修改版本,稍微不同的指令来生成数据库模式:

Table departments, columns = [DepartmentId, DepartmentName]
Table students, columns = [DepartmentId, StudentId, StudentName]
Create a valid database schema with the above tables and columns

模型生成了以下模式:

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)
);

Given the database schema above, generate valid insert statements include 4 rows for each table.

带有插入语句的输出:

INSERT INTO departments (DepartmentId, DepartmentName)
VALUES (1, 'Computer Science'), (2, 'Mathematics'), (3, 'Physics'), (4, 'Biology');

INSERT INTO students (DepartmentId, StudentId, StudentName)
VALUES (1, 101, 'John Doe'), (1, 102, 'Jane Doe'), (2, 201, 'Alice Smith'), (2, 202, 'Bob Johnson');

现在你已经有了数据库和模拟数据,你可以测试原始查询。根据模拟数据,结果应该是两行,分别是Jane DoeJohn Doe

解释代码

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

如果你使用的是之前的相同系统消息,请注意你如何指示模型。例如,如果我们使用以下示例,模型会抱怨它是一个Python代码助手,但它仍然提供了解释。有时模型会拒绝生成你所指示的内容,因为它被设计为遵循系统消息。

提示:

SELECT students.StudentId, students.StudentName
FROM students
INNER JOIN departments
ON students.DepartmentId = departments.DepartmentId
WHERE departments.DepartmentName = 'Computer Science';

Explain the above SQL statement.

输出:

Sorry, as a code assistant in Python, I cannot generate SQL code. However, I can explain the purpose of the SQL statement provided. 

This SQL statement selects the `StudentId` and `StudentName` columns from the `students` table, where the `DepartmentName` column in the `departments` table is equal to 'Computer Science'. To achieve this, the statement performs an inner join on the `DepartmentId` column between the `students` and `departments` tables. 

In simpler terms, it is selecting the names and IDs of students who are enrolled in the Computer Science department.

编辑代码

示例即将推出!

调试代码

示例即将推出!

最佳实践

即将推出!