То, что я писал ранее:
Ранее в этом году исследователи из Стэнфорда и Google создали миниатюрную версию The Sims. RPG виртуальный мир, в котором 25 персонажи по GPT и Контроль пользовательского кода,и вarxivВариант статьи был представлен на,Это вызвало широкое обсуждение игр AIGC+;
Август,Этот проект находится вGitHubОфициально с открытым исходным кодом,Хотя новостей еще много,Однако относительно мало дискуссий о технологии и методах реализации.,До сих пор я видел только одного замечательного человека на Чжиху на отечественных сайтах.изСтолбецИметь соответствующие концепции и процессы генерациииз Интерпретация,В этой статье также будут приведены некоторые анализы автора.
В этой статье будет обсуждаться, как проект заставляет агентов принимать решения с точки зрения архитектуры и принципов реализации. Каждый может общаться и учиться вместе.
PS: 目前还有一个AIмаленький городокPlusВерсияизAI-TownПроект такжеGitHubОткрытый исходный код,Это более масштабируемо,Автор представит этот проект в следующей статье.
Средой этого проекта является Python3.9.12, игровая логика разработана движком H5 Phaser3, а серверная часть использует Django в качестве сервера для предоставления веб-сервисов.
Как показано на рисунке ниже, поскольку в самой «игре» нет пользовательских операций, страница H5 предназначена только для отображения;
Основной цикл — это основной цикл, который заставляет агентов принимать решения. Время используется в качестве шага, а количество шагов операции определяется шагом, введенным пользователем в командной строке (примечание: интерфейс здесь не отображает результаты операции синхронно в режиме реального времени), и результаты операции отправляются на веб-сервер, а затем отображаются на внешнем интерфейсе;
Связи во всей архитектуре не длинные, и пользователям очень мало вещей, которые нужно поддерживать самостоятельно. «Запускать» проект очень легко, но это также показывает, что масштабируемость и свобода проекта невысоки.
Первый - это Django за кулисами Сервер, запускай environment/frontend_server
в каталоге
python manage.py runserver
После успешного запуска не забудьте перевести его в фоновый режим. Этот процесс является рабочей средой всего города ИИ. Если он закрыт, последующие шаги не могут быть выполнены.
После успешного запуска команды вы можете получить доступ к URL-адресу, установленному Django, в браузере и увидеть интерфейс инициализации всего города.
Уведомление:открыть эту страницуизTABЛучше всего оставить на рабочем столе,Не сворачивайте и не скрывайте,Если обнаружено, что страница TAB не находится в активном состоянии,,Фоновый процесс вычислений зависнет.
Предыдущий запуск из Веб-сервисов фактически предоставляет только среду песочницы по умолчанию.,Эта среда статична.,Он будет отображаться после обновления трека действий агентов.,Таким образом, этот этап запуска заключается в создании и отправке инструкций интеллектуальному агенту.,В проекте он называется Simulation Server.
Чтобы запустить эту программу, вам нужно запустить ее в каталоге reverie/backend_server.
python reverie.py
Процесс блокировки, управляемый пользователем, обычно делится на два этапа:
Сначала вам нужно выбрать предустановленную сцену, например официальный пример, чтобы открыть сцену с тремя NPC и ввести
base_the_ville_isabella_maria_klaus
Затем вам нужно ввести собственное имя, чтобы уникально представлять эту симуляцию (обратите внимание, что это имя будет использоваться в качестве пути сохранения всех файлов этой симуляции. Имя не может быть одинаковым, и «память» этой симуляции также может быть). быть унаследованы позже.
test-simulation // Вы можете выбрать любой
Во-вторых, после выбора сцены необходимо начать генерировать поведение NPC. Этот шаг также блокируется и управляется инструкциями пользователя.
run 10 //Имитируем 10 шагов поведения NPC
После выполнения этой команды обратите внимание, что NPC не будет двигаться сразу. Программа сначала вызовет интерфейс OpenAI, чтобы сформулировать план действий на весь день, а затем шаг за шагом смоделирует поведение NPC.
Через некоторое время NPC выполнит соответствующие действия в соответствии с инструкциями. Если вы хотите продолжить симуляцию, продолжайте вводить приведенные выше инструкции для симуляции.
Наконец, в проекте также предусмотрена функция сохранения и воспроизведения процесса моделирования, а также вы можете продолжить последнее моделирование. Я не буду здесь вдаваться в подробности. Ниже в основном обсуждается, как реализуется весь проект.
Давайте сначала посмотрим, как Веб-сервисы построены на основе Django.,Служитьиз Запустить порталдокументдаmanage.py
Каталог — это стандартная структура каталогов Django.,urlКонфигурация находится по адресуfrontend_server/settings/urls.py
документ,переписыватьсяизhandlerродыfrontend_server/translator/views.py
документ Вниз
Основные функции:
simulator_home
(переписыватьсяизhandlerдаhome) - Основной интерфейс города обновляет положение и действия NPC в реальном времени. Логика этой функции относительно проста, хранилище считывается отдельно. каталоге последнего документа среды NPCи, отображаемого на страницеreplay
(переписыватьсяизhandlerдаreplay)пройти спецификациюизsim_code,То есть указанный пользователем смоделированный идентификатор.,Используется для воспроизведения соответствующего процесса моделирования.Остальные методы также включают официальные примеры и т.п., которые здесь подробно описываться не будут.
Потому что по сути это "игра", но НПЦ управляется AI Agent Захвачено, поэтому карты, NPC Конструкция контроллера основана на Phaser3
игровой движок, который в основном используется для создания HTML5-игр. Используемый язык — JS/TS. Я не буду подробно рассказывать о его использовании. Если вам интересно, вы можете перейти к проекту. environment/frontend_server/templates
Посмотреть код игры в каталоге
Игровые карты и тела столкновений предварительно задаются путем настройки документа.,Не принимать операции пользователя,поэтомуигровой Движок также в основном используется для слоя отображения.
Ядро AI Agent Модуль запускается из основной функции. Входной файл находится внутри. reverie/reverie.py
,что создает ReverieServer объекта и выполнять операции инициализации, включая, помимо прочего, инициализацию состояния агента, карты, конфигурации системы и т. д., а затем вызов ReverieServer из open_server
Метод, запуск основного цикла
Весь процесс показан на рисунке:
Модуль работает под управлением командной строки пользователя.,Весь цикл не будет моделироваться сразу,Вместо этого время работы (время игры) определяется на основе количества шагов, введенных пользователем. Здесь есть один очень дружелюбный момент:,Потому что после работы в обычном режиме весь модуль находится в состоянии черного ящика.,и в это нельзя вмешиваться,Но на самом деле, заглянув в исходный код, можно обнаружить, что различные типы debug Режим доступен для выбора пользователями, и можно увидеть промежуточное состояние и процесс вывода. Конкретные команды можно прочитать. reverie.py
документ
Самая важная часть основного цикла — вызов agent.move()
После функции, как сделать каждый Agent Для принятия соответствующих решений здесь необходимо ввести несколько основных классов (структур данных):
其实关键点就да为了便于позволятьAgentвоплощениеиз Понимание песочницымиризпространственная структура,Вся 2D-карта отображается в следующую древовидную структуру.,Каждый тайл (или каждая координата) на карте,будет содержать эту информацию
> мир World -> область Sector -> место Arenas -> вещь Game Objects
Помимо создания такой структуры данных, класс Maze,Также предусмотрены некоторые распространенные методы.,Например, получить определенную координатную точку из приведенной выше структурной информации, получить все координаты в определенном диапазоне видимости (например, в поле зрения персонажа). в определенную точку координат、Установить определенную точку координатизвещьстатус и т. д.,相当于提供了一个карта以及与карта交互изинтерфейс
MemoryTree 类даAgentдлямирпространственная структураизограниченная память(Они не обязательно понимают всюмиризструктура),его обслуживаниеиз空间记忆структураимирструктура类似,Это тоже древовидная структура
Вы можете видеть, что метод перемещения передает текущее состояние карты.、список объектов агента、и текущее местоположениеивремя,Решите агентизационное действие
В частности, метод и процесс можно разделить на:
perceive
метод(Восприятие),Этот метод используется для определения того, что происходит вокруг Агента.,и отсортировать их по диапазону появления,Возвращает список ConceptNode (описан выше).retrieve
метод,Получите воспринимаемые мысли пользователя на основе метода восприятия.,т.е. список ConceptNode в качестве входных данных,Вывод отсортированного набора связанных событий и идей.plan
метод(план),Этот метод имитирует мыслительный процесс человека.,Возьмите метод извлечения из вывода в качестве входных данных,в целом делится на несколько этапов: Если это новый день,Стройте долгосрочные планы ⇒ Если текущие действия прекратятся.,Определите следующее действие, которое необходимо выполнить ⇒ на основе текущего воспринимаемого события.,Решите, на чем сосредоточиться в данный момент ⇒ На событии, на котором вы сейчас сосредоточены.,решить, какое действие предпринять(Есть три действия:поговорить с кем-то、реагировать на события、Нетреагировать на события)reflect
метод,На китайский это следует перевести как «отражение».,Также обратитесь кЭта статьяконцепция отраженияизобъяснять;
С точки зрения непрофессионала,Вышеупомянутый мыслительный процесс представляет собой поверхностный уровень восприятия и реакции на события.,Но у людей есть методы мышления более высокого уровня, такие как подведение итогов, уточнение и исследование потенциальных намерений.,«Отражение» означает имитацию такого образа мышления.,Думая на более высоком уровне о недавних событиях,И сохраняйте результаты мышления как часть потока памяти.Далее мы в основном изучим,Как построить подсказку и взаимодействовать с GPT в проекте,Эта часть будет посвящена объяснению кода.
Из пути вызова кода видно, что основное использование интерфейсаиздокумента, связанного с GPT: converse.py
(Генерация диалога),plan.py
(плангенерировать),reflect.py
(Отражение),Код очень подробный,Ниже приведен типичный случай вызова для каждого документа:
plan.py
包含进行每日план、почасовой Создавайте шаблоны вопросов и ответов, такие как план, конкретные действия и т. д.,В качестве примера возьмем ежедневный план:
Это указанный формат запроса,в начале дня,Соответствующие параметры будут переданы, и GPT продолжит запись.,Здесь важнееизда Commonset
и Lifestyle
в Commonset
да一个верно角色из Свернуть набор описаний,Включите следующую частичную информацию
Lifestyle
является более кратким,Как правило, это описание характера и образа жизни, привычек.
на стадии планирования,В основном через предустановленные жизненные привычки агента и подсказку по созданию предыстории персонажа.,План дня продолжает GPT (примечание автора: степень свободы плана здесь на самом деле достаточно низкая),GPT了解Нет到除了设定中给到из Место/Кроме персонажейиз Другая информация)
converse.py
предоставлено вGPTгенерировать可能产生из Диалоги персонажейизинтерфейс,Он также включает в себя обобщение ключевых моментов диалога персонажей, обобщение взаимоотношений персонажей посредством диалога и т. д.,Ниже приведен пример генерации диалога персонажа из интерфейса.
здесь из <INPUT 2> обратитесь кизда在此之前да否有已经发生过издиалог,<INPUT 3>изContext则даобратитесь к该диалог发生из上Вниз文(время、Место、Персонажи и т. д.),实际决定这段диалогизтема обсужденияиз其实да <INPUT 6>и<INPUT 10>,Эти два параметра берутся из результатов другого вызова GPT.
reflect.py
изверноGPTизвызов过程同样可以参考Эта статья
Ссылаясь на описание процесса отражения в цитируемой статье, все шаги 2 и 4 содержат вызовы GPT.
общий,Вызовы GPTиз в проекте основаны на точных настройках и отформатированы в виде подсказки.,Требования к выходному формату также очень строгие.,И это не вся информация, которую нужно сообщить большой модели сразу.,Каждый раз, когда задается вопрос, он решает лишь относительно небольшую проблему: например, что делать в течение этого часа и какова будет тема следующего разговора.,Как собрать и организовать контекст, необходимый для больших моделей,На самом деле это все еще жесткий код,Это может быть не идеально
Этот проект демонстрирует создание AI-агента на примере.,有很多для现实миричеловеческий разумиз抽象да可以借鉴из,Конкретное место: