Mentals AI - это инструмент, предназначенный для создания и операционных агентов, которые оснащены loops , memory и различными tools , в течение всего простых файлов markdown с расширением .gen. Подумайте о файле агента как о исполняемом файле. Вы полностью сосредотачиваетесь на логике агента, устраняя необходимость записать код лесов на Python или на любом другом языке. По сути, он переопределяет основополагающие рамки для будущих приложений ИИ?
Примечание
Игра в цепочке слов в самостоятельном контексте, контролируемой LLM: 
NLOP - операция естественного языка
Или более сложные варианты использования:
| Любые многоагентные взаимодействия | ? Agent Generator Agent Space Invaders | ? 2D -генератор платформеров |
|---|---|---|
![]() | ![]() | ![]() |
Или помочь с контентом:
Все вышеперечисленные примеры расположены в папке агентов.
Примечание
Поддержка LLAMA3 доступна для поставщиков с использованием совместимого API OpenAI.
Начните с обеспечения ключа API OpenAI посредством создания аккаунта OpenAI. Если у вас уже есть ключ API, пропустите этот шаг.
Предварительные условия
Перед созданием проекта убедитесь, что установлены следующие зависимости:
В зависимости от вашей операционной системы, вы можете установить их, используя следующие команды:
Linux
sudo apt-get update
sudo apt-get install libcurl4-openssl-dev libfmt-dev libpoppler-devmacOS
brew update
brew install curl fmt popplerОкна
Для Windows рекомендуется использовать VCPKG или аналогичный диспетчер пакетов:
vcpkg install curl fmt popplerУстановка PGVector
Примечание
В main ветви вы можете пропустить этот шаг
Клонировать репозиторий
git clone https://github.com/turing-machines/mentals-ai
cd mentals-aiКонфигурация
Поместите ключ API в файл config.toml :
[llm]
# OpenAI
api_key = " "
endpoint = " https://api.openai.com/v1 "
model = " gpt-4o "Построить проект
makeБегать
./build/mentals agents/loop.gen -dMentals AI отличается от других рамок тремя значимыми способами:
Agent Executor ? работает через рекурсивный цикл. LLM определяет следующие шаги: выбор инструкций (подсказок) и управление данными на основе предыдущих циклов. Этот рекурсивный процесс принятия решений является неотъемлемой частью нашей системы, изложенной в mentals_system.promptMarkdown , устраняя необходимость в традиционных языках программирования. Тем не менее, Python может быть интегрирован непосредственно в сценарий Markdown агента, если это необходимо.Tree of Thoughts , ReAct , Self-Discovery , Auto-CoT и другие. Можно также связать эти структуры вместе с более сложными последовательностями, даже создавая сеть различных структур рассуждений. Файл агента представляет собой текстовое описание инструкций агента с расширением .gen .
Инструкция является основным компонентом агента в Mentals. Агент может состоять из одной или нескольких инструкций, которые могут относиться друг к другу.

Инструкции могут быть написаны в свободной форме, но у них всегда есть имя, которое начинается с символа # . ## use: Директива используется для указания ссылки на другие инструкции. Несколько ссылок перечислены разделены запятыми.
Ниже приведен пример с двумя инструкциями root и meme_explain со ссылкой:
# root
## use: meme_explain
1. Create 3 memes about AGI;
2. Then do meme explain with meme per call;
3. Output memes and their explanations in a list.
# meme_explain
Explain the gist of the meme in 20 words in medieval style.
Return explanation.
В этом примере root инструкция вызывает инструкцию meme_explain . Ответ от meme_explain затем возвращается к инструкции, из которой он был вызван, а именно корень.
Инструкция может принимать input параметр, который автоматически генерируется на основе контекста при вызове инструкции. Чтобы более точно указать входные данные, вы можете использовать подсказку бесплатной формы при ## input: Директива, такая как объект JSON или null .
Использование документа для ввода:
# some_instruction
## input: design document only
Использование объекта JSON в качестве ввода:
# duckduckgo
## input: { search_query: search query, search_limit: search limit }
Write a Python script to search in DuckDuckGo.
Simulate request headers correctly e.g. user-agent as Mozilla and Linux.
Примечание
Вызовы инструкций реализуются независимо от функций или инструментов на OpenAI, что позволяет работать агентами с такими моделями, как Llama3. Реализация звонков инструкций является прозрачной и включена в файл mentals_system.prompt.
Инструмент - это своего рода инструкция. Mentals имеет набор собственных инструментов для обработки вывода сообщений, ввода пользователя, обработки файлов, интерпретатора Python, команд Bash и кратковременной памяти.
Спросите пример пользователя:
# root
## use: user_input
Ask user name.
Then output: `Welcome, user_name!`
Пример обработки файлов:
# root
## use: write_file, read_file
Write 'Hello world' to a file.
Then read and output file content.
Полный список собственных инструментов указан в файле native_tools.toml .
Каждая инструкция имеет свою собственную рабочую память - контекст. При выходе из инструкции и повторной ее въезда контекст сохраняется по умолчанию. Чтобы очистить контекст при выходе из инструкции, вы можете использовать ## keep_context: false Directive:
# meme_explain
## keep_context: false
Explain the gist of the meme in 20 words in medieval style.
Return explanation.
По умолчанию размер контекста инструкции не ограничен. Чтобы ограничить контекст, существует директива ## max_context: number , в котором указывается, что следует хранить только number самых последних сообщений. Старые сообщения будут вытеснены из контекста. Эта функция полезна, когда вы хотите сохранить самые последние данные в контексте, чтобы более старые данные не влияли на цепочку рассуждений.
# python_code_generation
## input: development tasks in a list
## use: write_file
## max_context: 5
Do all development tasks in a loop: task by task.
Save the Python code you implement in the main.py file.
Краткосрочная память позволяет хранить промежуточные результаты деятельности агента, которые затем можно использовать для дальнейших рассуждений. Содержимое этой памяти доступно во всех контекстах инструкций.
Инструмент memory используется для хранения данных. Когда данные хранятся, создается ключевое слово и описание контента. В приведенном ниже примере инструкция meme_recall осведомлена о мемом, потому что он ранее хранился в памяти.
# root
## use: memory, meme_recall
Come up with and memorize a meme.
Call meme recall.
# meme_recall
## input: nothing
What the meme was about?
Поток управления, который включает в себя условия, звонки и петли (такие как ReAct , Auto-CoT и т. Д.), Полностью выражен на естественном языке. Этот метод обеспечивает создание semantic conditions , которые направляют потоки данных. Например, вы можете попросить агента автономно сыграть игру в цепочку слов в цикле или установить неоднозначное условие выхода: exit the loop if you are satisfied with the result . Здесь языковая модель и ее контекст определяют, продолжать или остановиться. Все это достигается без необходимости определения логики потока в Python или других языках программирования.
## use: execute_bash_command, software_development, quality_assurance
...
You run in a loop of "Thought", "Action", "Observation".
At the end of the loop return with the final answer.
Use "Thought" to describe your thoughts about the task
you have been asked. Use "Action" to run one of the actions
available to you. Output action as: "Action: action name to call".
"Observation" will be the result of running those actions.
Your available actions:
- `execute_bash_command` for util purposes e.g. make directory, install packages, etc.;
- `software_development` for software development and bug fixing purposes;
- `quality_assurance` for QA testing purposes.
...
Идея TOT состоит в том, чтобы генерировать несколько идей для решения проблемы, а затем оценить их ценность. Ценные идеи сохраняются и разработаны, другие идеи отбрасываются.
Давайте возьмем пример 24 игры. 24 головоломка - это арифметическая головоломка, в которой цель состоит в том, чтобы найти способ манипулировать четырьмя целыми числами, чтобы конечный результат был 24. Во -первых, мы определяем инструкцию, которая создает и манипулирует структурой данных дерева. Модель знает, что такое дерево и может представлять его в любом формате, от простого текста до XML/JSON или любого пользовательского формата.
В этом примере мы будем использовать формат простого текста:
# tree
## input: e.g. "add to node `A` child nodes `B` and `C`", "remove node `D` with all branches", etc.
## use: memory
## keep_context: false
Build/update tree structure in formatted text.
Update the tree structure within the specified action;
Memorize final tree structure.
Далее нам нужно инициализировать дерево с начальными данными, давайте начнем с корневой инструкции:
# root
## use: tree
Input: 4 5 8 2
Generate 8 possible next steps.
Store all steps in the tree as nodes e.g.
Node value 1: "2 + 8 = 10 (left: 8 10 14)"
Node value 2: "8 / 2 = 4 (left: 4 8 14)"
etc.
Вызов корневой инструкции предложит 8 возможных следующих шагов для расчета первых 2 чисел и сохранить эти шаги в виде узлов деревьев. Дальнейшая работа агента приводит к созданию дерева, которое удобно для модели, чтобы понять и вывести окончательный ответ.
4 5 8 2
├── 4 + 5 = 9 (left: 9, 8, 2)
│ └── discard
├── 4 + 8 = 12 (left: 12, 5, 2)
│ └── discard
├── 4 + 2 = 6 (left: 6, 5, 8)
│ └── discard
├── 5 + 8 = 13 (left: 13, 4, 2)
│ └── discard
├── 5 + 2 = 7 (left: 7, 4, 8)
│ └── (7 - 4) * 8 = 24
├── 8 + 2 = 10 (left: 10, 4, 5)
│ └── discard
├── 4 * 5 = 20 (left: 20, 8, 2)
│ └── (20 - 8) * 2 = 24
└── 4 * 8 = 32 (left: 32, 5, 2)
└── discard
Based on the evaluations, we have found two successful paths to reach 24:
1. From the node "5 + 2 = 7 (left: 7, 4, 8)", we have the equation: (7 - 4) * 8 = 24.
2. From the node "4 * 5 = 20 (left: 20, 8, 2)", we have the equation: (20 - 8) * 2 = 24.
Thus, the final equations using all given numbers from the input are:
1. (5 + 2 - 4) * 8 = 24
2. (4 * 5 - 8) * 2 = 24
Полный пример содержится в Agents/Tree_structure.Gen
Концепция возникла в результате исследований по психоанализу исполнительных функций, исследуя центральную руководитель, Алан Баддели, 1996. Он описал систему, которая организует когнитивные процессы и рабочую память, способствуя поискам из долговременной памяти. LLM функционирует как System 1 , обработка запросов и выполнение инструкций без присущей мотивации или постановки целей. Итак, что же тогда является System 2 ? Рисовать из исторических пониманий, теперь пересмотрено через научную линзу:
Центральный руководитель или исполнительные функции имеют решающее значение для контролируемой обработки в рабочей памяти. Он управляет задачами, включая направление внимания, поддержание целей задач, принятие решений и поиск памяти.
Это вызывает интригующую возможность: построение более сложных агентов путем интеграции System 1 и System 2 . LLM, как System 1 , работает в тандеме с центральной исполнительной System 2 , которая регулирует и контролирует LLM. Это партнерство формирует двойные отношения основополагающими для ментальных искусственных средств.