Это искусственный мозг, который:
- Учится в реальном времени – запоминает новые факты и не забывает старые (благодаря специальным алгоритмам).
- «Думает» с помощью графа – у него есть нейронная сеть в виде графа (узлы – это знания, связи – ассоциации). Когда вы задаёте вопрос, активация «растекается» по графу, и он выдаёт цепочку связанных мыслей.
- Имеет несколько видов памяти:
- рабочая (как кратковременная),
- эпизодическая (воспоминания о диалогах, хранятся в FAISS – быстрый поиск похожих фраз),
- семантическая (факты в виде троек «субъект–связь–объект»).
- Общается через LLM (большую языковую модель, например, LM Studio или OpenAI) – она не придумывает ответы сама, а только озвучивает те ассоциации, которые нашёл граф. Это делает ответы обоснованными, а не просто генерацией «с потолка».
- Автономно исследует – может сам задавать себе вопросы по выбранной теме, учиться на ответах и улучшать свою память даже без вашего участия.
- Не забывает прошлое – использует EWC (Elastic Weight Consolidation) – технику, которая защищает важные веса от перезаписи при изучении нового.
- Имеет веб‑интерфейс – чат, статистика, управление агентом, настройки.
| Было (v7) | Стало (v10) |
|---|---|
| Граф одноуровневый | Иерархический – есть уровни абстракций (как в коре головного мозга). |
| «Мышление» – просто пропуск через сеть | Spreading activation – волна активации по связям, которая и есть настоящий мыслительный процесс. |
| Обучение только на положительной паре | InfoNCE – сравнивает с негативными примерами, не даёт эмбеддингам «схлопнуться». |
| EWC не работал | Теперь работает – накапливает квадраты градиентов и штрафует за отклонение от важных весов. |
| Новые узлы не обучались | Автоматическое добавление в оптимизатор с переносом статистики Adam. |
| FAISS не умел удалять записи | Теперь удаляет корректно (используем IndexIDMap2). |
Для эмбеддингов всегда query: |
Разделение: для вопросов query:, для контента passage: – как требует модель e5. |
| Teacher парсил оценки с ошибками | Строгий JSON + fallback. |
| Агент повторял вопросы | Ведёт историю, не повторяется. |
| Сон – упрощённая консолидация | Перестраивает иерархию кластеризацией и фиксирует EWC‑якоря. |
| Планирование/рефлексия без истории | Передаётся полный системный промпт и история диалога. |
- Вы пишете вопрос.
- Мозг превращает его в вектор (эмбеддинг) и ищет похожие воспоминания в FAISS.
- Находит точку входа в графе (узел, наиболее подходящий под вопрос).
- Запускает spreading activation – от этого узла «искра» бежит по связям, активируя связанные узлы.
- Собирает все активированные узлы + факты из памяти.
- Передаёт это LLM, которая формулирует ответ, опираясь только на собранные ассоциации (она не домысливает).
- После ответа мозг оценивает, насколько он был хорош (Teacher), и дообучается – корректирует веса графа и память.
- Если включён режим любопытства, он дополнительно учится на своей ошибке (MSE между предсказанным и реальным эмбеддингом ответа).
.
├── app.py # FastAPI веб‑сервер – точка входа, все API‑эндпоинты
├── agent.py # BrainAgent – автономный исследователь (фоновый поток)
├── bulk_train.py # Скрипт для массовой загрузки пар из JSONL
├── brain/ # Основной пакет с логикой мозга
│ ├── __init__.py
│ ├── brain.py # CognitiveBrain – главный оркестратор (step, learn, sleep)
│ ├── config.py # Все конфигурационные параметры (размеры, коэффициенты)
│ ├── graph.py # Дифференцируемый граф + иерархия + spreading activation
│ ├── memory.py # Иерархическая память (FAISS, рабочая, семантическая)
│ ├── llm.py # Интерфейс к LLM (OpenAI / локальная)
│ ├── teacher.py # Оценка ответов через LLM (JSON)
│ ├── search.py # Веб‑поиск (DuckDuckGo) – опционально
│ └── utils.py # EmbeddingProvider, grow_parameter_in_optimizer, helpers
├── static/ # CSS и JS для веб‑интерфейса
├── templates/ # HTML‑шаблон (одностраничное приложение)
├── brain_model_v10/ # Папка для сохранения состояния (создаётся автоматически)
│ ├── graph.pth # Веса GNN
│ ├── edges.pkl # Синапсы (связи графа)
│ ├── meta.json # Метаданные (счётчики, настройки)
│ └── dialog_history.json # История диалогов для контекста
├── .env # Переменные окружения (URL, ключи)
├── requirements.txt # Зависимости Python
└── README.md # Полная документация (этот файл)
Весь код открыт в репозитории:
👉 https://github.com/Jasst/netlord
Вы можете клонировать его и запустить локально.