Тестируем GPT-4: Может ли искусственный интеллект создать веб-сайт на React.JS?

В Интернете есть бесчисленное множество заголовков о GPT-4. Некоторые говорят об эффекте калькулятора, некоторые говорят, что разработчики программного обеспечения обречены, а другие утверждают, что это конец света! Но так ли это на самом деле?

Тестируем GPT-4: Может ли искусственный интеллект создать веб-сайт на React.JS?

Этот вопрос преследовал меня в течение нескольких дней и ночей, и я должен был узнать на него ответ. Мой интерес достиг пика, когда я благоговейно начал смотреть последние материалы на Youtube-канале Fireship. В конце концов я решил отказаться от 2 чашек кофе StarBucks и купил платную подписку на GPT-4 от OpenAI.

В этой статье я поделюсь своим опытом использования GPT-4 для создания персонального веб-сайта с помощью React.JS и изучу, как он функционирует в качестве веб-разработчика.

Эксперимент 1: Создание псевдоязыка React.JS

Я протестировал GPT-4, создав псевдоязык для React.JS, который позволяет вам вводить больше информации в одну подсказку. Это полезно, поскольку существует ограничение на количество символов, которые вы можете ввести. Вот пример псевдоязыка React:

ComponentName:
  Props:
    - prop1 (type)
    - prop2 (type)
  State:
    - stateVar1 (initialValue)
    - stateVar2 (initialValue)
  Lifecycle:
    - componentDidMount:
        - action or function call
    - componentDidUpdate:
        - action or function call
  Functions:
    - functionName1:
        - action or function call
    - functionName2:
        - action or function call
  Render:
    - (JSX-like structure or placeholder)

Это язык, на котором вы и языковая модель соглашаетесь с тем, что определённые термины означают определённые вещи. Это также полезно при воспроизведении одного и того же содержимого в 90% случаев, когда вы запрашиваете его, особенно с учётом того, что GPT-4 является генеративным и разные выходные данные могут / будут сгенерированы даже для одного и того же запроса. Ниже приведён пример псевдокода, который вы могли бы использовать для создания компонента рецепта:

RecipeApp:
  Props:
    - recipe (object)
  Functions:
    - renderIngredients:
        - for each ingredient in recipe.ingredients
          - show ingredient.name and ingredient.quantity
    - renderSteps:
        - for each step in recipe.steps
          - show step.number and step.description
  Render:
    - div
      - h1 recipe.title
      - h2 "Ingredients"
      - renderIngredients()
      - h2 "Instructions"
      - renderSteps()

Но у этого есть огромный недостаток. Когда вы создаёте несколько компонентов для приложения, GPT-4 игнорирует тот факт, что все эти компоненты должны быть взаимосвязаны. Например, я хотел создать компонент ContactMe для своего веб-сайта и добавить эффект мигающей анимации на панель навигации в течение 2 секунд при нажатии кнопки отправки. Чтобы сделать это в React.JS состояние должно быть инициализировано в компоненте приложения, а затем вызвано другими компонентами либо для использования, либо для обновления значения. Вот состояния и функции, сгенерированные GPT-4:

// App component
const App: React.FC = () => {
  const [activeSection, setActiveSection] = useState(1);

  const onScroll = () => {
    // Logic to update activeSection based on user scroll
  };

  useEffect(() => {
    window.addEventListener("scroll", onScroll);

    return () => {
      window.removeEventListener("scroll", onScroll);
    };
  }, []);

  return (
    <div className={`app-container active-section-${activeSection}`}>
      <PageSection />
      {/* Add more PageSection components as needed */}
    </div>
  );
};

// Navbar component
interface NavBarProps {
  blinkNavBar: () => void;
  barColor?: string;
}

const NavBar: React.FC<NavBarProps> = ({ blinkNavBar, barColor = "black" }) => {
  const [currentBarColor, setCurrentBarColor] = useState(barColor);

// AboutMe component
interface AboutMeProps {
  blinkNavBar: () => void;
}

interface FormData {
  name: string;
  email: string;
  message: string;
}

const AboutMe: React.FC<AboutMeProps> = ({ blinkNavBar }) => {
  const [formData, setFormData] = useState<FormData>({
    name: "",
    email: "",
    message: "",
  });

Просматривая код, мы обнаруживаем 2 проблемы:

  • Функция blinkNavBar() никогда не определяется в компоненте приложения
  • Некоторые функции просто говорят, что делать, вместо того, чтобы предоставлять вам фактический код. Пример: Функция onScroll() в компоненте приложения

Как веб-разработчик, я могу сказать, что это очень глупые ошибки даже для простого веб-приложения. Я не уверен, как это может сработать для сложных систем. Сейчас самое время попробовать другой подход, дать ИИ ещё один шанс.

Эксперимент 2: Человеческий язык

Вместо того чтобы создавать новый язык, я решил взаимодействовать с GPT-4, используя человеческий язык. Я ввожу подсказку с описанием веб-сайта, который я хотел бы создать, и элементами дизайна, которые я хотел бы включить:

Разработайте динамичный веб-сайт на React с использованием TypeScript и CSS. Веб-сайт должен быть полностью адаптивным и адаптируемым в зависимости от устройства и размера экрана. В нём будут представлены подробные сведения о fullstack-разработчике и включены следующие разделы: Обо мне, Опыт работы, образование, проекты и Свяжитесь со мной.

Дизайн:
Фон: Все разделы должны содержать рисунки на фоне технических объектов, сгенерированные с помощью CSS, и реализовывать параллаксную прокрутку для создания привлекательного пользовательского интерфейса.
Панель навигации: Создайте панель навигации, которая будет содержать имя разработчика слева и ссылки на различные разделы справа. Убедитесь, что активная ссылка выделена при отображении соответствующего раздела.
Тело: Используйте принципы дизайна Neumorphism для создания мягкого 3D-эффекта на элементах вашего сайта.
Типография: Используйте жирный шрифт для заголовков и важного текста, чтобы привлечь к ним внимание.

Данные:
Используйте случайно сгенерированные данные для контента веб-сайта, такие как проекты, образование и опыт работы.

Цвета:
Используйте контрастные цвета, приятные глазу, следите за тем, чтобы текст был разборчивым, и соблюдайте рекомендации WCAG по обеспечению доступности.

Тёмный режим:
Внедрите кнопку переключения между тёмным и светлым режимами и установите для неё системную тему устройства по умолчанию.

Изначально GPT-4 предоставил мне инструкции по разработке динамического веб-сайта React с использованием TypeScript и CSS. Затем, когда я запросил код, я получил несколько компонентов, но он мог дать мне только каркасный компонент для каждого из них из-за ограничений по пространству. Вот пример компонента Navbar:

// Navbar.tsx
import React from "react";
import { NavLink } from "react-router-dom";
import "./Navbar.css";

const Navbar: React.FC = () => {
  return (
    <nav>
      {/* Add developer's name and links to different sections */}
    </nav>
  );
};

export default Navbar;

Для css там просто сказано / * Добавить стили панели навигации здесь */

Вау 👏🏽 Неужели GPT-4 просто проигнорировал самую большую часть информации, которую я предоставил в подсказке? Я попробовал ещё раз, запросив код для каждого компонента в отдельности, предложив что-то вроде “Сгенерируйте полный код для Navbar.tsx и Navbar.css” и, Вуаля! Я действительно получил полный код. Взгляните на это:

import React from "react";
import { NavLink } from "react-router-dom";
import "./Navbar.css";

const Navbar: React.FC = () => {
  return (
    <nav className="navbar">
      <div className="navbar-container">
        <div className="navbar-brand">
          <NavLink to="/" exact activeClassName="navbar-active">
            Developer Name
          </NavLink>
        </div>
        <div className="navbar-links">
          <NavLink to="/" exact activeClassName="navbar-active">
            About Me
          </NavLink>
          <NavLink to="/work-experience" activeClassName="navbar-active">
            Work Experience
          </NavLink>
          <NavLink to="/education" activeClassName="navbar-active">
            Education
          </NavLink>
          <NavLink to="/projects" activeClassName="navbar-active">
            Projects
          </NavLink>
          <NavLink to="/contact-me" activeClassName="navbar-active">
            Contact Me
          </NavLink>
        </div>
      </div>
    </nav>
  );
};

export default Navbar;
.navbar {
  background-color: #f8f9fa;
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: 1000;
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}

.navbar-container {
  display: flex;
  justify-content: space-between;
  align-items: center;
  max-width: 1200px;
  margin: 0 auto;
  padding: 1rem;
}

.navbar-brand {
  font-size: 1.5rem;
  font-weight: bold;
}

.navbar-links {
  display: flex;
  gap: 1rem;
}

.navbar a {
  color: #343a40;
  text-decoration: none;
  transition: color 0.3s;
}

.navbar a:hover {
  color: #007bff;
}

.navbar-active {
  color: #007bff;
}

@media screen and (max-width: 768px) {
  .navbar-links {
    display: none;
  }
}

Я был впечатлен и взволнован!
Мне не терпелось скопировать код для всех компонентов в свой редактор, установить все необходимые пакеты и наткнуться на кучу ошибок. Мне потребовалось добрых 30-40 минут, пока я смог все их исправить. Некоторые ошибки были вызваны тем фактом, что в этом коде использовалась более старая версия пакета, а некоторые ключевые слова не поддерживаются в более новой версии. Мне также пришлось переустановить все пакеты с нуля.

Ладно, сейчас самое время взглянуть на конечный результат:

Тестируем GPT-4: Может ли искусственный интеллект создать веб-сайт на React.JS?
Тестируем GPT-4: Может ли искусственный интеллект создать веб-сайт на React.JS?
Тестируем GPT-4: Может ли искусственный интеллект создать веб-сайт на React.JS?

Наблюдения:

  • Хотя большая часть стиля отключена, по крайней мере, общая картина получилась правильной
  • Мне очень не понравился стиль сайта, текст был едва разборчив из-за того же фона и цвета шрифта
  • Прокрутка невозможна, так как каждый раздел выполнен как отдельная страница и отображается только при нажатии на ссылку на панели навигации
  • Переключатель тёмного режима вовсе отсутствует

Заключение

  • Либо GPT-4 пока не может создавать полноценные веб-сайты, даже с помощью подсказок, либо я должен лучше работать в качестве инженера подсказок
  • GPT-4 не является полностью разговорной моделью, поскольку он делает предположения относительно неоднозначной или отсутствующей информации вместо того, чтобы запрашивать у пользователя разъяснения
  • Расширятся возможности для использования навыков интеграции языковых моделей с различным программным обеспечением, чтобы заставить их работать вместе, а это невозможно без понимания работы нескольких программных продуктов

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

+1
0
+1
8
+1
0
+1
0
+1
0

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *