Чистый Python-компилятор для локальной вики: замена LLM-агентов без токенов
Сцена: небольшая команда разработчиков хранит свои заметки в наборе разрозненных markdown‑файлов. Чтобы быстро находить нужную информацию, они пробовали «LLM‑вики» — скрипт, который каждый раз вызывает большой языковой модель, генерирует ссылки и переписывает страницы. Через несколько дней выяснилось, что каждый запрос стоит токены, а результаты меняются от запуска к запуску.
Источник: towardsdatascience.com
Факт: автор проекта заменил весь агентный пайплайн на чистый Python‑скрипт, который за один запуск превращает папку с исходными файлами в связную, проверенную вики без единого обращения к внешним сервисам.
Последствия: команда экономит деньги на токенах, получает одинаковый результат каждый раз и может запускать процесс на любой машине без установки сторонних библиотек.
Что проверить: стоит ли сейчас попробовать такой детерминированный компилятор вместо текущего LLM‑решения? Какие ограничения есть у инструмента и как быстро его протестировать в своей инфраструктуре?
Что репозиторий действительно даёт команде
- Полный код без зависимостей. Всё работает на стандартной библиотеке Python — не требуется
pip install. - Детерминированный результат. При одинаковом наборе входных файлов получаем точно такой же набор готовых markdown‑страниц, что упрощает контроль качества и откат изменений.
- Четыре простых шага.
- Поиск шаблонов (регулярные выражения) извлекает из каждого файла название, алиасы и дату.
- Построение карты ссылок (граф упоминаний) определяет, где в тексте упоминаются другие заметки.
- Создание разделов (перезапись) генерирует машинные части страниц, оставляя вручную написанные фрагменты нетронутыми.
- Проверка целостности (линтер) ищет битые
[[ссылки]]и страницы без входящих ссылок. - Тестовый набор из 17 юнит‑тестов гарантирует, что каждый из четырёх шагов работает корректно.
- Бенчмарки показывают, что даже при 5 000 файлов процесс укладывается в несколько секунд на обычном ноутбуке.
Эти свойства позволяют использовать компилятор как надёжный «строительный блок» в любой локальной системе знаний.
Где он может вписаться в рабочий AI‑процесс
- Замена LLM‑агента. Вместо многократных запросов к модели, компилятор выполняет один предсказуемый проход, после чего можно подключить уже готовый набор страниц к другим инструментам (поиск, чат‑боты, аналитика).
- Интеграция в CI/CD. Поскольку скрипт не требует внешних сервисов, его легко добавить в пайплайн сборки: при каждом коммите в папку
notes/автоматически генерируется актуальная вики. - Локальная первая RAG‑архитектура. Если требуется быстрый доступ к контексту без обращения к облаку, сгенерированные markdown‑страницы могут стать «документами» для собственного векторного индекса, но без необходимости встраивать LLM‑генерацию.
- Гибкость настройки. Пользователь может отключить проверку линтера (
--no-lint) или изменить правила поиска, не меняя остальной код.
Таким образом, компилятор служит «детерминированным ядром», вокруг которого можно построить любые дополнительные AI‑слои, если они действительно нужны.
Как протестировать без превращения в игрушку
- Склонировать репозиторий
bash git clone https://github.com/Emmimal/wiki-compiler.git cd wiki-compiler python init.py # ничего не устанавливает, просто проверяет окружение - Подготовить небольшую папку
raw_notes/с несколькими.txt‑файлами, где в начале указаныTitle:,Aliases:иDate:(как описано в README). - Запустить компиляцию
bash python compiler.py raw_notes/ compiled_wiki/Вы увидите количество сгенерированных страниц, количество битых ссылок и количество «осиротевших» страниц. - Запустить тесты
bash python -m unittest tests -vВсе 17 тестов должны пройти без ошибок — это подтверждает, что каждый шаг работает как задумано. - Провести быстрый бенчмарк (опционально)
bash python benchmark.py --files 100 --files 1000 --files 5000Сравните время выполнения на вашей машине с результатами автора (секунды ≈ 0.5 – 2 с).
Чек‑лист для первой недели
| ✅ | Что проверить |
|---|---|
| 1 | Репозиторий успешно склонирован и python init.py отработал без ошибок. |
| 2 | В папке raw_notes/ есть минимум три файла с корректным заголовком, алиасами и датой. |
| 3 | После compiler.py получены одинаковые результаты при повторных запусках (детерминированность). |
| 4 | Тестовый набор tests прошёл полностью (17/17). |
| 5 | Бенчмарк показывает время выполнения в пределах 1‑2 секунд для 100 файлов. |
| 6 | Нет битых ссылок и «осиротевших» страниц в отчёте линтера. |
Если хотя бы один пункт не выполнен, стоит проверить формат исходных файлов или обратить внимание на известные баги, описанные в статье (проблемы масштабирования графа и недоучёт одиночных страниц).
Какие риски проверять перед внедрением
- Требуемый формат входных файлов. Скрипт ожидает
.txt‑файлы с метаданными (Title:,Aliases:,Date:). Любой отклонение приводит к пропуску информации. - Ограничения масштабирования. Автор отметил, что построение графа ссылок плохо масштабируется при очень больших коллекциях (десятки тысяч файлов). Для таких объёмов может потребоваться оптимизация или альтернативный подход.
- Отсутствие лицензии. В репозитории лишь файл
LICENSEбез указаний, что может вызвать юридические вопросы при коммерческом использовании. - Отсутствие поддержки LLM‑функций. Если ваша команда всё ещё нуждается в генеративных подсказках (например, автодополнение текста), компилятор их не предоставляет.
- Скрытые зависимости в окружении. Хотя код использует только стандартную библиотеку, он требует Python ≥ 3.8; старые версии могут не работать.
Оценив эти пункты, можно решить, подходит ли инструмент для вашего проекта или нужен более гибкий гибридный подход.
Какое решение принять дальше
- Пилотный запуск — выберите одну небольшую подсистему (например, документацию продукта) и примените компилятор к её заметкам.
- Сравните затраты. Подсчитайте, сколько токенов стоило бы использовать прежний LLM‑агент, и сравните с нулевыми расходами на текущий скрипт.
- Оцените качество. Проверьте, насколько полученная вики удовлетворяет требованиям команды (полнота ссылок, отсутствие битых ссылок).
- Примите решение. Если пилот показал экономию и стабильность, разверните компилятор на всю базу знаний; иначе, оставьте LLM‑агент только для тех задач, где нужна генерация текста.
Таким образом, вы получаете конкретный план действий, который можно выполнить уже на этой неделе.
Источники
- LLM Wikis Are Over‑Engineered — I Replaced Mine With a Pure Python Compiler (Towards Data Science)
- GitHub — Emmimal/wiki-compiler
- GitHub — Emmimal/wiki-compiler.git (клонирование)
Что почитать дальше
- LLM Wiki: как построить личную базу знаний с Obsidian и Codex вместо RAG
- AI-фотографии 2026: как работает генерация изображений, где применять и какие ограничения
- Silver Text Gate: требования к статье и как пройти проверку качества
- DeepEval 4.0 для AI-агентов: автоматическая оценка кода вместо ручных тестов
- Eval Driven Development для LLM-агентов: проверка качества до разработки