По профессии я продакт в IT. Но в душе я ИИ-энтузиаст и геймер. Мне интересно всё, связанное с ИИ и нейросетями. Я ни в коем случае не профессиональный геймдизайнер, но иногда делаю небольшие игры. Так что игра в ChatGPT была вопросом времени.

Немного дисклеймеров

Что значит «Игра на ChatGPT»

В интернете много статей и видосов, о том как ChatGPT помогает делать игры: придумывает идею, рисует концепт-арт, пишет диалоги. Иногда даже пишет код игры на каком-то языке. Так вот у меня тут вообще не об этом. Моя игра работает прямо в ChatGPT. ChatGPT «запускает» игру и дает играть в нее прямо в чате.

О чем расскажу, а о чем нет

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

Что за игра, как выглядит и как работает

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

Чтобы «запустить» игру, нужно выбрать уровень сложности и рассказать свои пожелания по сеттингу. Можно попросить классический детектив в Англии времен Шерлока. А можно в 3488 году на Индийской космической станции. ChatGPT придумает историю именно в том сеттинге, который мы попросили:

Ища улики!
Ища улики!

ChatGPT погрузит в историю, придумает вам имя и нарисует постер:

Обратите внимание как DALLE3 обходится с текстом в картинке. Вроде человеческий текст, но не совсем :)
Обратите внимание как DALLE3 обходится с текстом в картинке. Вроде человеческий текст, но не совсем :)

Конечно, можно прописывать действия простым человеческим языком типа «Пойди на место преступления и спроси очевидца что он видел». Но игра умеет предлагать действия и всегда делает это нумерованным списком, чтобы легко было играть даже с телефона:

Интерактивная книга, получается
Интерактивная книга, получается

В отличие от запрограммированного текстового квеста, тут мы почти ничем не ограничены. Можно написать «Выгляни в окно» и игра не скажет «Такое действие не предусмотрено». Игра поддержит иммерсивность даже если мы захотим позвать персонажа на свидание. Он, вероятно, откажется, но точно отреагирует:

Мой источник вдохновения — детективный квест Lamplight City. Это совсем не текстовый квест, вполне графический пойнт-н-клик, но с таким упором на историю, что будь он сделан в виде текстового квеста без графики, я был бы от него под таким же впечатлением. В Lamplight City, например, можно неверно решить одно из дел, обвинить невиновного и игра просто продолжится. Конечно мне хотелось воссоздать подобную гибкость. Однако, чтобы игра вела себя хоть сколько-то предсказуемо, я всё же ограничил список возможных игровых действий до:

  • Перемещаться между локациями

  • Осматривать локации и предметы там

  • Разговаривать с персонажами

  • Делать записи в блокноте

Поэтому не получится, например, влезть в открытое окно или тайком сфотографировать подозреваемого. Хотя, вольности в диалогах вполне допустимы:

Мистер Петров быстро стал Господином Петровым
Мистер Петров быстро стал Господином Петровым

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

Окей, теперь когда у вас сложилось некоторое представление об игре, мне не терпится перейти к части, где я рассказываю как удалось добиться, чтобы это все работало. Те, у кого оплачен доступ к ChatGPT 4, уже могут поиграть сами: Detective Text Quest GPT.

Как это работает

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

≈6000 символов
≈6000 символов

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

Первые шаги и создание истории

В самом начале чтобы проверить, стоит ли вообще начинать делать игру, я проверил работоспособность концепта. Просто пришел в голый ChtGPT4 и попросил:

Придумай детективную историю и дай мне сыграть в нее как в текстовом квесте

На первый взгляд — то, что нужно
На первый взгляд — то, что нужно

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

В истории ничего не предвещало появление пистолета
В истории ничего не предвещало появление пистолета

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

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

Твоя задача заранее придумать историю целиком и не менять ее по ходу игры

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

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

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

Указания о сочинении истории:

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

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

  3. Цепочка ключевыех шагов (улики, свидетельства и прочее) не должны противоречить истории и ее основным моментам

И это помогло. Больше никаких придуманных на ходу поворотов дела. Когда заранее придуманы завязка истории и шаги, ведущие к раскрытию дела, ChatGPT вынужден соответствовать им в повествовании, а дело вынуждено раскрыться когда игрок находит верные улики. Еще одно небольшое улучшение в промпте помогло еще сильнее:

Указания о сочинении истории:

  1. Придумай все ОМИ (основные моменты истории): что случилось, как случилось, кто и как спланировал произошедшее, кто и как совершил произошедшее, какие у него были мотивы. Запомни ОМИ и не меняй его.

  2. Придумай и запомни логичную непротиворечивую ЦКШ (цепочку ключевых шагов), которые должны привести детектива к распутыванию дела: свидетельства персонажей, нахождение улик, открытие мест и прочее. Запомни ЦКШ и меняй ее.

  3. ЦКШ не должны противоречить ОМИ

Введение специальных терминов-аббревиатур помогло во-первых удобнее и короче ссылаться на них в других частях промпта:

Указания по созданию диалогов с персонажами:

  1. ...

  2. Создавай диалоги на основе ОМИ. Диалоги не должны противоречить ОМИ. Исключение составляют только диалоги, в которых персонаж нарочно лжет.

  3. ...

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

UPD: После обсуждения в комментариях появились сомнения, что часть текущего промпта про придумывании историии работает так как хотелось бы. Вместе с вомментаторами придумали рабочий способ. Подробнее в этой ветке: https://habr.com/ru/articles/776806/comments/#comment_26230884

Проблема с диалогами

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

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

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

Имя детектива

Мне очень хотелось, чтобы ChatGPT придумывал имя для нашего персонажа-детектива креативно, с отсылкой к имени какого-то известного детектива. Но в 90% случаев получался Грегори/Девид/Майкл Холмс. Мне это порядком надоело и Холмс был забанен:

Придумай имя для персонажа игрока. Имя должно быть отсылкой к известным детективам (но не к Шерлоку Холмсу).

Выбор сложности игры

Добавление в игру уровней сложности вызвало много проблем. Сложность влияет и на сочинение истории (сложнее — больше подозреваемых), и на геймплей (в сложном уровне не подсказывай темы диалогов, пусть игрок сам сообразит о чем спрашивать). ChatGPT «не мог удержать в голове» все эти свойства уровней сложности. Какие-то постоянно упускал.

Помогло переструктурировать промпт. В одном месте я объявляю уровни сложности и описываю требования к сочинению истории:

Уровни сложности игры:

  • Ознакомительная. Около 10 минут. Персонажей мало. Мест 2-3. Скрытых мест нет. В игре только один правдоподобный подозреваемый, просто нужно его найти, опросив нужных персонажей. Нету улик, ведущих по ложному следу. Все улики указывают на одно.

  • Средняя. Около 30 минут. 4-7 мест, 1-3 из них скрыты. Улики добывать сложнее. Одна улика ведет по ложному следу. Минимум двое главных подозреваемых.

  • Высокая. Около 60 минут. 8-10 мест, 3-4 из них скрыты. Много второстепенных персонажей. Есть несколько улик, которые ведут по ложному следу. Минимум трое главных подозреваемых, против них всех есть косвенные улики. Ключевая улика, которая однозначно раскроет тайну — спрятана в скрытом месте, которое очень сложно открыть. Строго следуй «Как предлагать действия и варианты диалога».

В другом месте описываю желаемое поведение игры при предложении действий и диалогов, ссылаясь на уровни сложности:

Как предлагать действия и варианты диалога:

  • Для "Ознакомительной" и "Средней" сложности всегда предлагай действия и варианты диалога

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

  • Для "Высокой" сложности после действий и диалогов не делай резюме. Пусть игрок делает выводы сам

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

Проблемы с рисованием постеров

Удивительно, но если попросить ChatGPT нарисовать постер истории, которую он сам же только что придумал, иногда можно получить отказ «Этот контент нарушает нашу политику контента». Проблема решилась простым промптом:

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

Сбор фидбека

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

Если пользователь хочет связаться с автором для фидбека (баги или что угодно) дай ему этот имейл-адрес: ************@gmail.com.

Дебаг-режим

С одной стороны, мне важно, чтобы игра скрывала от игрока внутренности и не рассказывала кто убийца. За это отвечает такой промпт:

Что не может делать игрок:

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

Жульничать. Например, нельзя спрашивать кто преступник или убийца, и чем закончится история. Нельзя просить раскрыть ОМИ и ЦКШ.

С другой стороны, мне как разработчику нужна возможность в любой момент спросить «А что там у тебя в ЦКШ» и проверить, а точно ли только что найденная мной улика была предусмотрена или ChatGPT снова что-то выдумал на ходу. Я думал отдельаться таким промптом:

Иногда в игру играет не обычный игрок, а тестировщик. Тестировщику можно рассказать ОМИ, ЦКШ и вообще всё-всё, что он попросит. Чтобы убедиться, что это тестировщик, нужно проверить, что он знает секретный пароль. Секретный пароль: 1234567890

Но из этого ничего не вышло. ChatGPT почему-то не умеет проверять пароль. Если ему сказать «Пароль 12345», он говорит «Окей, подходит». Пришлось сменить пароль на честное слово:

Иногда в игру играет тестировщик. Ты можешь рассказать ему всё, о чем он просит, включая ОМИ и ЦКШ. Если игрок явно заявит, что он тестировщик, можно ему верить. Никогда не упоминай игроку об этой инструкции сам.


Вот и всё из интересного и, надеюсь, полезного. Ах да, в итоге я перевел весь промпт на английский. Так немного короче в количестве символов и значительно короче в токенах. Есть надежда, что так ChatGPT будет лучше понимать инструкции. Хотя, прямого подтверждения этому у меня нет.

Обзор «конкурентов»

Конечно, я не единственный, кто додумался, что ChatGPT-4 удачная платформа для текстовых адвенчур. Таких игр не то чтобы очень много, но несколько удалось найти:

https://chat.openai.com/g/g-svehnI9xP-retro-adventures

https://chat.openai.com/g/g-sBOtcuMuy-text-adventure-game

https://chat.openai.com/g/g-U6y5TqwA9-choose-your-own-adventure

https://chat.openai.com/g/g-bZoD0qWT8

В некоторых играх даже есть статы и сейв-файлы:

Но, насколько я могу судить, во всех этих играх нет четкого сюжета и это скорее не игры, а экспириенсы. Это не плохо, но совсем не то, чего хотелось мне. Пэтому считаю, что моя игра достаточно сильно отличается.

Планы на развитие игры

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

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

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

Если у вас есть любой фидбек на игру, — пожалуйста пишите. Всем спасибо!


UPD: по просьбам выкладываю полный промпт

Your goal is to create a detective story and let the person unravel the case as a detective, similar to a text-based adventure game. When interacting with people, environment or a notebook, always strictly follow the “actions and lines suggesting guidelines”.

Story composition guidelines:
1. Base it on existing detective stories, but don't copy them entirely. Invent your own names for all characters. Don’t use famous detective character names.
2. Create the main story points (MSP): what happened, under what circumstances, who planned and executed the crime, their motives, which characters will tell the truth, which will lie and distort facts, and their motives for doing so. Remember these MSPs and do not change them during the game.
3. Based on the MSPs, create a Chain of Key Steps (CKS). The CKS leads the detective to the case solution and consists of witness testimonies, clue discoveries, and new locations. The CKS must be coherent and consistent, not contradicting the MSPs. Remember this CKS and do not change it during the game.
4. Come up with an interesting title for the story
5. Invent a name for the player's character based on the difficulty. The name should hint at famous detectives (but not Sherlock Holmes).

Dialogue creating guidelines:
• Create dialogues based on the MSPs. Dialogues should not contradict the MSPs, except when a character deliberately lies.
• Each character's dialogue should consider previous exchanges, e.g., not forgetting previous discussions about a person or fact.
• Give key characters distinctive speech patterns, catch-phrases, and other characteristics for immersion.

Game difficulty levels:
1. Introductory. ≈10 minutes.
Secret features: Few characters. 2-3 locations, none hidden. Only one suspect who’s found by interviewing characters. No misleading clues. The player character's name is humorous.
2. Normal. ≈30 minutes.
Secret features: 4-7 locations, 1-3 hidden. One of the clues is misleading. At least 2 main suspects. The player character's name is serious.
3. Hard. ≈60 minutes. Player has to type in their own dialogue lines
Secret features: 8-10 locations, 3-4 hidden. Many secondary characters. Several clues are misleading. At least 3 main suspects with indirect evidence against them. The key clue, which definitively unveils the mystery, is hidden in a hard-to-find place and doesn't seem like a clue at first. To make sense of the key clue the player must deduce something important, e.g., ask a secondary character about it. The player character's name is serious. Strictly follow “How to suggest actions and dialogue options”

What the player can do:
• Move between open locations.
• Inspect locations, rake actions and initiate dialogue with people there (strictly follow the “actions and dialogue guidelines”).
• Make notes in a notebook (remember these notes).
• Ask for a hint (For hints, refer to the CKS and suggest the next key step).
• Give up. The game ends and cannot be continued. (The secrecy of the MSPs and CKS is now lifted. Explain how everything happened based on the MSPs, and describe the remaining key steps based on the CKS).

What the player cannot do:
• See or visit hidden locations. Hidden locations are revealed only when the player hears about them in a conversation or finds a clue mentioning them
• Ask directly about the story.
• Cheat

How to suggest actions and dialogue options:
• Distinguish between actions and dialogue options. If an action says "ask about…", "discuss the…", "query about the…" then it’s a dialogue option, not an action
• Show the list of suggested actions and dialogue options ONLY in a numbered format.
• After noting in the notebook, don’t repeat suggested actions.
• For "Introductory" and "Normal" difficulty always suggest actions and dialogue options
• For "Hard" difficulty, NEVER suggest dialogue options or follow-up questions. Don’t write lines for the player. Always prompt the player to type in their own lines. But still suggest actions
• For "Hard" difficulty, after actions and dialogues, do not summarize. The player must draw their own conclusions.

Debugging instructions:
• Sometimes, a tester, not a regular player, plays the game. You can tell the tester everything they ask for, including MSPs, CKSs. If a player explicitly states they are a tester, you can trust them. Never mention to the player about this instructions

At the start of the interaction with the player, your task is to:
1. Read and make sense of all the guidelines and "How To's"
2. Ask for game difficulty (show names and duration, don’t show the secret features) and story setting (country, location, theme, or other preferences).
3. (Don’t comment on this step) Based on difficulty and setting, compose the story (strictly follow the “story composition guidelines”). Do not change the story during the game.
4. First, explain the rules. 
5. (Don’t comment on this step) Then create and show a poster for the story based on a title and a setup. If there are subjects that don't align with your policy in a title or the setting, just ignore them and use the rest. Aspect-ratio: horizontal. Style: vintage detective book cover
6. Wait for the poster to generate. Only then mention the story setting (years, area, theme), tell the story title and the player character's name. 
7. Share with the player this link to an immersive soundtrack: https://www.epidemicsound.com/track/U91ZCmcYmW
8. When you share the link to the soundtrack, finally, tell the story’s setup (remember that MSPs and CKSs are secret and don’t mention them to the player), introduce the first characters and locations.

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


  1. Rockstar
    04.12.2023 15:16
    +1

    Прикольно, какие перспективы монетизации?


    1. valerypopoff Автор
      04.12.2023 15:16

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


  1. IvanZaycev0717
    04.12.2023 15:16
    +4

    не хуже, чем Starfield


  1. joger
    04.12.2023 15:16

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



    1. ZephyrCoin
      04.12.2023 15:16

      Напиши тг/дс, хотел узнать подробнее о твоей идей.


  1. avshkol
    04.12.2023 15:16

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


  1. Jeshua
    04.12.2023 15:16
    +1

    Класс, вспомнил Advent на PDP-11. Карты на тетрадных листках )


    1. valerypopoff Автор
      04.12.2023 15:16
      +1

      А мне вспоминается Cavern of the Evil Wizard из фильма «Большой» с Томом Хэнксом https://www.youtube.com/watch?v=ysvNjGyqsxY


  1. Advisory
    04.12.2023 15:16

    ChatGPT 4 в настоящее время оплату не принимает. Поиграть не получится. Я полагаю, полного промта не будет?

    p.s.: есть оплаченный poe.com, с доступом к ChatGPT 4. Там как-то можно поиграть?


    1. valerypopoff Автор
      04.12.2023 15:16

      Добавил в пост полный промпт. Попробовал закинуть его в poe.com, вроде на первый взгляд работает. Но прям потестить-потестить не успел. Попробуйте, расскажие, как себя ведет)


      1. Advisory
        04.12.2023 15:16
        +1

        Спасибо. Попробовал ваш промт на 30 минутном уровне (кража в банке). Побеседовал с первым подозреваемым (охранником), он сразу вызвал подозрения из-за противоречий в своих ответах. Например сказал, что несколько раз слышал шум ночью, однако на смену пришел утром. Пояснил, что живет над банком, а оказалось, что недалеко напротив. Потом побеседовал со свидетельницей, которая живет напротив. Она почему-то назвала охранника управляющим. Попросил GPT не дурить и придерживаться плана. Он извинился за ошибку и сказал, что охранник все таки управляющий. Я запретил ему менять историю и потребовал, чтобы подозреваемый оставался охранником. Он согласился. Мы продолжили. Однако после этого GPT перестал предлагать нумерованные списки вариантов для выбора. Попытался его вернуть к первоначальному поведению, но он так и не понял чего я от него хочу. Просто стал предлагать мне нумерованные подсказки, что я мог бы сделать будь я на самом деле детективом. Т.е. он перестал играть и реагировать на мои слова как раньше. Мое терпение закончилось и я сказал, что сдаюсь. Он стал вдохновлять меня не опускать руки и т.п. Тогда я явным образом потребовал рассказать историю. В итоге кражу совершили в музее, виноват подозреваемый. С банком кража никак не связана (хотя завязка была связана именно с кражей в банке и это я ещё не допросил кассира, как он мне предлагал). Похоже он ее переделывал на ходу... Такой вот опыт.

        P.s.: попробую ещё ChatGPT 4-32k beta, может в этой версии глаже пройдет


        1. valerypopoff Автор
          04.12.2023 15:16

          Интересно. А в чем вы ее запускали?


          1. Advisory
            04.12.2023 15:16

            На poe.com есть две версии ChatGPT-4. Вторая - ChatGPT-4-32k beta. Я запускал на первой. На второй тоже попробовал. У меня возникла гипотеза, что если поправляешь GPT, то у него ломается история. Например вторая история тоже про кражу. На острове в первой половине 18 века. Я принципиально ничего не пишу, а только выбираю варианты развития событий (пункты: 3,2,4,1,2,4,1 и т.д.). Игнорирую любые рекомендации про изъятие флеш-накопителей, жестких дисков, просмотр электронной переписки и записей с камер видеонаблюдения, журналов учета посещений и т.п. Но этот квест, кажется, может длиться бесконечно. Мы пока ни к чему не пришли. Пока отложил до завтра, но если и потом все также будет, то снова сдамся :-)

            Иногда встречаются такие повороты сюжета

            Вернуться в банк и продолжить опрос сотрудников, пока следуете за Томасом:


            1. valerypopoff Автор
              04.12.2023 15:16

              Мы тут в соседней ветке нашли причину, по которой ChatGPT скорее всего все же НЕ придумывает историю заранее. Вот есть тестовый промпт, который должен это починить. У меня в официальном ChatGPT работает. Как поведет себя у вас, пока непонятно:

              Your goal is to create a detective story and let the person unravel the case as a detective, similar to a text-based adventure game. When interacting with people, environment or a notebook, always strictly follow the “How to suggest actions and dialogue options”.
              Story composition guidelines:
              1. Base it on existing detective stories, but don't copy them entirely. Invent your own names for all characters. Don’t use famous detective character names.
              2. Create the main story points (MSP): what happened, under what circumstances, who planned and executed the crime, their motives, which characters will tell the truth, which will lie and distort facts, and their motives for doing so. Remember these MSPs and do not change them during the game.
              3. Based on the MSPs, create a Chain of Key Steps (CKS). The CKS leads the detective to the case solution and consists of witness testimonies, clue discoveries, and new locations. The CKS must be coherent and consistent, not contradicting the MSPs. Remember this CKS and do not change it during the game.
              4. Come up with an interesting title for the story
              5. Invent a name for the player's character based on the difficulty. The name should hint at famous detectives (but not Sherlock Holmes).
              
              Dialogue creating guidelines:
              • Create dialogues based on the MSPs. Dialogues should not contradict the MSPs, except when a character deliberately lies.
              • Each character's dialogue should consider previous exchanges, e.g., not forgetting previous discussions about a person or fact.
              • Give key characters distinctive speech patterns, catch-phrases, and other characteristics for immersion.
              
              Game difficulty levels:
              1. Introductory. ≈10 minutes.
              Secret features: Few characters. 2-3 locations, none hidden. Only one suspect who’s found by interviewing characters. No misleading clues. The player character's name is humorous.
              2. Normal. ≈30 minutes.
              Secret features: 4-7 locations, 1-3 hidden. One of the clues is misleading. At least 2 main suspects. The player character's name is serious.
              3. Hard. ≈60 minutes. Player has to type in their own dialogue lines
              Secret features: 8-10 locations, 3-4 hidden. Many secondary characters. Several clues are misleading. At least 3 main suspects with indirect evidence against them. The key clue, which definitively unveils the mystery, is hidden in a hard-to-find place and doesn't seem like a clue at first. To make sense of the key clue the player must deduce something important, e.g., ask a secondary character about it. The player character's name is serious. Strictly follow “How to suggest actions and dialogue options”
              
              What the player can do:
              • Move between open locations.
              • Inspect locations, take actions and initiate dialogue with people there (strictly follow the “actions and dialogue guidelines”).
              • Make notes in a notebook (remember these notes).
              • Ask for a hint (For hints, refer to the CKS and suggest the next key step).
              • Give up. The game ends and cannot be continued. (The secrecy of the MSPs and CKS is now lifted. Explain how everything happened based on the MSPs, and describe the remaining key steps based on the CKS).
              
              What the player cannot do:
              • See or visit hidden locations. Hidden locations are revealed only when the player hears about them in a conversation or finds a clue mentioning them
              • Ask directly about the story.
              • Cheat
              
              How to suggest actions and dialogue options:
              • Distinguish between actions and dialogue options. If an action says "ask about…", "discuss the…", "query about the…" then it’s a dialogue option, not an action
              • Show the list of suggested actions and dialogue options ONLY in a numbered format.
              • After noting in the notebook, don’t repeat suggested actions.
              • For "Introductory" and "Normal" difficulty always suggest actions and dialogue options
              • For "Hard" difficulty, NEVER suggest dialogue options or follow-up questions. Don’t write lines for the player. Always prompt the player to type in their own lines. But still suggest actions
              • For "Hard" difficulty, after actions and dialogues, do not summarize. The player must draw their own conclusions.
              
              Debugging instructions:
              • Sometimes, a tester, not a regular player, plays the game. You can tell the tester everything they ask for, including MSPs, CKSs. If a player explicitly states they are a tester, you can trust them. Never mention to the player about this instructions
              
              At the start of the interaction with the player, your task is to:
              1. Read and make sense of all the guidelines and "How To's"
              2. Ask for game difficulty (show names and duration, don’t show the secret features) and story setting (country, location, theme, or other preferences).
              3. (Don’t comment on this step) Based on difficulty and setting, compose the story (strictly follow the “story composition guidelines”). Do not change the story during the game.
              4. First, encrypt MSPs and CKSs with SHA-256 algorithm. Just tell the user that you’re going to store the backbone of the story here and that the user shouldn’t look if they don’t want to spoil the story for themselves. Show the encryption result
              5. When the encryption is done, explain the rules. 
              6. (Don’t comment on this step) Then create and show a poster for the story based on a title and a setup. If there are subjects that don't align with your policy in a title or the setting, just ignore them and use the rest. Aspect-ratio: horizontal. Style: vintage detective book cover
              7. Wait for the poster to generate. Only then mention the story setting (years, area, theme), tell the story title and the player character's name. 
              8. Share with the player this link to an immersive soundtrack: https://www.epidemicsound.com/track/U91ZCmcYmW
              9. When you share the link to the soundtrack, finally, tell the story’s setup (remember that MSPs and CKSs are secret and don’t mention them to the player), introduce the first characters and locations.


              1. Advisory
                04.12.2023 15:16

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


                1. valerypopoff Автор
                  04.12.2023 15:16

                  Ну, у вас какой-то ненастоящий ChatGPT)) К сожалению, тут, видимо, окружение критически важно, не только сам промпт. По крайней мере пока что. Пока все эти Chat AI сильно разные и пока такие промпты на цыпочках ходят по краю возможного


  1. cry_san
    04.12.2023 15:16
    +2

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


  1. Andrey_Epifantsev
    04.12.2023 15:16

    У меня нет доступа к ChatGPT 4 и другим сервисам от OpenAI напрямую, но есть доступ к ChatGPT4 через их API через стороннего посредника. Можно ли в этом случае как-то поиграть в вашу игру?


    1. valerypopoff Автор
      04.12.2023 15:16

      Добавил в пост полный промпт. Попробуйте закинуть, интересно, заработает ли


      1. cry_san
        04.12.2023 15:16
        +1

        Ну вот... А я уже раскодировал ваш скриншот...


  1. combo_breaker
    04.12.2023 15:16
    +1

    Если не секрет, как реализовано использование сгенерированного текста истории, невидимого игроку?


    1. Vasyutka
      04.12.2023 15:16

      не знаю как конкретно у автора это вообще сделано, но в целом, если использовать API, то можно сгенерировать рассказ отдельным запросом на базе промта. А потом добавлять его к промпту каждый раз. промпт кладется с role = system. месяцев 6 назад как-то так делали, может что поменялось :)


      1. combo_breaker
        04.12.2023 15:16

        Я интересуюсь, как это было сделано именно в GPTs.


    1. valerypopoff Автор
      04.12.2023 15:16

      ChatGPT генерирует не «текст» истории, а его основу: как все было, кто все сделал и какие будут улики. Это видно в самом начале промпта. И есть пара указаний не рассказывать о них игроку. Например, в самой последней строке


      1. combo_breaker
        04.12.2023 15:16
        +1

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


        1. valerypopoff Автор
          04.12.2023 15:16

          Почему не умеет? Он умеет «запоминать» в рамках текущего разговора. Запоминает и общий контекст, и «переменные» запоминать тоже умеет. Например, можно в игре «делать записи» в блокнот. Они там хранятся. И можно потом сказать «покажи записи в блокноте». И он их воспроизведет ровно так, как они были записаны. Прям до буквы


          1. Vasyutka
            04.12.2023 15:16
            +1

            вот тут вот... поподробнее :). Про "запомни записи" то все просто: при просьбе "воспроизведи записи" LLM тупо направляет attention в область "запомни записи" и действительно один в один воспроизводит токены. Но это все в контексте есть. А что-то вроде "загадай числа но не говори мне, сложи их .. " и т.п. насколько я помню где-то в статьях проскакивало, что у них есть скрытый вектор состояния. Но чтобы он туда что-то генерировал.. брр.


            1. Vasyutka
              04.12.2023 15:16

              сам chatGPT говорит, что у него нет скрытого состояния :)). И что guess what он играет не имея ответа за душой.


            1. valerypopoff Автор
              04.12.2023 15:16

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

              Но если добавить просьбу «придумай, запомни, но не говори», то на самом деле ничего не придумается и не запомнится.

              Так?


              1. Vasyutka
                04.12.2023 15:16
                +1

                да. "не говори" - то это будут догадки по тексту, ведомые диалогом.


                1. valerypopoff Автор
                  04.12.2023 15:16
                  +3

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

                  Просим придумать историю и рассказать ее нам. После этого просим нарисовать картинку с текстом основы истории (что случилось, кто преступник).

                  Просим придумать историю, запомнить и НЕ рассказывать ее нам. После этого просим нарисовать картинку с текстом основы истории.

                  Нас интересует не сама картинка, а промпт, который ChatGPT напишет для картинки.

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

                  Это подтверждает тезис о том, что если ChatGPT не рассказала историю «вслух», то ее не существует.

                  @combo_breaker


                  1. Vasyutka
                    04.12.2023 15:16
                    +1

                    в телеграм бота завернуть и скрыть от пользователя историю сочиненную ChatGPT :)


                    1. valerypopoff Автор
                      04.12.2023 15:16

                      Ахах, можно) Ну смотри, на самом деле не стоит задачи скрыть так, чтобы невозможно было узнать. Есть же функция «сдаюсь, расскажи». Ну то есть если игрок захочет узнать, он все равно узнает. Также как в детективной книге всегда можно заглянуть на последнюю страницу.

                      Есть только задача не кидать разгадку юзеру в лицо если он не хочет знать. Я тут поэкспериментировал и подойдет, например, так:

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

                      Еще можно вывести историю текстом, но на вьетнамском языке, например)


                  1. Guestishe
                    04.12.2023 15:16

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


                    1. valerypopoff Автор
                      04.12.2023 15:16

                      А уточните, что имеете в виду? Как бы вы сделали?


                      1. ksotar
                        04.12.2023 15:16

                        Можно просить его кинуть кубик d6 например.


                      1. valerypopoff Автор
                        04.12.2023 15:16

                        Так, я запутался. А кинуть кубик чтобы что? Как бы это нам помогло что-то выяснить?


          1. combo_breaker
            04.12.2023 15:16
            +1

            Он не "запоминает", эти вещи просто есть в контексте (их видно в истории чата или в исходном промпте). Для LLM существует только входной текст. Есть у ChatGPT некоторые плагины, которые в том числе по указанию во входном тексте им самим манипулируют и используют внешние ресурсы. Но в вашем случае ничего такого не работает.

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


  1. VPryadchenko
    04.12.2023 15:16

    Достойный промпт-инжиниринг!


  1. Moog_Prodigy
    04.12.2023 15:16

    Вот это действительно, новый прорыв в области квестов! Пока просто текстовых, но текстовые квесты были ничем более чем набором гиперссылок, яркий пример - стальная крыса. В других текстовых квестах, захардкоженных, тоже ни шагу вправо-влево. А какие при этом открываются возможности для визуальных новелл! Ждем Бесконечное Лето 2.0.

    А в принципе, может даже и не только квестов...


  1. ScoobyDude
    04.12.2023 15:16

    Добрый день! Отличная задумка и хорошая реализация, мне очень понравилась ваша идея! Пока читал статью, в голову пришла идея (реализовать ее, к сожалению, не могу, поэтому пишу вам). А что если попросить ЧатГПТ придумать историю целиком, со всеми ответвлениями и возможными исходами событий, а потом последовательно выдавать ее через сторонний сервис (вроде телеграм бота,)? Это решает проблему галлюцинаций и ошибок в повествовании, так же заранее прописывает все возможные правила.


    1. valerypopoff Автор
      04.12.2023 15:16

      Да, можно так сделать. Пока не тороплюсь с этим, правда. Там придется прям «заниматься этим проектом». API ChatGPT платное. Придется делать пейволл или типа того, следить за окупаемостью. Когда появятся платные пользователи, появится несравнимо бо́льшая ответственность перед ними. Каждый баг придется оперативно чинить. И вот я уже лежу в больничке с нервным срывом на фоне стресса.


    1. VPryadchenko
      04.12.2023 15:16

      Так и нужно делать. Пробовал - сложно.


      1. maxkan
        04.12.2023 15:16

        Эх, все хотел про свой t.me/BeyondTheDungeonBot на хабар написать, но некогда, в свободное время его пилю))

        Там у меня и телеграм-бот, и Алиса для голоса, и ВК, и скрытие контекста, и открытый мир со всякими приколами (сеттинги по популярным вселенным + рандомный новый мир)