11 марта 2026 г.
В поисках замены LLM-чату

В поисках замены LLM-чату
Я давно пользуюсь Perplexity, и всё это время он меня бесит.
Если нужно сохранить весь разговор, приходится копировать ответы по одному (а скопировать часть ответа с разметкой вообще невозможно), поиск по истории разговоров, мягко скажем, так себе (даром что Перплексити — нейропоисковик), группировка в проекты ситуацию не спасает.
Вот бы всё автоматически превращалось в локальные markdown-файлы, накапливалось в базе знаний с нормальной таксономией на тегах и чтобы с накопленной базой можно было общаться!
А еще вечность назад Серега @veged подкинул идею — интерфейс для общения с LLM должен быть в виде дерева вместо линейного диалога, чтобы можно было исследовать большую тему с разных сторон и не повторять нейронке все вводные, но при этом и не перегружать контекст нерелевантными вопросами. Да и самому в этом потом как-то ориентироваться.
Вам тоже уже захотелось срочно такое навайбкодить?
Этот пост — для самураев, я расскажу про Путь. Про результат — во второй части.
Путь
Первая мысль была использовать какой-нибудь mindmap в качестве UI. Но от этой идеи я отказался еще на этапе выбора библиотеки — работать в таком формате с большими текстами неудобно.
Далее подход к снаряду сделали стажеры на AI-хакатоне в Яндексе. Ребята целый день вайбкодили все с нуля, к демо даже получили рабочий прототип, но он был скорее иллюстрацией идеи, чем готовым продуктом.
Второй подход я уже делал сам. Для UI сразу взял react-flow, в качестве хранилища использовал файловую систему — каждый узел представлен 2 файлами: markdown для контента и json для метаданных (здесь в том числе хранятся связи, а сами файлы лежат плоско в папке проекта).
Двойной клик по холсту порождает узел, в него можно написать произвольный текст и либо сохранить как есть, либо использовать в качестве промпта для LLM. От любого узла можно создавать дочерние, удалять и создавать связи (но запрещены циклические зависимости), а также есть параллельная таксономия на тегах, которая отображается в виде пунктирных связей между узлами.
А еще я придумал, что зум может не только менять размеры, но и вызывать суммаризацию нужной степени: на максимальном отдалении мы видим заголовки из двух-трех слов, а по мере приближения получаем все более подробный текст, пока не поместится исходный.
Часа за три разговоров с Claude эта схема заработала, но с кучей ограничений и шероховатостей. В частности была захардкожена пара конкретных LLM-провайдеров, доступ к API которых у меня был оплачен (разумеется, даже у этой пары был разный контракт).
В третий раз я вернулся к идее, когда познакомился с @mariozechner/pi-ai — пакетом, который предоставляет абстракцию над парой десятков провайдеров, сотней моделей и их режимов.
Теперь меня почти устраивала бэкендная часть, но потыкав немного в интерфейс, я понял, что идея с нодами хотя и кажется подходящей для дерева, на практике дико неудобная.
Так что проект снова на какое-то время встал на паузу.
Продолжение в следующем посте.