Не хотите читать всё это?
Просто скиньте в любой ИИ-чат (Claude, ChatGPT и т.д.) ссылку на https://pastukhov.com/research-agent/install.md или на https://pastukhov.com/llms.txt и попросите сгенерировать конфигурационные файлы и команды. Он прочитает документацию, задаст несколько вопросов о вашей настройке и выдаст готовую конфигурацию. Экономьте время — пусть модель читает за вас.
Вы также можете связаться со мной через Telegram — я всегда рад помочь. И это не просто вежливость — мне действительно нравится общаться с единомышленниками, особенно если вы так же увлечены программированием, как и я.
Research Agent — self-hosted веб-приложение для глубоких онлайн-исследований, планирования и документирования. Разворачивается одним Docker-контейнером, все данные хранятся в постоянном volume /data. Интеграция с Pastukhov Agent опциональна и включается двумя переменными окружения.
Минимальные требования
Достаточно любого Linux-хоста с Docker. База SQLite встроена — PostgreSQL подключается опционально через переменную окружения.
Для полной функциональности понадобятся (настраиваются в интерфейсе после запуска, не в переменных окружения):
- API-ключ хотя бы одного поискового провайдера — Serper, Keenable, Brave или Tavily (или собственный SearXNG);
- API-ключ LLM-провайдера для извлечения данных — любой OpenAI-совместимый сервис.
Docker Compose
Создайте файл compose.yml и запустите docker compose up -d:
services:
research-agent:
image: maxpastukhov/research-agent:latest
container_name: research-agent
ports:
- "3978:80"
volumes:
- research-agent-data:/data
environment:
- ASPNETCORE_ENVIRONMENT=Production
- ASPNETCORE_URLS=http://+:80
restart: unless-stopped
volumes:
research-agent-data:
После запуска интерфейс будет доступен на порту 3978: http://localhost:3978.
Переменные окружения
Все переменные опциональны — приложение запускается и работает без единой из них:
- RESEARCH_AGENT_DB — путь к SQLite-файлу (по умолчанию
/data/data.db) или строка подключения PostgreSQL видаHost=...;Port=...;Database=.... - RESEARCH_AGENT_API_KEY — включает agent API (
/api/agent/*) для вызовов из внешних агентов: они передают ключ в заголовкеX-API-Key. Без переменной API возвращает 503. Это отдельный механизм — не связан с JWT-аутентификацией веб-интерфейса. - RESEARCH_AGENT_FETCH_FOLDER — папка для скачанного Markdown (по умолчанию
/data/fetch). Файлы раскладываются по датам:{folder}/yyyy-MM-dd/{domain}_{slug}_{hash8}.md. - AGENT_API_URL и AGENT_API_KEY — включают интеграцию с Pastukhov Agent: кнопки «Вызвать агента» и Edit with AI на страницах исследований. Задаются вместе, иначе функции скрыты. Исходящий запрос идёт в
{AGENT_API_URL}/api/remote/chats. - AGENT_ERROR_REPORTING — отправка ошибок в Sentry. Установите
0для отключения. - ASPNETCORE_URLS — порт внутри контейнера (по умолчанию
http://+:80).
Хранение данных
Все постоянные данные живут в volume /data и переживают пересоздание контейнера. Volume обязателен — без него вы потеряете базу, скачанные исследования и ключи при первом же docker compose down.
/data/data.db— база SQLite (если не используется PostgreSQL);/data/auth/— ключи ASP.NET Data Protection;/data/keys/— ключ подписи JWT;/data/fetch/— скачанный Markdown, разложенный по датам.
Первый вход
Логин и пароль не задаются переменными окружения. Первый пользователь регистрируется прямо в веб-форме на странице входа: логин, пароль (от 4 символов), имя и email. Пароль хранится в виде SHA-256-хеша, сессия работает через JWT-токены.
Настройка после запуска
Поисковые провайдеры и модели настраиваются в разделе Services веб-интерфейса — не через переменные окружения. Там задаются API-ключи Serper, Keenable, Brave и Tavily, base URL собственного SearXNG, прокси и адрес remote-browser для скачивания, а также LLM-сервисы для извлечения данных. Каждый сервис можно протестировать прямо из интерфейса. Подробнее — в разделе Сервисы и модели.
Связь с Pastukhov Agent
Чтобы управлять агентом из интерфейса исследований, задайте переменные AGENT_API_URL и AGENT_API_KEY — появятся чаты агента с real-time обновлениями и кнопка «Вызвать агента» в документах. Подробнее — в разделе Интеграция с Pastukhov Agent.
Docker CLI с файлом .env
Можно запустить Research Agent и без compose — командой docker run, сохранив переменные окружения в файле .env:
# .env
ASPNETCORE_ENVIRONMENT=Production
ASPNETCORE_URLS=http://+:80
# опционально: PostgreSQL вместо встроенного SQLite
# RESEARCH_AGENT_DB=Host=postgres;Port=5432;User Id=research;Password=secret;Database=research;
# опционально: интеграция с Pastukhov Agent
# AGENT_API_URL=
# AGENT_API_KEY=
docker run -d \
--name research-agent \
--env-file .env \
-p 3978:80 \
-v research-agent-data:/data \
--restart unless-stopped \
maxpastukhov/research-agent:latest
Флаг --env-file считывает все переменные из файла. Отдельные значения можно переопределить дополнительными флагами -e после него, например -e RESEARCH_AGENT_API_KEY=your-key.