Автор протокола PJON выпустил TERMy, терминального ассистента без нейросетей

Пользователь HN с ником gioscarab, создатель сетевого протокола PJON (который недавно реализовали в кремнии в ETH Zurich по работе Пиуса Зибера), рассказал, как за два свободных месяца с начала июля построил терминального ассистента TERMy, вообще не использующего эмбеддинги, машинное обучение и большие языковые модели. Толчком стали рост цен на Copilot и желание не платить за то, что ассистент выполняет тривиальные команды вроде «активируй виртуальное окружение». Сначала автор пытался с нуля обучить собственную GPT-подобную модель на старом домашнем компьютере (16 ГБ ОЗУ, видеокарта NVIDIA GTX 1050 Ti с 4 ГБ видеопамяти, процессор Intel i7-4790K на 4,0 ГГц с 8 ядрами), начав с архитектуры вроде NanoGPT на 100, 200 млн параметров и пробуя также Mamba и flash attention. Результаты получались бессвязными и местами пугающими, модель выдавала обрывочный, «жуткий» текст, а полноценное обучение потребовало бы не меньше месяца непрерывной работы, что автор счёл невыполнимым для домашнего железа. Затем он попробовал локальные открытые модели через Ollama (в том числе ornith:9b, mistral:7b, cogito:14b) с промптом, заставляющим отвечать только терминальными командами, но счёл их слишком медленными и ненадёжными при 4 ГБ видеопамяти. В итоге gioscarab отказался от машинного обучения полностью и сделал систему на детерминированных правилах: формат данных NDF (NPC-Forge Dataset Format) описывает категории команд, примеры фраз, вызовы инструментов и уровень разрешения на выполнение («ask» или «yolo», с подтверждением или без) в виде JSON-объектов, которые можно просто добавлять в каталог датасетов, чтобы «обучить» ассистента новым командам. Для разбора запросов вроде «создать файл test.txt» он придумал шаблоны с тегами-синонимами (например, тег создания объединяет «create», «make», «generate», «craft», «forge») и регулярными выражениями для извлечения переменных вроде имени файла, в этой части ему помогал друг Кевин. Он реализовал классы FlintParser и FlintNPC, примерно на 1000 строк кода суммарно, в двух идентичных версиях: на Python для локальной ОС и на JavaScript для браузера и Node.js. Конвейер обработки запроса состоит из пяти шагов: очистка от «шума» (ругательства, вводные слова, благодарности), анализ тональности, точное совпадение, совпадение по шаблону и, как самый медленный резервный вариант, вероятностное сопоставление на основе IDF (обратной частоты документа) для редких слов, «мешка слов» для перестановок и взвешенного по IDF расстояния Левенштейна для опечаток. Готовую систему автор назвал TERMy и подключил к Copilot, чтобы она перехватывала часть запросов, которые раньше уходили к Claude, отвечая, по его словам, мгновенно. Более широкий фреймворк NPC-Forge, это сервер, CLI и инструментарий для управления такими NPC (non-player character, «неигровыми персонажами» в терминологии автора), достаточно компактный, чтобы работать на CPU любой Linux-машины, включая Raspberry Pi Zero. Автор предлагает сообществу использовать NPC-Forge для тривиальных задач, оставляя тяжёлые LLM «последним резервом», и прямо называет трату вычислений и электричества на простые операции расточительной и безответственной. Он также открыто признаёт, что проект, его первый на Python, код не готов к продакшену и цепочки команд, которые иногда генерирует TERMy, вызовут нарекания у опытных линуксоидов.
Ключевые факты
- Создатель протокола PJON (gioscarab) за два месяца построил терминального ассистента TERMy без эмбеддингов, машинного обучения и LLM, только правила и шаблоны
- Сначала он пытался обучить собственную GPT-подобную модель на 100, 200 млн параметров на домашнем ПК (16 ГБ ОЗУ, GTX 1050 Ti 4 ГБ, i7-4790K), но получил бессвязный текст и оценку в месяц непрерывного обучения
- Локальные модели через Ollama (ornith:9b, mistral:7b, cogito:14b) оказались слишком медленными при 4 ГБ видеопамяти
- Итоговый конвейер NPC-Forge разбирает команды за пять шагов, от очистки текста до вероятностного сопоставления с IDF, мешком слов и расстоянием Левенштейна, на базе формата данных NDF и классов FlintParser/FlintNPC (~1000 строк кода на Python и JavaScript)
- Проект подан как открытый и предназначен для тривиальных задач, чтобы не гонять их через тяжёлые LLM вроде тех, что стоят за Copilot
Почему это важно
История показывает обратную сторону повсеместных LLM: рост цен на такие сервисы, как Copilot, подталкивает разработчиков искать детерминированные, бесплатные в эксплуатации альтернативы для простых повторяющихся команд. Автор прямо формулирует тезис, который выходит за рамки одного проекта: тратить вычисления и электричество тяжёлой модели на тривиальную задачу, расточительно, и харнессам вроде Copilot стоит сначала пробовать лёгкий детерминированный слой и обращаться к LLM только как к последнему средству.
Кому это важно
Разработчикам, которые пользуются терминальными ассистентами и ИИ-харнессами и хотят снизить счёт за токены на рутинных командах; инженерам embedded- и edge-устройств с ограниченными ресурсами (в тексте упомянуты Raspberry Pi Zero и микроконтроллеры); всем, кто интересуется NLU без обучения моделей как альтернативой полноценным LLM.
Как это применить
NPC-Forge, открытый фреймворк, сервер и CLI. Новые команды добавляются как JSON-датасет в формате NDF (категория, примеры фраз, вызываемые инструменты, уровень разрешения), файл просто кладётся в каталог датасетов, и NPC «изучает» его. Разбор запроса идёт по пяти шагам: убрать шум, оценить тональность, попробовать точное совпадение, затем шаблон с тегами-синонимами и регулярками для переменных (например, имени файла), и в последнюю очередь, вероятностное сопоставление с учётом опечаток. Есть готовые классы FlintParser и FlintNPC на Python и JavaScript, а сам ассистент TERMy можно подключить к харнессу вроде Copilot, чтобы он перехватывал простые команды до обращения к тяжёлой модели.
Можно ли доверять
Это личный проект одного разработчика, и сам автор называет его своим первым проектом на Python и прямо пишет, что код не готов к продакшену, а генерируемые TERMy цепочки команд местами вызовут нарекания у опытных пользователей Linux. Численных замеров скорости или точности TERMy в сравнении с LLM в источнике нет, только качественная характеристика «мгновенно»; нет и данных о версии, дате релиза или лицензии проекта. При этом у автора есть релевантный опыт: его более ранний протокол PJON был реализован в кремнии в рамках исследования ETH Zurich, что говорит в пользу его инженерной состоятельности, но независимой проверки самого TERMy в материале нет.
Риски и подводные камни
Система построена на разрешениях («ask» уточняет действие, «yolo» выполняет сразу), что снижает, но не убирает риск: автор сам допускает возможность ошибок в реализации или в датасете, из-за которых ассистент выполнит не то, что нужно. Проект основан на правилах и шаблонах, а не на обучении, поэтому его возможности ограничены тем словарём команд, который явно прописан в датасетах, незнакомая формулировка может не распознаться. Это ранний, экспериментальный код одного автора без заявленной поддержки или дорожной карты дальнейшего развития.
«Продолжать тратить вычисления и электричество на тривиальные задачи, дорого и безответственно.»
— gioscarab, автор NPC-Forge и TERMy