Недавно я начал использовать chatGPT в качестве партнера по программированию и был поражен его способностью помогать мне с моими задачами по программированию. chatGPT — это большая языковая модель, обученная OpenAI, которая способна генерировать человекоподобный текст на основе получаемых данных. Я нашел его особенно полезным для мозгового штурма идей и решения проблем, поскольку он мог давать предложения и рекомендации в режиме реального времени. В этом посте я поделюсь своим опытом использования chatGPT в качестве партнера по программированию и обсужу потенциальные преимущества использования языковых моделей для этой цели.

Итак, что такое ChatGPT?

ChatGPT — это большая языковая модель, обученная OpenAI. Это вариант модели GPT-3 (Generative Pretrained Transformer 3), которая является одной из самых мощных языковых моделей, доступных в настоящее время. ChatGPT специально разработан для создания текста, похожего на человеческий, на основе получаемых им данных, и он был обучен на большом наборе данных человеческих разговоров, чтобы улучшить его способность давать реалистичные ответы.

Одной из ключевых особенностей chatGPT является его способность продолжать разговор естественным и последовательным образом. Получив первоначальный ввод, chatGPT сгенерирует ответ, соответствующий вводу и плавно вытекающий из предыдущего текста. Это делает его полезным для таких задач, как генерация ответов чат-бота, мозговой штурм идей или предоставление предложений в режиме реального времени.

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

Так? Как я могу использовать его, чтобы помочь мне в написании моей программы?

Существует несколько способов использования chatGPT для помощи в решении задач программирования. Вот некоторые возможные способы использования chatGPT в качестве партнера по программированию:

  1. Мозговой штурм идей. Вы можете использовать chatGPT, чтобы генерировать идеи для своих программных проектов. Например, вы можете предоставить chatGPT некоторую информацию о проекте и попросить его предложить возможные решения или подходы. Затем chatGPT может сгенерировать список идей, которые вы можете использовать в качестве отправной точки для своего проекта.
  2. Отладка кода. Если вы столкнулись с ошибкой в ​​коде, вы можете использовать chatGPT, чтобы найти источник проблемы. Просто предоставьте chatGPT код и описание проблемы, и он может предложить, как исправить ошибку или определить причину проблемы.
  3. Написание кода: chatGPT также может помочь вам в написании кода. Вы можете предоставить ему описание задачи, над которой вы работаете, и попросить сгенерировать код, решающий проблему. chatGPT сгенерирует код, который синтаксически правильный и соответствует рекомендациям, но вам нужно будет просмотреть и изменить код, чтобы убедиться, что он соответствует вашим конкретным требованиям.

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

Давайте просто попробуем, допустим, мы хотим создать внутреннюю программу на NodeJS. Мы хотим, чтобы наше приложение могло принимать HTTP-запросы с помощью ExpressJS. Просто скажите «Можете ли вы написать серверную программу с использованием nodejs и использовать ExpressJS для обработки запросов?» в chatGPT, и это их ответы.

Конечно, вот простая серверная программа, написанная на Node.js, которая использует платформу Express.js для обработки запросов:

const express = require('express');

const app = express();

app.get('/', (req, res) => {
  res.send('Hello, world!');
});

app.listen(3000, () => {
  console.log('Server listening on port 3000');
});

Эта программа использует платформу Express.js для создания простого сервера, который прослушивает входящие HTTP-запросы. Метод app.get() используется для определения маршрута, который отвечает на запрос GET к пути /. Когда запрос получен, сервер отправляет ответ «Привет, мир!» обратно к клиенту. Сервер настроен на прослушивание порта 3000, поэтому вы можете получить к нему доступ, посетив http://localhost:3000 в своем веб-браузере.

Это всего лишь базовый пример, но он показывает, как можно использовать Node.js и Express.js для создания простой серверной программы, способной обрабатывать входящие запросы. Вы можете расширить этот пример, добавив больше маршрутов и обработав различные типы запросов, чтобы создать более сложный сервер.

Как вы можете видеть выше, он не только пишет для нас код, но и способен объяснить, как этот код работает.

Итак, теперь у нас есть программа nodejs, но в ней по-прежнему ничего нет. Добавим что-нибудь! скажем, мы хотим иметь взаимодействие пользователя и закладок. Мы хотим хранить данные о пользователях, книгах и закладках в базе данных sql. Мы можем попросить chatGPT смоделировать его для нас.

А это сгенерированный sql-запрос для создания наших таблиц данных, полностью сделанный chatCPT:

CREATE TABLE users (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  email TEXT NOT NULL UNIQUE
);

CREATE TABLE books (
  id INTEGER PRIMARY KEY,
  title TEXT NOT NULL,
  author TEXT NOT NULL,
  genre TEXT NOT NULL,
  published_date DATE NOT NULL
);

CREATE TABLE bookmarks (
  id INTEGER PRIMARY KEY,
  user_id INTEGER NOT NULL REFERENCES users(id),
  book_id INTEGER NOT NULL REFERENCES books(id),
  PRIMARY KEY (user_id, book_id)
);

Он мгновенно генерирует имя таблицы, атрибуты, типы данных и ссылки! теперь вы можете запустить запрос в своей базе данных sql, и он сгенерирует таблицы. Вы также можете запросить у chatGPT дополнительные запросы для заполнения данных. Вот что я получил:

INSERT INTO books (title, author, genre, published_date) VALUES ('The Great Gatsby', 'F. Scott Fitzgerald', 'Fiction', '1925-04-10');

INSERT INTO books (title, author, genre, published_date) VALUES ('To Kill a Mockingbird', 'Harper Lee', 'Fiction', '1960-07-11');

INSERT INTO books (title, author, genre, published_date) VALUES ('Pride and Prejudice', 'Jane Austen', 'Fiction', '1813-01-28');

INSERT INTO books (title, author, genre, published_date) VALUES ('The Catcher in the Rye', 'J. D. Salinger', 'Fiction', '1951-07-16');

INSERT INTO books (title, author, genre, published_date) VALUES ('War and Peace', 'Leo Tolstoy', 'Fiction', '1869-01-01');

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

Во-первых, прежде чем мы сможем получить данные в программе, нам нужно сначала установить драйвер mysql, создать модели и создать экземпляр драйвера sql. Но вместо использования родного драйвера mysql я хочу использовать sequelizeORM. Давайте попросим chatGPT реализовать его для использования.

Конечно, вот возможная реализация таблиц users, books и bookmarks с использованием Sequelize ORM для Node.js:

const Sequelize = require('sequelize');

const sequelize = new Sequelize('database', 'username', 'password', {
  host: 'localhost',
  dialect: 'mysql',
});

const User = sequelize.define('user', {
  id: {
    type: Sequelize.INTEGER,
    primaryKey: true,
  },
  name: {
    type: Sequelize.STRING,
    allowNull: false,
  },
  email: {
    type: Sequelize.STRING,
    allowNull: false,
    unique: true,
  },
});

const Book = sequelize.define('book', {
  id: {
    type: Sequelize.INTEGER,
    primaryKey: true,
  },
  title: {
    type: Sequelize.STRING,
    allowNull: false,
  },
  author: {
    type: Sequelize.STRING,
    allowNull: false,
  },
  genre: {
    type: Sequelize.STRING,
    allowNull: false,
  },
  published_date: {
    type: Sequelize.DATE,
    allowNull: false,
  },
});

const Bookmark = sequelize.define('bookmark', {
  id: {
    type: Sequelize.INTEGER,
    primaryKey: true,
  },
  user_id: {
    type: Sequelize.INTEGER,
    allowNull: false,
    references: {
      model: User,
      key: 'id',
    },
  },
  book_id: {
    type: Sequelize.INTEGER,
    allowNull: false,
    references: {
      model: Book,
      key: 'id',
    },
  },
});

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

Вот как теперь выглядит наша программа:

const express = require('express');
const Sequelize = require('sequelize');

// Import the models
const { User, Book, Bookmark } = require('./models');

// Create a new express app
const app = express();

// Connect to the database
const sequelize = new Sequelize('database', 'username', 'password', {
  host: 'localhost',
  dialect: 'mysql',
});

// Define a route to handle the GET request
app.get('/books', async (req, res) => {
  // Query the database for all the books
  const books = await Book.findAll();

  // Send the books data as a response to the client
  res.send(books);
});

// Start the server and listen for incoming requests
app.listen(3000, () => {
  console.log('Server listening on port 3000');
});

Теперь, когда у нас есть обработчик для получения всех книг, давайте продолжим создавать обработчик, чтобы пользователь мог добавлять свои книги в закладки. Программа должна проверить, существует ли пользователь с электронной почтой или нет. Если пользователя с адресом электронной почты не существует, программа создаст нового пользователя, а затем создаст новую закладку, используя идентификатор пользователя и идентификатор книги.

const express = require('express');
const Sequelize = require('sequelize');

// Import the models
const { User, Book, Bookmark } = require('./models');

// Create a new express app
const app = express();

// Connect to the database
const sequelize = new Sequelize('database', 'username', 'password', {
  host: 'localhost',
  dialect: 'mysql',
});

// Define a route to handle the POST request
app.post('/bookmarks', async (req, res) => {
  // Get the user name, email, and book id from the request body
  const { name, email, book_id } = req.body;

  // Query the database for a user with the given email
  const user = await User.findOne({ where: { email } });

  // If no user with the given email exists, create a new user
  if (!user) {
    const newUser = await User.create({ name, email });
    user_id = newUser.id;
  } else {
    user_id = user.id;
  }

  // Create a new bookmark for the user and book
  const bookmark = await Bookmark.create({ user_id, book_id });

  // Send the bookmark data as a response to the client
  res.send(bookmark);
});

// Start the server and listen for incoming requests
app.listen(3000, () => {
  console.log('Server listening on port 3000');
});

Теперь у нас есть обработчик для пользователя, чтобы добавить книги в закладки, похоже запрос на получение книг отсутствует, но если вы попросите chatGPT показать полный код программы. Обработчик получения книг на самом деле все еще там.

Наконец, мы хотим, чтобы программа могла показывать закладки пользователей по их электронной почте.

app.get('/bookmarks/:email', async (req, res) => {
  // Get the email from the URL parameters
  const { email } = req.params;

  // Query the database for the user with the given email
  const user = await User.findOne({ where: { email } });

  // If no such user exists, return an error
  if (!user) {
    res.status(404).send({ error: 'User not found' });
    return;
  }

  // Query the database for the bookmarks of the user
  const bookmarks = await user.getBookmarks();

  // Send the bookmarks data as a response to the client
  res.send(bookmarks);
});

Наконец, наша программа завершена, но когда я прошу chatGPT показать мне полный код, он урезается из-за ограничения чата, позволяет разделить код на разные файлы для сервера, продолжить модели и обработчики запросов и попросить показать файлы один одним. (если чат обрывается из-за лимита, просто говорит «продолжить»)

И это результат:

сервер.js

const express = require('express');

// Import the request handlers
const bookHandlers = require('./handlers/books');
const bookmarkHandlers = require('./handlers/bookmarks');

// Create a new express app
const app = express();

// Define the routes and attach the request handlers
app.get('/books', bookHandlers.getBooks);
app.post('/bookmarks', bookmarkHandlers.postBookmarks);
app.get('/bookmarks/:email', bookmarkHandlers.getBookmarks);

// Start the server and listen for incoming requests
app.listen(3000, () => {
  console.log('Server listening on port 3000');
});

модели.js

const Sequelize = require('sequelize');

const sequelize = new Sequelize('database', 'username', 'password', {
  host: 'localhost',
  dialect: 'mysql',
});

const User = sequelize.define('user', {
  id: {
    type: Sequelize.INTEGER,
    primaryKey: true,
  },
  name: {
    type: Sequelize.STRING,
    allowNull: false,
  },
  email: {
    type: Sequelize.STRING,
    allowNull: false,
    unique: true,
  },
});

const Book = sequelize.define('book', {
  id: {
    type: Sequelize.INTEGER,
    primaryKey: true,
  },
  title: {
    type: Sequelize.STRING,
    allowNull: false,
  },
  author: {
    type: Sequelize.STRING,
    allowNull: false,
  },
  genre: {
    type: Sequelize.STRING,
    allowNull: false,
  },
  published_date: {
    type: Sequelize.DATE,
    allowNull: false,
  },
});

const Bookmark = sequelize.define('bookmark', {
  id: {
    type: Sequelize.INTEGER,
    primaryKey: true,
  },
  user_id: {
    type: Sequelize.INTEGER,
    allowNull: false,
    references: {
      model: User,
      key: 'id',
    },
  },
  book_id: {
    type: Sequelize.INTEGER,
    allowNull: false,
    references: {
      model: Book,
      key: 'id',
    },
  },
});

// Define associations between the models
User.hasMany(Bookmark);
Book.hasMany(Bookmark);

// Export the models
module.exports = {
  User,
  Book,
  Bookmark,
};

обработчики /books.js

// Import the models
const { Book } = require('../models');

// Request handler for handling GET requests to the /books route
const getBooks = async (req, res) => {
  // Query the database for all the books
  const books = await Book.findAll();

  // Send the books data as a response to the client
  res.send(books);
};

module.exports = {
  getBooks,
};

обработчики/bookmarks.js

// Import the models
const { User, Bookmark } = require('../models');

// Request handler for handling POST requests to the /bookmarks route
const postBookmarks = async (req, res) => {
  // Get the user name, email, and book id from the request body
  const { name, email, book_id } = req.body;

  // Query the database for a user with the given email
  const user = await User.findOne({ where: { email } });

  // If no user with the given email exists, create a new user
  if (!user) {
    const newUser = await User.create({ name, email });
    user_id = newUser.id;
  } else {
    user_id = user.id;
  }

  // Create a new bookmark for the user and book
  const bookmark = await Bookmark.create({ user_id, book_id });

  // Send the bookmark data as a response to the client
  res.send(bookmark);
};

// Request handler for handling GET requests to the /bookmarks/:email route
const getBookmarks = async (req, res) => {
  // Get the email from the URL parameters
  const { email } = req.params;

  // Query the database for the user with the given email
  const user = await User.findOne({ where: { email } });

  // If no such user exists, return an error
  if (!user) {
    res.status(404).send({ error: 'User not found' });
    return;
  }

  // Query the database for the bookmarks of the user
  const bookmarks = await user.getBookmarks();

  // Send the bookmarks data as a response to the client
  res.send(bookmarks);
};

module.exports = {
  postBookmarks,
  getBookmarks,
};

Теперь у нас есть 4 отдельных файла, а именно:

  • server.js: основная программа, которая определяет экспресс-приложение, маршруты и обработчики запросов, а также запускает сервер.
  • models.js: файл, который определяет модели Sequelize и ассоциации для таблиц users, books и bookmarks.
  • handlers/books.js: файл, определяющий обработчик запроса GET на маршрут /books.
  • handlers/bookmarks.js: файл, определяющий обработчики запросов POST и GET к маршрутам /bookmarks и /bookmarks/:email.

Итак, без единой проделанной мной работы по кодированию 😅 , мы создали:

  • Программа представляет собой внутренний сервер, написанный на Node.js с использованием фреймворка express.js.
  • Он использует Sequelize ORM для взаимодействия с базой данных MySQL.
  • База данных содержит таблицы users, books и bookmarks, и программа определяет модели Sequelize и ассоциации для этих таблиц.
  • Программа определяет маршруты и обработчики запросов для запросов GET и POST к конечным точкам /books и /bookmarks.
  • Обработчик запросов GET для конечной точки /books запрашивает таблицу books и отправляет данные книг в качестве ответа клиенту.
  • Обработчик запросов POST для конечной точки /bookmarks создает новую закладку для данного пользователя и книги или создает нового пользователя, если пользователя с указанным адресом электронной почты не существует. Затем он отправляет данные закладки в качестве ответа клиенту.
  • Обработчик запросов GET для конечной точки /bookmarks/:email извлекает все закладки для пользователя с указанным адресом электронной почты и отправляет данные закладок в качестве ответа клиенту.
  • Программа организована в несколько файлов, при этом сервер, обработчики запросов, модели Sequelize и экземпляры Sequelize разделены на разные файлы.

В заключение, использование ChatGPT в качестве партнера по программированию может быть полезным и эффективным способом разработки и объяснения вашего кода. ChatGPT может помочь вам написать код, предоставив примеры кода и предложения на основе ваших входных данных, а также может помочь вам в моделировании ваших данных путем создания определений таблиц SQL и моделей Sequelize. Кроме того, ChatGPT может объяснить вам код, предоставив подробные описания и сводки различных компонентов вашей программы. В целом, включение ChatGPT в ваш рабочий процесс программирования может сэкономить ваше время и усилия, а также помочь вам создать более надежный и хорошо документированный код.

ChatGPT звучит мощно, могу я просто попросить ChatGPT написать пост на среднем уровне?

Ну… если вы еще не поняли, вступительный, заключительный и большинство ответов выше были сгенерированы chatGPT…. 😐. И работает хорошо…

Мне жаль. 😆