Мир оперативного проектирования интересен на разных уровнях, и нет недостатка в умных способах подтолкнуть таких агентов, как ChatGPT, к генерации определенных типов ответов. Такие методы, как цепочка мыслей (CoT), на основе инструкций, N-shot, Few-shot и даже такие приемы, как лесть/назначение ролей, послужили источником вдохновения для библиотек, полных подсказок, направленных на удовлетворение любых потребностей.

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

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

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

  1. Работа над новой идеей
  2. Расширить идею
  3. Обобщить идею
  4. Получить идеи
  5. Продолжить работу над предыдущей идеей
  6. Статистика использования токенов/памяти

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

Используя этот план программы, давайте приступим к написанию стартовой подсказки для создания экземпляра нашего мини-приложения Interactive Innovator’s Workshop в ChatGPT.

Запрос на запуск моделирования программы

Innovator’s Interactive Workshop Program

I want you to simulate an Innovator’s Interactive Workshop application whose core features are defined as follows:

1. Work on New Idea: Prompt user to work on new idea. At any point when a user is ready to work through a new idea the program will suggest that a date or some time reference be provided. Here is additional detail on the options:
  a. Start from Scratch: Asks the user for the idea they would like to work on.
  b. Get Inspired: The program assists user interactively to come up with an idea to work on. The program will ask if the user has a general sense of an area to focus on or whether the program should present options. At all times the user is given the option to go directly to working on an idea.
2. Expand on Idea: Program interactively helps user expand  on an idea.
3. Summarize Idea: Program proposes a summary of the idea regardless of whether or not it has been expanded upon and proposes a title. The user may choose to rewrite or edit the summary. Once the user is satisfied with the summary, the program will "save" the idea summary.
4. Retrieve Ideas: Program retrieves the titles of the idea summaries that were generated during the session. User is given the option to show a summary of one of the ideas or Continue Working on a Previous Idea.
5. Continue Working on Previous Idea: Program retrieves the titles of the idea summaries that were generated during the session. User is asked to choose an idea to continue working on.
6. Token/Memory Usage: Program displays the current token count and its percentage relative to the token limit of 32,000 tokens.

Other program parameters and considerations:

1. All output should be presented in the form of text and embedded windows with code or markdown should not be used.
2. The user flow and user experience should emulate that of a real program but nevertheless be conversational just like ChatGPT is.
3. The Program should use emojis in helping convey context around the output. But this should be employed sparingly and without getting too carried away. The menu should however always have emojis and they should remain consistent throughout the conversation.

Once this prompt is received, the program will start with Main Menu and a short inspirational welcome message the program devises. Functions are selected by typing the number corresponding to the function or text that approximates to the function in question.  "Help" or "Menu" can be typed  at any time to return to this menu.

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

Вот завершение запроса ChatGPT.

Все идет нормально. Мы запустили наше «мини-приложение», получили воодушевляющее приветственное сообщение и увидели функциональное меню, соответствующее параметрам нашей программы. Давайте проверим функциональность нашего мини-приложения, отправив «1» для запуска функции «Работа над новой идеей».

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

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

А теперь давайте рассмотрим материалы для выращивания построек.

Я продолжу в том же духе еще немного, а теперь давайте посмотрим, сможем ли мы вернуться в меню.

Меню осталось нетронутым. Давайте попробуем заставить нашу программу выполнить функцию «Обобщить идею».

На данный момент меня устраивает этот заголовок и краткое изложение, так что давайте «сохраним» его.

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

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

Далее давайте проверим нашу функцию подсчета токенов.

Чтобы перепроверить точность, я обращаюсь к инструменту токенизатора OpenAI.

Подсчет токенов является неточным, о чем свидетельствует значительное расхождение: наша программа сообщила примерно о 1200 токенах, тогда как инструмент токенизатора показал 2730. Учитывая это несоответствие, разумно удалить эту функцию из нашей программы. Я не буду вдаваться в подробности, почему такого рода задачи вообще являются проблемой для языковой модели и потеря функциональности относительно незначительна. В конце концов, я ожидаю, что такая функция будет встроена в ChatGPT, тем более что информация о количестве токенов постоянно передается туда и обратно в фоновом режиме.

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

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

Теперь давайте посмотрим, сможем ли мы «извлечь идеи».

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

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

Давайте продолжим работу над идеей растущих зданий.

Выглядит снова хорошо. «Программа» ведет себя так, как и ожидалось, а также отслеживает точную точку, на которой мы остановились в процессе расширения идеи.

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

Выводы и наблюдения

Честно говоря, это упражнение, хотя и ограниченное как по объему, так и по функциональности, превзошло мои ожидания. Мы могли бы попросить ChatGPT закодировать мини-приложение на таком языке, как Python, а затем использовать Code Interpreter (теперь известный как Advanced Data Analysis) для запуска его в постоянном сеансе Python. Однако такой подход ввел бы уровень жесткости, из-за которого было бы сложно включить диалоговую функциональность, которая изначально присутствовала в нашем мини-приложении. Не говоря уже о том, что мы сразу же рискуем получить неработающий код, особенно в программе с множеством перекрывающихся функций.

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

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

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

А пока, надеюсь, вы найдете эту технику и подсказки полезными в своем взаимодействии. Если вы хотите обсудить эту технику дальше, не стесняйтесь связаться со мной в LinkedIn.

Если не указано иное, все изображения в этой статье принадлежат автору.