Все мы тонем в документах. Отчеты в PDF, научные статьи, рабочая документация, сохраненные веб-страницы — информационный хаос стал нормой. Google попытался решить эту проблему с помощью NotebookLM, удобного инструмента для создания базы знаний из своих файлов. Штука неплохая, но, как и все продукты больших корпораций, живет в своей закрытой экосистеме. Хочешь кастомизации? Другой LLM-провайдер? Работа локально? Забудь.
Но свято место пусто не бывает. Недавно в open-source выкатили NotebookLlama — проект, который не просто копирует функционал гугловского собрата, а предлагает гораздо большую гибкость и мощь. Это инструмент, который можно развернуть у себя, доработать под свои нужды и полностью контролировать.
Давайте чисто технически разберемся, что это за зверь, как он устроен под капотом и как его поднять для личного пользования.
Если коротко, NotebookLlama — это ваш персональный аналитический центр для работы с документами. Вы "скармливаете" ему пачку файлов (PDF, MD, DOCX и т.д.), а он их обрабатывает и превращает в интерактивную базу знаний.
Вот ключевые возможности, которые он предоставляет:
Звучит солидно. Но как это все работает вместе?
На первый взгляд, это типичный современный AI-проект на Python, но дьявол, как всегда, в деталях.
Frontend: Вся пользовательская часть построена на Streamlit. Это популярный выбор для быстрого создания интерактивных веб-приложений для data science и AI, и здесь он отлично справляется со своей задачей.
Backend и "мозги": Ядром всей системы является связка из фреймворков от LlamaIndex. В частности, LlamaParse для "умного" парсинга документов (он умеет корректно извлекать текст, таблицы и даже изображения) и LlamaCloud для индексации и хранения данных.
[!INFO] Важный момент: хотя проект и open-source, для парсинга документов он по умолчанию использует облачный сервис LlamaCloud. Это компромисс между полным "суверенитетом" и качеством. LlamaParse работает на порядок лучше большинства локальных парсеров PDF, так что этот компромисс оправдан.
Оркестрация: Для управления задачами (обработать файл, сгенерировать mind map, ответить на вопрос) используется FastMCP (mcp
в коде). Это фреймворк для создания и вызова "инструментов" (tools) — по сути, оберток над функциями, которые может вызывать LLM.
Генерация контента: За генерацию текста, ответов и структурированных данных (вроде узлов для mind map) отвечает OpenAI. Для генерации аудио, как я уже упоминал, — ElevenLabs.
Визуализация: Майнд-карты строятся с помощью библиотеки Pyvis, которая в свою очередь использует vis.js
для рендеринга интерактивных графов в браузере.
Наблюдаемость (Observability): Для отслеживания работы всех компонентов используется OpenTelemetry, а для визуализации трейсов — Jaeger. Все это запускается в Docker, что очень удобно.
В сухом остатке мы имеем грамотно спроектированную систему, где каждая часть отвечает за свою задачу. Это не монолитный скрипт, а набор взаимодействующих сервисов, что и делает проект таким гибким.
Хватит теории, давайте к практике. Развернуть NotebookLlama у себя не так уж и сложно, если следовать инструкции.
Вам понадобится:
git
для клонирования репозитория.uv
— современный и очень быстрый менеджер пакетов для Python. Если еще не используете, крайне советую.Docker
и docker-compose
для запуска вспомогательных сервисов.Открываем терминал и поехали:
# Клонируем репозиторий
git clone https://github.com/run-llama/notebookllama
# Переходим в папку проекта
cd notebookllama/
# Устанавливаем все зависимости с помощью uv
uv sync
Это самый важный шаг. Вам нужно получить три ключа и прописать их в конфигурационном файле.
.env.example
:mv .env.example .env
.env
в вашем любимом редакторе.OPENAI_API_KEY
: Берется на платформе OpenAI. Нужен для работы LLM.LLAMACLOUD_API_KEY
: Получается в дашборде LlamaCloud. Нужен для парсинга и индексации документов.ELEVENLABS_API_KEY
: Находится в настройках ElevenLabs. Нужен для фичи с генерацией подкастов.Теперь нужно выполнить два скрипта, которые подготовят вашу облачную среду в LlamaCloud.
# Создает агента для извлечения структурированных данных
uv run python tools/create_llama_extract_agent.py
# Создает пайплайн для обработки и индексации документов
uv run python tools/create_llama_cloud_index.py
Эти скрипты выполняются один раз. Они настраивают все необходимое для работы с вашими файлами.
Теперь поднимем Jaeger и Postgres через Docker.
docker compose up -d
Эта команда в фоновом режиме запустит два контейнера, необходимых для сбора и хранения телеметрии.
Все готово к запуску. Нам нужно запустить два процесса в двух разных терминалах.
В первом терминале (запускаем backend-сервер):
uv run python src/notebookllama/server.py
Во втором терминале (запускаем Streamlit UI):
# Сначала активируем виртуальное окружение, созданное uv
source .venv/bin/activate
# (Для Windows команда будет .\.venv\Scripts\activate)
# Запускаем приложение
streamlit run src/notebookllama/Home.py
[!TIP] Если все прошло успешно, в терминале появится ссылка
http://localhost:8501
. Открывайте ее в браузере и начинайте загружать свои документы.
NotebookLlama не пытается изобрести велосипед, а грамотно комбинирует лучшие в своем классе инструменты (LlamaCloud, OpenAI, Streamlit) в одном гибком рении.
Плюсы:
Минусы:
В целом, NotebookLlama — это хороший инструмент для разработчиков, аналитиков, исследователей и всех, кто работает с большими объемами текстовой информации и хочет иметь собственный, полностью кастомизируемый инструмент. И альтернатива для тех, кто предпочитает строить, а не просто пользоваться готовым.