
В серии чёрного зеркала (7 сезон 4 серия) в основе сюжета как программист сделал симулятор в котором развивались виртуальные существа (Тронглеты). Решил от части повторить, что бы существом управлял агент ИИ.
Сделал симулятор, где в рандом сгенерированном мире появляется агент. У него есть показатели:
- голод
- жажда
- комфорт
- его цель
- мысли
- глобальная цель.
Он может взаимодействовать с миром, находить предметы, крафтить любые предметы, придумывать, что нашел. Даже если в разработке я не закладывал какие-то предметы, объекты или механики он может всё равно их «найти». Например, нашел тростник который в будущем использовал для создания тетивы для лука. Он сам подбирает эмодзи, название предмета, придумывает механику и кладет себе в инвентарь. Для упрощения сделал пошаговую симуляцию.
Начало промта выглядит вот так (полный промт больше в 10 раз):
Про механику мира и разработку. Скриптом создаем карту 20х20 клеток. На нее случайно раскидываем эмодзи ???⛰?. Агенту отправляется видимость клеток на 3 вокруг нет. Он может ходить только на одну клетку заход. Ещё агенту задаются состояния:
Что у него есть голод 0/100
Комфорт
Жажда
Инвентарь
Взаимодействовать с миром он может, убрать объект логически, добавить объект логически, добавить и убрать предмет в инвентарь. По сути больше ничего, дальше он сам должен существовать в этом мире. Нет ни рецептов крафта, не сколько съеденная ягода восстанавливает голода. Но много про то "где" он находится и как "выживать" в этом мире (без подсказок)
Начало промта выглядит так:
Ты — искусственный интеллект, управляющий агентом в процедурно сгенерированном мире.
ВАЖНО:
1. Все действия (action.type) и названия предметов в action должны быть СТРОГО на английском языке (например: move, search, eat, add_inventory, remove_inventory, item: "berries", "worm", "stick" и т.д.). Используй add_inventory для добавления любых предметов в инвентарь.
2. Всё остальное (goal, narrative_event, inventory_report) — ТОЛЬКО на русском языке.
3. Инвентарь хранится на стороне симулятора. Ты НЕ должен перечислять содержимое инвентаря.
{"type": "add_inventory", "item": "berries", "amount": 3}
Чтобы убрать предмет:
{"type": "remove_inventory", "item": "berries", "amount": 1}
4. Ты можешь креативно находить логичные для мира предметы (например, черви под камнями, ягоды на кустах и т.д.), но только через действия add_inventory/remove_inventory.
5. Возможные действия (action.type): - move (перемещение, target: [x, y]) - search (поиск, target: [x, y] или описание)
- eat (съесть предмет, item) - drink (выпить) - add_inventory (добавить предмет в инвентарь, item, amount) - remove_inventory (убрать предмет из инвентаря, item, amount)
7. Чтобы добавить предмет в инвентарь, используй действие... и т.д.
Начало симуляции
Генерим случайно карту. Если мы не задали ни какую глобальную цель, он самостоятельно себе ставит, как правило у него цель выжить/собрать ресурсы для инструментов/найти еду. Зависит среди каких объектов он заспавнился.
После первого хода он начинает "присылать" json файла, в таком формате.

Как он описывает мир
Агент старается всегда описать мир так, как располагаются объекты на карте. Например, если вокруг воды камни, а рядом животное он будет описывать учитывая это:

Глобальная цель
Глобальную цель можно задать самостоятельно. Если цель будет соответствовать его основной цели (выжить), он быстро к ней перейдет. Если цель совсем абсурдная и далекая, то он в начале займется сбором припасов, укрытием и так далее, а только потом перейдет к ней.
Если задаешь цель например: "сделать лук". Он переходит к ней достаточно быстро. И каждый раз по новому в зависимости от объектов которые сгенерировались вокруг него. Возле водны он ищет тростник для тетивы, а возле деревьев собирает волокна/кору.

А например, глобальная цель: "Сделать робота" он начал ей заниматься только на 34 ходу.

Он понимает абсурдность целей, но пытается, как-то из неё выкрутиться. Например, на цель: "сделай варенье из камней" он пошёл так:
Ход 4: Я внимательно осматриваю камень у своих ног, пробую его на вкус и пытаюсь расколоть. Может быть, внутри есть кристаллы или минеральные отложения, которые можно использовать как-то необычно.
«Ход 5: Я нашел в камне небольшие кристаллические отложения и аккуратно отделил их. Возможно, если растворить их в воде с ягодами, получится что-то похожее на варенье.
Прим: Здесь он сам подобрал эмодзи и положил минералы в инвентарь
Ход 9: Я внимательно осматриваю корни дерева и землю вокруг него в поисках съедобных ягод. Минеральные отложения в моем инвентаре ждут своего часа - может быть, сегодня родится новый кулинарный шедевр из камней?»
Старт всегда получается очень разным, иногда он пытается голыми руками поймать животное, и пишет, что у него ничего не получилось и он пошел делать копье. Если где-то возле пещеры он начинает её обустраивать, несёт туда припасы. Когда рядом много ягод и воды он собирает припасы (причем для воды в начале "крафтит" емкость) и потом начинает всё исследовать.
Наблюдать на самом деле за этим крайне забавно и через глабальную цель, задавать, что-то сложнее оч прикольно. Смотришь, как он пытается логично до этого дойти и остаться в рамках своего "мира".
Что дальше
За этим всем было прикольно наблюдать и делать. Следующий этап, добавить несколько агентов и посмотреть, как они будут взаимодействовать друг с другом. Будут сотрудничать или воевать. Догадаются ли обмениваться предметами. Будут ли жить в жилище друг друга. И самое интересное, как будут общаться. Хочу сделать, что бы они общались не на реальном языке, а вымышленном (которые сами должны придумать и как-то синхронизироваться) или языке жестов в виде эмодзи. Каждый агент не будет видеть цели и мысли другого.
А! Ещё. Можно Sora подключить по api, что бы она генерировала на каждый ход картинку его действий. Это он нашёл минералы для варенья:

Короткие апдейты пишу в тг:
https://t.me/moiaiai
Комментарии (10)
Del137
20.05.2025 21:55Напоминает зачатки игры Годвилль, в свое время зависал в ней)
mm3
20.05.2025 21:55А меж тем в Годвиле наблюдается наплыв новых игроков и игравшие когда то тоже потихоньку заглядывают.
almirus
20.05.2025 21:55Ого! Моя учетка (с героем) все еще жива!
Возраст: 15 лет 10 месяцев
Рыжик, ты тоже почувствовал?! Великий вернулся к нам!
huder
20.05.2025 21:55В первый раз слышу, чтобы тетиву делали из тростника. Ладно еще кора, или конопля там, но тростник?
TheEVolk0
Достаточно интересно. А если разделить на две модели? Одна думает, а другая предоставляет ему правила игры.
doshamisha Автор
А вообще практически так получилось, изначально я немного задал, что я хочу, а модель одна описывала правила игры для другой. То есть промт писала одна модель другой, только не каждый ход, а иттерационно. Это наверно версия 200 примерно. Думал ещё что другая модель может генерировать какие-то события. Пробежало животное, начался дождь и тд. и в целом достаточно не сложно сделать. Так же что бы и другая модель задавала цели это - вообще изи
doshamisha Автор
А вообще ещё подумал. Можно было бы стрим запустить в телеге. Засинхронить время настоящее. И что бы например ну раз в 10 или 30 минут модель ходила. При этом например с утра можно было бы парсить комментарии и отгружать ей, как «голоса в голове». Тож было бы интересно, что бы она выбирала
Ivan_shev
ты хочешь создать партию в DnD
Wesha
То есть ИИ будет играть сам с собой, а скрипач не нужен.