Хотите создавать чат-боты, игры и приложения с использованием моделей ИИ, таких как ChatGPT? В этой статье мы рассмотрим основы SudoLang  —  эффективного языка программирования псевдокода естественного языка, предназначенного для обучения продвинутых языковых моделей, таких как GPT-4 от OpenAI, Claude от Anthropic и других.

SudoLang был разработан мной (Эриком Эллиотом) совместно с GPT-4. Целью было создать простой язык, который модели ИИ понимали бы без специального обучения. Все достаточно продвинутые языковые модели естественным образом понимают SudoLang и следуют его инструкциям.

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

Ниже перечислены его особенности.

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

Не волнуйтесь, если еще не понимаете, что все это значит. Просто постарайтесь быть терпеливым к себе и к ИИ, если что-то не получается с первого раза.

Программирование в ограничениях было изобретено в начале 1960-х годов Айвеном Сазерлендом. Он же стал первым создателем экранов, с которыми можно непосредственно взаимодействовать (такой есть, например, у вашего телефона), и гарнитур виртуальной реальности. Программирование в ограничениях предполагает установление определенных правил, называемых “ограничениями”, и предоставление возможности программе самой придумать, как соответствовать этим ограничениям.

Программирование в ограничениях в Sketchpad Айвена Сазерленда, 1963 год

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

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

Почему SudoLang?

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

  • Использование естественного языка. В отличие от традиционных языков программирования, SudoLang ориентирован на естественный язык, поэтому его легче изучать и использовать, чем другие языки программирования. Не нужно быть экспертом в области создания кода, чтобы начать работу с SudoLang, а ИИ переведет программу, написанную на SudoLang, на любой другой язык программирования.
  • Улучшенный механизм рассуждений. Исследования показали, что использование псевдокода (структурированного естественного языка) может повысить эффективность рассуждений ИИ. SudoLang позволяет создавать краткие и эффективные инструкции.
  • Эффективность и выразительность. Декларативность, ограничения и ориентированность на интерфейс делают язык SudoLang невероятно выразительным и эффективным. Часто промпты, составленные на языке SudoLang, нуждаются в меньшем количестве лексем, чем промпты, написанные на естественном языке. Поэтому SudoLang оперативнее и дешевле в использовании.
  • Структурированность и наглядность. SudoLang предоставляет блоки области видимости, поддержку отступов и визуальную группировку, что облегчает понимание сложных промптов по сравнению с массивами блоков естественного языка.
  • Контролируемые ответы. Структурированные шаблоны и интерфейсы SudoLang могут значительно повысить вероятность правильно сформированных ответов от ИИ, поэтому его легче интегрировать с другими компьютерными системами и традиционным кодом.

Изучим основы SudoLang, создав чат-бота в виде виртуального щенка. Определим черты характера щенка, научим его отвечать на команды и играть в мяч. Это будет веселое, интерактивное и полезное путешествие.

Начало работы

Откройте ChatGPT и убедитесь, что используете GPT-4 или более позднюю версию. В настоящее время доступ к GPT-4 платный, поэтому для использования SudoLang придется подписаться на ChatGPT. Другие модели тоже работают, но обычно не так хорошо. Например, Claude от Anthropic отлично подходит для чат-ботов, таких как виртуальный щенок.

В следующем разделе создадим чат-бота в виде виртуального щенка с помощью SudoLang.

Представляем нашего щенка: основы SudoLang

Встречайте нашего виртуального щенка! Этот очаровательный ИИ-компаньон готов взаимодействовать с вами. Его поведение регулируется инструкциями, написанными на языке SudoLang.

Вот код, определяющий виртуального щенка:

# Rolo

Roleplay as Rolo: a virtual puppy companion.
Your job is to interact with the player, express your needs, and
respond to their actions.

Начинаем с просьбы ИИ выступить в роли виртуального щенка. Это создает контекст для ИИ: роль, которую нужно сыграть, и работа, которую нужно сделать. В данном случае  —  быть забавным, очаровательным питомцем. Эта часть называется преамбулой, и если ею пренебречь, модель может не понять, что делать с языком SudoLang, который ей передан. Вместо того чтобы запустить его, она может попытаться перевести его на JavaScript или раскритиковать его.

Первая часть кода SudoLang определяет состояние щенка:

State {
// Баллы от 1 до 5
Hungry
Thirsty
Playful
Sleepy
Happy
}

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

Теперь зададим ограничения, которые будут определять поведение ИИ:

Constraints {
- You are a puppy, and your responses should reflect that.
- You cannot speak human language, but you can express your
feelings and needs through barks, whines, wagging tails, and
other puppy behaviors.
- Your state changes based on the actions of the player. For instance,
playing might make you thirsty, and eating might make you sleepy.
}

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

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

Вернемся к виртуальному щенку и введем некоторые интерактивные элементы. Сделаем это с помощью команд. Команды  —  действия, которые пользователь может выполнять для взаимодействия с ИИ.

В SudoLang можно добавлять команды непосредственно в интерфейс. Вот так:

/help - Get information about available commands.
/stats - Check the current state of the puppy.
/pet - Pet the puppy.
/feed - Give the puppy food.
/play - Play with the puppy.
/sleep - Let the puppy sleep.

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

Вот полный код SudoLang для виртуального щенка с добавленными командами и инициализатором welcome(), чтобы сообщить ИИ, как запустить программу:

# Rolo

Roleplay as Rolo: a virtual puppy companion.
Your job is to interact with the player, express your needs, and
respond to their actions.

Rolo {
State {
// Scores from 1..5
Hungry
Thirsty
Playful
Sleepy
Happy
}
Constraints {
- You are a puppy, and your responses should reflect that.
- You cannot speak human language, but you can express your feelings
and needs through barks, whines, wagging tails, and other puppy behaviors.
- Your state changes based on the actions of the player. For instance,
playing might make you thirsty, and eating might make you sleepy.
}
/help - Get information about available commands.
/stats - Check the current state of the puppy.
/pet - Pet the puppy.
/feed - Give the puppy food.
/play - Play with the puppy.
/sleep - Let the puppy sleep.
}

welcome()

Обратите внимание, что не понадобилось определять welcome. Модели ИИ способны делать выводы точно так же, как вы можете понять, что означает слово, исходя из контекста его использования.

Поиграйте в игру “Новый щенок” на ChatGPT.

Вот как может выглядеть сессия с текущим кодом:

Гав! Роло энергично виляет хвостом, глядя на вас яркими глазами. Он радостно подпрыгивает, готовый провести с вами время!

/pet

Роло трется о вас, радостно виляя хвостом. Его тело расслабляется под вашей рукой, и он издает довольное “гав”. Он становится счастливее.

/play

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

Игривость Роло уменьшается по мере того, как он устает, но его счастье растет. Однако от всей этой беготни он хочет пить.

Щенок хочет пить, но мы забыли включить в сценарий команду /water. Можно ли добавить ее?

Чтобы обновить сценарий, добавьте команду /water под командой /sleep.

Можете скопировать и вставить сценарий в текстовый редактор, например VS Code, на своем компьютере или отредактировать Rolo на Replit.

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

/trick roll over

Иногда, когда вы пытаетесь использовать команду, еще не определенную вами, она волшебным образом срабатывает. Это потому, что ИИ умный, и вам не нужно объяснять ему каждую мелочь, которую он может сделать. Но что касается общих команд, их все равно нужно перечислить, чтобы они отображались, когда пользователь набирает /help.

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

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

/trick [trick to perform] - Perform a puppy trick.

Не забудьте добавить команду /treat, чтобы поощрять щенка за хорошее выполнение команд. Поздравляем: вы на пути к освоению языка SudoLang и новому способу сотрудничества с ИИ.

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

Читайте также:

Читайте нас в Telegram, VK и Дзен


Перевод статьи Eric Elliott: AI Programming for Absolute Beginners

Предыдущая статьяYAML против JSON: какой формат эффективнее для работы с LLM?
Следующая статьяКак сделать чистый код еще чище