⚠️Генерация кода

Этот раздел находится в разработке.

Языковые модели с программной помощью (Program-Aided Language Models), такие как ChatGPT, очень эффективны в генерации кода. В этом разделе мы рассмотрим множество примеров использования ChatGPT для генерации кода.

Все примеры ниже используют OpenAI Playground (режим чата) и модель gpt-3.5-turbo.

Как и у всех чат-моделей от OpenAI, вы можете воспользоваться функцией «Системное сообщение» для управления поведением и структурой ответов данной модели. Мы планируем использовать следующее "Системное сообщение" для создания примеров промптов:

Вы - полезный ассистент по кодированию, способный научить младшего разработчика программированию. Ваш выбранный язык - Python. Не объясняйте код, просто создайте сам блок кода.

Основной пример


User Message будет являться самим промптом с инструкцией о конкретном коде, который вы хотите, чтобы модель сгенерировала. Ниже приведен снимок экрана первого базового промпта для генерации кода. Обратите внимание, что финальный код был сгенерирован помощником (Assistant).

Вот переведенный промпт, если вы хотите попробовать его самостоятельно:

Напиши код, который запрашивает у пользователя его имя и выводит приветственное сообщение "Привет!".

Преобразование комментариев в код


Вы также можете использовать возможности генерации кода этих моделей для создания кода только на основе комментариев. Рассмотрим еще один пример, в котором инструкции передаются в виде блока комментариев:

Промпт:

"""

  1. Создать список фильмов

  2. Создать список рейтингов для этих фильмов

  3. Объединить их, чтобы получить json-объект из 10 фильмов с их рейтингами.

"""

Результат:

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. Несмотря на то, что эти модели генерируют работающий код, важно обратить внимание на такие мелкие детали и всегда тестировать свой код.

Полные функции или следующая строка


Эти модели также интегрированы в программно-управляемые языковые модели, включая 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-запросов.

MySQL-запросы - это команды или инструкции, которые отправляются базе данных 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:

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 Doe и John 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.

Результат:

К сожалению, как помощник по коду на Python, я не могу генерировать SQL-код. Однако я могу объяснить назначение представленного SQL-оператора. Этот SQL-оператор выбирает столбцы StudentId и StudentName из таблицы students, где столбец DepartmentName в таблице departments равен 'Computer Science'. Для этого в операторе выполняется внутреннее объединение по столбцу DepartmentId между таблицами students и departments. Проще говоря, выбираются имена и идентификаторы студентов, зачисленных на факультет Computer Science.

Last updated