Проект Thousand Token Wood начинался как наблюдательная песочница: пять лесных существ торговали товарами на одной дообученной модели Qwen 0.5B, а исследователь смотрел, как возникают пузыри и обвалы. Вторая версия превратила симуляцию в игру с асимметрией информации, кредитованием, инсайдерской торговлей и механикой расследования. Но главное инженерное решение v2 — каждый агент теперь работает на модели от отдельной лаборатории.
В совете заседают четыре модели: gpt-oss-20b от OpenAI, MiniCPM3-4B от OpenBMB, Nemotron-Mini-4B от NVIDIA и дообученный Qwen 0.5B собственной разработки. Все они укладываются в лимит 32B параметров, установленный хакатоном, и обслуживаются через платформу Modal. Идея не в экзотике ради экзотики: модели, обученные на разных данных с разными подходами к постобучению, ведут себя по-разному. Сова накапливает запасы иначе, чем лиса спекулирует. Совет агентов превращается в живую дискуссию, а не в скрипт.
| Модель | Лаборатория | Параметры | Особенности запуска |
|---|---|---|---|
| gpt-oss-20b | OpenAI | 20B | Нативное квантование MXFP4, помещается на 24 ГБ GPU, оборачивает ответ в аналитическую преамбулу |
| MiniCPM3-4B | OpenBMB | 4B | Требует флага trust_remote_code |
| Nemotron-Mini-4B | NVIDIA | 4B | Загружается без дополнительных настроек |
| Qwen 0.5B (дообученный) | Собственная разработка | 0.5B | 0% самопокупок, 100% валидных предложений |
Первый практический урок оказался инфраструктурным. Все четыре модели при запуске через vLLM 0.22.1 падали с одинаковой ошибкой: «could not find nvcc». Проблема не была специфична для какой-то одной модели — vLLM этой версии JIT-компилирует CUDA-ядра при загрузке и требует наличия nvcc, которого нет в минималистичных базовых образах. Замена базового Docker-образа на CUDA devel разблокировала все четыре модели сразу. Дальнейшие различия оказались точечными: gpt-oss-20b работает в нативном квантовании MXFP4 и помещается на GPU с 24 ГБ памяти, но оборачивает ответ в аналитическую преамбулу, из которой нужно извлекать финальный канал. MiniCPM3 потребовал флага trust_remote_code, Nemotron загрузился без дополнительных настроек. Каждый «подводный камень» решался одной строкой конфига.
Все модели падали с одинаковой ошибкой «could not find nvcc» — проблема решилась заменой базового Docker-образа на CUDA devel.
Ключевым связующим слоем, который сделал гетерогенный совет управляемым, стал толерантный парсер JSON с автоисправлением. Разные токенизаторы и привычки форматирования у разных моделей дают разные виды «поломанного» JSON. Парсер отбрасывает то, что не удаётся восстановить, и симуляция никогда не падает. Добавление новой модели сводится к записи в конфиге, а не к рефакторингу.
Отдельную инженерную задачу поставила механика инсайдерской торговли. Игрок может шепнуть агенту подсказку — правдивую или ложную. Правдивая подсказка даёт реальное преимущество, но накапливает «тепло»: при превышении порога магистрат открывает расследование. Для работы этой механики истинность подсказки должна быть скрыта от агентов — они видят текст слуха, но не флаг. Это задача безопасности данных, а не UI. Решение: флаг хранится исключительно в реестре игрока, вырезается из публичной записи событий при её формировании, и нарратор суммирует только публичные события. Тест сканирует полный промпт каждого агента на каждом ходу на наличие запрещённых токенов. За всё время тестирования — ноль утечек.
Память агентов реализована через целочисленный сентимент: подписанное отношение к Патрону и друг к другу, которое сдвигается событиями. В промпт попадает только однострочная сводка вида «ты тепло относишься к Уне, с осторожностью — к Патрону», ограниченная несколькими сильнейшими чувствами. Сырая история в промпт не передаётся никогда. Поведенческое смещение частично эмерджентно (сводка влияет на генерацию), частично детерминировано (агент с высокой враждебностью механически отказывает в займе). Это делает поведение наблюдаемым и тестируемым.
Результаты одного сидированного прогона с полной механикой v2: дообученный Qwen 0.5B показал 0% самопокупок и 100% валидных предложений, превзойдя своего 3B-учителя по надёжности формата. Два последовательных подозрительных выигрыша пересекли порог магистрата. Маржин-колл и дефолт по займу изгнали одного из агентов, который вернулся в следующей главе. Исследователь формулирует общий вывод так: малая модель — надёжный генератор форматов и ненадёжный рассуждатель; разрыв закрывается структурой, промптингом и небольшим дообучением, а не масштабом. Весь код совета и трассировки опубликованы в открытом доступе.

