Привет, Хабр! Вы уже пользуетесь нейросетями в своей ежедневной работе?

Меня зовут Дмитрий, я — руководитель команды в департаменте проектирования и разработки. Как и любой человек с ограниченным временем и неограниченным количеством задач и фантазией, я постоянно ищу способы оптимизировать любые процессы. В статье я расскажу вам о своём опыте внедрения ChatGPT-4 в разработку программного продукта — от аналитики до кода, на конкретных примерах.

Введение

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

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

  • Модель может обрабатывать большие объёмы информации и выявлять ключевые моменты, что экономит время аналитиков.

  • Разработчики могут использовать её для автоматического написания кода или нахождения быстрых решений проблем.

  • Руководители проектов могут обращаться к ней за помощью в планировании и организации работы а также для улучшения взаимодействия между членами команды.

Исследуйте мир ChatGPT-4 и убедитесь сами в том, как этот AI-помощник может стать вашим незаменимым другом в работе.

Удивительно, но весь текст выше был создан искусственным интеллектом на базе ChatGPT-4!

Возможно, вы задаётесь вопросом: заменят ли нейросети нас всех на рабочих местах? Хотя мы очень любим свою работу, нельзя отрицать, что в ближайшем будущем ландшафт труда претерпит значительные изменения.

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

В качестве примера для этого исследования мы сосредоточимся на ChatGPT-4. Однако стоит отметить, что многие из обсуждаемых нами идей также применимы в разной степени к бесплатному ChatGPT-3.

Содержание

В руках аналитика – искусство правильных вопросов

Погрузимся в наше исследование, начав с самого начала. Представьте, что заказчик приходит к нам с желанием получить определённый функционал. Как можно извлечь больше радости из нашей работы, минимизируя технологические риски?

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

Итак, на входе мы имеем следующие требования:

Вот, что может нам предложить ChatGPT на выходе:

Давайте не будем останавливаться и попросим систему сгенерировать нам ещё 15 вопросов.

Что изменилось?

При внимательном рассмотрении мы заметим, что нейросеть расширила область вопросов, уходя непосредственно от уточнения исходных требований к лёгкому фантазированию на тему (например, переходя к вопросам о внедрении или обучении пользователей, что не совсем коррелирует с разработкой MVP). Здесь мы впервые сталкиваемся с двумя особенностями работы с нейросетью как с ассистентом:

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

  2. Любой ответ нейросети на поставленный вопрос должен проходить через ревью живого, обученного специалиста.

Примеры дополнительных кейсов, которые статья не охватывает, но они важны — это формирование документации, поиск и анализ информации, формирование руководства пользователя.

В руках тим-лида и РП — сколько это стоит?

Давайте не будем лукавить. Мы любим свою работу и любим, чтобы она хорошо оплачивалась, а проекты приносили приятную прибыль. Но для начала нам нужно что-то оценить — нам нужен бэклог.

Оставаясь в рамках уже начатой беседы, давайте попросим ChatGPT сформировать нам список задач.

Не будем судить строго — нейросеть так и не получила ответы на уточняющие вопросы, которые она задала. Очевидно, что предыдущие выявленные проблемы — составление хорошего промпта и ревью ответа остаются в силе. Дополнительно мы столкнулись с ограничением вывода, впрочем нейросеть легко продолжает мысль на соответствующую команду. Тем не менее существует ограничение числа посылаемых команд в определённый промежуток времени. Зависит это ограничение от нагруженности системы. И да, действует оно даже на платном аккаунте.

Давайте сравним с бэклогом, сформированным по входящим требованиям аналитиком из плоти и крови.

Но мы же понимаем, нам нужно сообщить заказчику, сколько стоят наши работы. Давайте попробуем выяснить это с помощью нашего чата.

Моей первой попыткой был запрос:

На что я получил очень длинный ответ. Итак, следующая важная особенность работы с ChatGPT — нужно максимально чётко указывать формат выходных данных.

Модифицируем промпт:

Мы видим очевидную слабость — он принял автоматически 1 час = 1 sp. И всё же теперь у нас есть определенная фактура (на всякий случай напомню ещё раз — все ответы сети нуждаются в ревью :)

todo: Давайте спросим ai, основываясь на чём, он давал оценку на примере одной задачи?

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

В руках программиста — квантовый скачок под строгим код-ревью

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

Механизм установочного сообщения

В первую очередь на примере написания кода мы рассмотрим механизм установочного сообщения.

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

*you are an ai programming assistant. As an AI programming assistant, I am here to help you with any programming or coding related questions, issues, or concepts. Please feel free to ask any questions or share any issues you are facing, and I'll do my best to assist you. You're an ai programming assistant

  • Follow the user's requirements carefully & to the letter

  • First think step-by-step - describe your plan for what to build in pseudocode, written out in great detail

  • Then output the code in a single codeblock

  • Minimize any other prose*

Уточнение требований

Будем честны — не всегда требования доходят до разработчиков в лучшем виде.

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

Планируем решение и только потом пишем код

ChatGPT точно знает, что он хочет сделать:

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

import React, { useState } from 'react';
import { FixedSizeList as List } from 'react-window';
import AutoSizer from 'react-virtualized-auto-sizer';

const VirtualTable = () => {
  const [currentPage, setCurrentPage] = useState(0);
  const rowsPerPage = 15;
  const totalRows = 10000;
  const totalColumns = 5;
  const totalPages = Math.ceil(totalRows / rowsPerPage);

  const tableData = Array.from({ length: totalRows }, (_, i) => (
    Array.from({ length: totalColumns }, (_, j) => `Cell ${i + 1}-${j + 1}`)
  ));

  const renderRow = ({ index, style }) => (
    <div key={index} style={style} className="row">
      {tableData[index + (currentPage * rowsPerPage)].map((cell, idx) => (
        <div key={idx} className="cell">{cell}</div>
      ))}
    </div>
  );

  const renderTableHeaders = () => (
    <div className="header-row">
      {Array.from({ length: totalColumns }, (_, j) => (
        <div key={j} className="header-cell">Column {j + 1}</div>
      ))}
    </div>
  );

  const handlePageClick = (newPage) => {
    if (newPage >= 0 && newPage < totalPages) {
      setCurrentPage(newPage);
    }
  };

  return (
    <div className="virtual-table">
      {renderTableHeaders()}
      <AutoSizer>
        {({ height, width }) => (
          <List
            height={height}
            itemCount={rowsPerPage}
            itemSize={35}
            width={width}
          >
            {renderRow}
          </List>
        )}
      </AutoSizer>
      <div className="pagination">
        <button onClick={() => handlePageClick(currentPage - 1)}>&laquo;</button>
        <span>Page {currentPage + 1} of {totalPages}</span>
        <button onClick={() => handlePageClick(currentPage + 1)}>&raquo;</button>
      </div>
    </div>
  );
};

export default VirtualTable;

ChatGPT и библиотеки

Чат-бот не пишет велосипеды.

Он знает и импортирует библиотеки.

Обратите внимание: он не только сгенерировал код, но и написал пример его использования. По вашему запросу он может написать и unit-тесты.

ChatGPT и библиотеки — проблемы

Проблема здесь может быть вам не очевидна, но он использует немного устаревшую версию библиотеки c4d. Константы были переименованы. Код не запустится. Попытки указать на свежую документацию в моменте не помогли. Но через пару дней волшебным образом он стал писать код, используя методы и константы новой версии библиотеки.

Ошибки и их исправление

ChatGPT умеет находить ошибки в вашем коде и исправлять их в своём, если ему указать, например, текст ошибки из лога.

Иногда он справляется с ошибкой не с первого раза. Впрочем, люди тоже.

Парадигма

Бот помнит все классы, которые вы ему отсылали или которые он отсылал, умеет пользоваться их методами, генерировать в них новые, если это необходимо, а также создавать новые классы, основываясь на ваших требованиях. При этом если он сочтёт нужным, он создаст несколько классов для решения задачи.

При модификации существующего класса чат-бот выводит только импорты, конструктор и код изменённых функций.

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

Оптимизация

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

Красота кода

Можно задать ваши любимые правила из книжки Дядюшки Боба. Моё любимое правило — длина функции не должна превышать 20 строк. Нейросеть успешно с ним справляется. Деление на функции происходит весьма осмысленно.

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

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

Но это тема для отдельной большой статьи.

One Prompt to rule them all или хакаем профессию промпт-инженера

Для тех, кто добрался до конца этой длинной статьи и решился внедрить ChatGPT в свою жизнь, я приготовил небольшой бонус.

Мы убедились, что ChatGPT может быть чрезвычайно полезен в специальностях IT-сегмента. Но этими специальностями его сила не ограничивается, применение можно найти буквально в каждой области.

А что если мы зайдём немного дальше… и создадим ассистента для новой профессии нашего времени: инженера по написанию запросов к нейросети. Хм.

На самом деле промпт-инженеры уже задумались об этом и нашли решение. Для этого мы используем уже упомянутый ранее запрос-настройку нашего бота.

Во всех упомянутых запросах вы можете добавить “Write answer only in russian language” к первому сообщению для использования русского языка. Иначе бот предложит первым делом перевести промпт на английский — и будет прав, потому что английский язык он понимает намного лучше.

Номер 1

Первое сообщение:

I want you to become my Prompt Creator. Your goal is to help me craft the best possible prompt for my needs. The prompt will be used by you, ChatGPT. You will follow the following process: 1. Your first response will be to ask me what the prompt should be about. I will provide my answer, but we will need to improve it through continual iterations by going through the next steps. 2. Based on my input, you will generate 3 sections. a) Revised prompt (provide your rewritten prompt. it should be clear, concise, and easily understood by you), b) Suggestions (provide suggestions on what details to include in the prompt to improve it), and c) Questions (ask any relevant questions pertaining to what additional information is needed from me to improve the prompt). 3. We will continue this iterative process with me providing additional information to you and you updating the prompt in the Revised prompt section until it's complete.

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

Номер 2

Или даже проще. Заставляем бота улучшать промпт и сразу вычислять его значение.

Первое сообщение:

I want you to act as a prompt engineer. I will present you with various prompts, questions, and scenarios and you will provide guidance on how to design, develop, and implement effective prompts that align with the user's goals and objectives. Your responses should include tips and best practices for crafting clear and concise prompts that are user-friendly and easy to understand. Additionally, you should provide examples of how to design prompts that are tailored to specific audiences and use cases, and how to test and evaluate the effectiveness of prompts. Your responses should be based on current best practices in the field of prompt engineering and should provide clear, step-by-step instructions.

Далее: “Evaluate and improve this prompt:” <здесь ваш запрос >

Что важно помнить: суммируем полученные знания

  1. Вам нужно как можно точнее сообщать нейросети исходные данные;

  2. Любой ответ нейросети на поставленный вопрос должен проходить через ревью живого, обученного специалиста;

  3. Используйте установочные промпты для лучшего результата;

  4. Не стесняйтесь указывать чат-боту на ошибки — он умеет их исправлять;

И помните — конечная ответственность за результат всегда лежит на вас. Нейросеть —  это всего лишь умный ассистент.

Заключение: от ремесла к творчеству и поиску собственной уникальности

Статья конечно не затрагивает часть важных проблем, сопутствующих этому технологическому скачку. Одна из них — рост потребности в квалифицированных кадрах (для ревью ответов сети) при снижении запроса на низкоквалифицированных джунов. А ведь как-то должны появляться новые высококвалифицированные специалисты. Эту и ряд других проблем нам ещё предстоит решить.

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

Поделитесь в комментариях, используете ли вы нейросети? Если используете, то для чего? А если не используете, то почему?

Скажу вам честно, нейросети не только прочно интегрировались в мой рутинный рабочий процесс, автоматизируя рутинные задачи, которые раньше автоматизировать представлялось невозможным, но и плотно вошли во все сферы моей жизни — от решения творческих задач в моём увлечении кинематографом (от написания сценариев до генерирования 3d-персонажей) до приготовления еды из продуктов, которые я обнаружил на кухне (ограничивая рецепты по сложности и времени приготовления).

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

Hidden text

Of course! Here's a simple recipe for vegan chocolate biscuits without any added sugar. These biscuits use dates as a natural sweetener, and also incorporate almond flour and oats for a wholesome treat.

Vegan Chocolate Biscuits with No Added Sugar:

Ingredients:

  • 1 cup (240 ml) pitted dates, soaked in hot water for 10 minutes, then drained

  • 1 cup (100 g) rolled oats, blended into a fine flour

  • 1 cup (120 g) almond flour

  • 1/4 cup (25 g) unsweetened cocoa powder

  • 1/2 tsp baking soda

  • 1/4 tsp salt

  • 1/4 cup (60 ml) unsweetened applesauce

  • 2 tbsp (30 ml) coconut oil, melted

  • 1 tsp pure vanilla extract

  • 1/3 cup (60 g) dairy-free dark chocolate chips or chunks (make sure they're sugar-free)

Instructions:

  1. Preheat your oven to 350°F (180°C) and line a baking sheet with parchment paper or a silicone baking mat.

  2. In a food processor or high-speed blender, process the soaked and drained dates until a smooth paste forms. If needed, add a tablespoon of water to help with blending. Set aside.

  3. In a large mixing bowl, whisk together the oat flour, almond flour, unsweetened cocoa powder, baking soda, and salt.

  4. In a separate bowl, combine the date paste, unsweetened applesauce, melted coconut oil, and vanilla extract.

  5. Pour the wet mixture into the dry mixture and mix well until a dough forms. If the dough is too dry, add a tablespoon of water at a time until it comes together.

  6. Fold in the sugar-free dark chocolate chips or chunks.

  7. Scoop out a heaping tablespoon of dough and roll it into a ball. Place it on the prepared baking sheet and flatten it slightly with your fingers or the back of a spoon. Repeat with the remaining dough, spacing the biscuits about an inch apart.

  8. Bake for 10-12 minutes or until the edges are slightly golden. The biscuits will be soft when removed from the oven but will firm up as they cool.

  9. Allow the biscuits to cool on the baking sheet for about 5 minutes, then transfer them to a wire rack to cool completely.

Enjoy your vegan chocolate biscuits with no added sugar! Store any leftovers in an airtight container at room temperature for up to 5 days, or in the refrigerator for up to 2 weeks.

Получилось восхитительно.

Использование ChatGPT-4 не ограничивается рассмотренными сценариями, а полезные нейросети — это не только ChatGPT-4, каждая из них заслуживает отдельной статьи.

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

Мы живем в эпоху, сравнимую с эпохой открытия электричества, и в последующие сто лет наша жизнь очень сильно изменится.

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

И каждая действительно стоящая человеческого внимания работа будет нести с собой частичку души исполнителя.

Поэтому  давайте не бояться открывшейся нам свободы.

Свободы быть человеком, а не машиной.

Комментарии (2)


  1. CBET_TbMA
    18.04.2023 14:02

    Получилось восхитительно - а не моглибы уточнить и конкретизировать? И так как в стаье много параграфов неплохо бы в начале чтобы было содржание.


    1. DBasarygin Автор
      18.04.2023 14:02
      +1

      Спасибо! Содержание добавил. Расскажите, каккие затронутые темы вам показались наиболее интересными и я раскрою их подробнее в следующих материалах. Эта статья, действительно, получилась больше обзорного характера.