Перейти к содержанию

← Применение

Промпт-инжиниринг / Применение

Генерация кода на Python и SQL с помощью языковых моделей

Современные языковые модели, такие как ChatGPT, стали мощным инструментом в руках разработчика. Они способны не только вести диалог, но и писать рабочий код на различных языках программирования, что открывает новые возможности для автоматизации, обучения и ускорения рутинных задач. В этой статье разберемся, как эффективно использовать эти модели для генерации кода на Python и SQL, и на что стоит обращать внимание.

Для всех примеров будем использовать модель gpt-3.5-turbo в режиме чата. Ключевую роль играет системное сообщение (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.
Эта настройка говорит модели, что она - помощник по коду на Python, который должен в первую очередь генерировать код, а не его объяснять.

От идеи к работающему коду

Самый простой способ - прямо попросить модель написать код по текстовому описанию. Например, запрос "Напиши код, который спрашивает имя пользователя и говорит «Привет»" даст нам готовый скрипт на Python.

CODE1

Промпт:

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

Ответ модели:

name = input("What is your name? ")
print("Hello", name)

Это базовый, но наглядный пример того, как модель понимает задачу и выдает исполняемое решение.

Генерация кода из комментариев

Один из самых полезных сценариев - когда у вас есть только наброски логики в виде комментариев, а модель превращает их в готовый код. Рассмотрим задачу создания JSON-объекта из списков фильмов и рейтингов.

Промпт:

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

Код выглядит рабочим, но здесь кроется важный нюанс: модель забыла импортировать модуль json. Всегда проверяйте сгенерированный код на наличие необходимых импортов и тестируйте его. Это общее правило работы с AI-генерацией кода.

Автодополнение функций

Эта возможность лежит в основе таких инструментов, как GitHub Copilot. Модель может дописать функцию, увидев ее начало и комментарий.

Промпт:

# function to multiply two numbers and add 75 to it

def multiply(

Ответ модели:

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

Модель корректно завершила сигнатуру функции и ее тело в соответствии с описанной логикой.

Создание SQL-запросов и схем БД

Языковые модели отлично справляются с генерацией SQL. Вы можете описать структуру таблиц и задать вопрос на естественном языке.

Промпт:

"""
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';

Но как проверить, что запрос работает? Можно попросить модель создать всю базу данных с нуля. Модифицируем промпт:

Промпт:

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

Далее можно сгенерировать тестовые данные для проверки исходного запроса.

Промпт:

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

Теперь, используя, например, онлайн-инструмент вроде sqliteonline.com, вы можете создать временную БД, вставить данные и убедиться, что исходный запрос возвращает двух студентов (John Doe и Jane Doe) из отдела Computer Science.

Объяснение чужого кода

Если вы изучаете SQL или разбираетесь в legacy-коде, модель может выступить в роли наставника и объяснить логику. Важно помнить о системном сообщении: если мы указали, что ассистент работает только с 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.

Практическое применение в российском контексте

Описанные техники работают не только с зарубежными моделями вроде ChatGPT. Российские аналоги, такие как YandexGPT или GigaChat, также успешно справляются с генерацией и объяснением кода на Python и SQL. Это особенно актуально для разработчиков и аналитиков данных в российских компаниях, которые могут использовать эти инструменты для: * Быстрого прототипирования скриптов для обработки данных. * Генерации стандартных SQL-запросов для отчетности. * Получения объяснений сложных участков кода в проектах. * Автоматического дополнения кода в средах разработки.

Главное - всегда проверяйте и тестируйте сгенерированный код. Модель - мощный помощник, но ответственность за конечный результат лежит на разработчике.

Попробуйте ENGRAM на своих данных

Нейросеть на ваших встречах, документах и переписке: отвечает со ссылкой на источник. Это ваша вторая память на базе ИИ. Данные хранятся в России, старт бесплатный.

Зарегистрироваться бесплатно
Обучаем команды работе с нейросетями под ваши процессы. Узнать о корпоративном обучении