Установка Research Agent

Не хотите читать всё это?

Просто скиньте в любой ИИ-чат (Claude, ChatGPT и т.д.) ссылку на https://pastukhov.com/agents/research/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.

← Вернуться на главную раздела Research Agent