Коротко: Хотите «сбежать» из веба ChatGPT/Claude и установить целую AI-рабочую станцию на своей машине? Эта статья проведёт вас через Odysseus — локально-ориентированную, приватность-первую замену ChatGPT с самохостингом.
Обзор проекта
Odysseus — это самохостинговая AI-рабочая станция (Self-hosted AI Workspace) от пользователя GitHub pewdiepie-archdaemon, open source по лицензии MIT. Его идея в следующем: запускать у себя на компьютере UI-опыт уровня ChatGPT / Claude, но все данные, все диалоги и все вызовы инструментов остаются локально.
По сравнению с традиционными приложениями в духе ChatGPT, отличия здесь предельно ясные:
- Чат: подключайте любые локальные или удалённые модели (vLLM / llama.cpp / Ollama / OpenRouter / OpenAI / GitHub Copilot)
- Агент: по-настоящему «умеющий руками» агент, который работает с MCP / Web / файлами / Shell / Skills / памятью (на базе opencode)
- Cookbook: автоматически сканирует железо, рекомендует модели, которые реально запускаются, и одним кликом делает download + старт сервиса (на базе llmfit, с учётом VRAM)
- Deep Research: многошаговое исследование — сбор + чтение + синтез, с выводом в виде визуализированного отчёта (переработка Tongyi DeepResearch)
- Compare: слепое сравнение нескольких моделей и беспристрастный выбор реально удобной
- Documents: вы пишете текст, а AI помогает рядом — не наоборот
- Memory / Skills: долговременная память + система навыков — агент с каждым использованием всё лучше понимает вас (ChromaDB + fastembed ONNX)
- Email: IMAP/SMTP почтовый ящик — AI автоматически сортирует, делает сводки, готовит черновики ответов и отсекает спам
- Notes & Tasks / Calendar: заметки + задачи + календарь, синхронизация CalDAV с Radicale / Nextcloud / Apple / Fastmail
- Поддержка PWA: на телефоне ощущается почти как на десктопе, можно поставить на главный экран
Одной фразой: это не просто чат-окно — это целая ваша AI-среда, полностью на вашей машине, без облака.
Сложность / время / что вы получите
- Сложность: ⭐⭐⭐ (средний уровень, нужны базовые знания Docker / Python)
- Время: 30–45 минут (через Docker); 1 час (нативная установка + подключение локальной модели)
- Что вы получите:
- Запущенный набор функций полноценной самохостинговой AI-рабочей станции
- Понимание типичной архитектуры локально-ориентированных AI-приложений (FastAPI + ChromaDB + SearXNG + ntfy)
- Подключение всех API-вариантов Ollama / vLLM / OpenAI в один общий интерфейс
- Понимание возможностей «с длинным хвостом» в стиле Cookbook: автоподбор модели, GPU-проход, система памяти — и это действительно приятно
Для кого это
- Хотите перестать платить за ChatGPT Plus / Claude Pro и хранить AI-данные локально
- Хотите запускать open-source модели на NUC / workstation / сервере с видеопамятью 8G / 16G / 24G и при этом иметь единый интерфейс
- Full-stack / независимый разработчик: хочется объединить чат / почту / календарь / агентские задачи в одну панель
- Интересует «самохостинг» у эксплуатационщиков/engineers платформ: хотите увидеть инженерный шаблон для production-уровня FastAPI
- Уже платили за облачные LLM и ищете способы, которые не настолько больно бьют по кошельку
Если вам нужен только лёгкий чат-интерфейс, Odysseus может не подойти: функций много, старт чуть сложнее, чем у Open WebUI, зато взамен вы получаете целый набор — почта, память, Cookbook, агент.
Ключевые зависимости и среда
Минимальные требования:
| Пакет | Требование |
|---|---|
| Python | 3.11+ |
| Память | 2 GB (только Web UI) / 8 GB+ (для локальной модели) |
| Диск | 5 GB (система + зависимости) / 50 GB+ (если храните несколько GGUF-моделей) |
| Docker | 20.10+ (рекомендуется Docker Compose v2) |
| ОС | Linux / macOS / Windows (включая WSL2) |
Опционально / с усилением:
| Пакет | Зачем |
|---|---|
| Ollama | Самейший способ локально поднять модель (дружелюбно к Windows) |
| vLLM / llama.cpp | Высокопроизводительный локальный инференс (нужен NVIDIA/AMD GPU) |
| NVIDIA Container Toolkit | Запуск GPU в Docker |
| Git for Windows | Фоновая закачка/запуск Cookbook в Windows |
| Tailscale + mkcert | Безопасное HTTPS-экспонирование в локалке |
TIP
Не хотите возиться с GPU? Используйте Ollama + любой OpenAI-совместимый API — и всё заработает за 5 минут. GPU — это «бонус», а не обязательное условие.
Полное дерево структуры проекта
odysseus/
├── app.py # Входная точка FastAPI
├── setup.py # Инициализационный скрипт (создание admin / базы данных / директорий)
├── requirements.txt # Основные зависимости Python
├── requirements-optional.txt # Опциональные зависимости (PDF/Office/voice/STT)
├── docker-compose.yml # Дефолтная оркестрация (CPU)
├── docker-compose.gpu-nvidia.yml # Переопределение для NVIDIA GPU
├── docker-compose.gpu-amd.yml # Переопределение для AMD ROCm
├── Dockerfile
├── core/ # Слой инфраструктуры
│ ├── auth.py # Аутентификация / сессии
│ ├── database.py # Инициализация SQLAlchemy
│ ├── middleware.py
│ ├── constants.py
│ └── atomic_io.py
├── src/ # Бизнес-логика
│ ├── llm_core.py # Абстракция большой модели
│ ├── agent_loop.py # Цикл агента
│ ├── agent_tools.py # Инструменты агента
│ ├── chat_processor.py # Обработка чата
│ ├── cookbook_serve_lifecycle.py # Жизненный цикл сервиса Cookbook-моделей
│ ├── memory_vector.py # Долгосрочная память ChromaDB
│ ├── deep_research.py # Глубокое исследование
│ └── ...
├── routes/ # Роуты FastAPI (40+ модулей)
│ ├── chat_routes.py
│ ├── agent_routes.py
│ ├── cookbook_routes.py # Рекомендации/скачивание моделей
│ ├── memory_routes.py
│ ├── email_routes.py
│ ├── calendar_routes.py
│ └── ...
├── services/ # Фоновые сервисы
│ ├── docs/ # Обработка документов
│ ├── hwfit/ # Сканирование железа (Cookbook)
│ ├── memory/ # Сервис памяти
│ ├── research/ # Сервис исследований
│ ├── search/ # Поиск
│ ├── stt/ tts/ # Преобразование речи в текст / текста в речь
│ └── shell/ # Инструменты Shell
├── static/ # Фронтенд (index.html + JS/CSS)
├── docs/ # Сайт документации + скриншоты + demo
├── config/ # Конфигурация подсемиcервисов вроде SearXNG
├── companion/ # Десктоп-компаньон (macOS)
└── data/ # Данные пользователя (gitignored, генерируются во время работы)
├── app.db # SQLite
├── chroma/ # Векторная база
├── uploads/
├── personal_docs/
└── huggingface/ # Кэш моделей
Внутри вам нужно заботиться только о app.py / docker-compose.yml / .env, всё остальное сделает Docker.
Пошаговая инструкция
Шаг 1: Клонируйте репозиторий
git clone https://github.com/pewdiepie-archdaemon/odysseus.git
cd odysseus
WARNING
Ветка dev в репозитории — самая актуальная, но может быть нестабильной. Для продакшена рекомендуется переключиться на main: git checkout main. Дальше пройдём шаги через dev.
Шаг 2: Подготовьте .env (опционально, но рекомендовано)
cp .env.example .env
Минимально рабочий .env выглядит примерно так:
# === LLM точка подключения ===
LLM_HOST=localhost
# Хотите облачный API — доступ в контейнере через host.docker.internal на локальный Ollama
OLLAMA_BASE_URL=http://host.docker.internal:11434/v1
# === Порты и привязка ===
APP_BIND=127.0.0.1
APP_PORT=7000
# === Безопасность (важно!) ===
AUTH_ENABLED=true
LOCALHOST_BYPASS=false
SECURE_COOKIES=false # Включайте true только при reverse-proxy с HTTPS
ODYSSEUS_ADMIN_USER=admin
# ODYSSEUS_ADMIN_PASSWORD= # Не укажете — при первом старте сгенерируется случайный и будет выведен в лог
# === Поиск (SearXNG) ===
SEARXNG_INSTANCE=http://searxng:8080
TIP
Доступ к Ollama с другого хоста: при запуске Ollama обязательно слушайте 0.0.0.0, а не loopback:
OLLAMA_HOST=0.0.0.0:11434 ollama serve
Иначе контейнерный host.docker.internal:11434 будет отвергнут Ollama.
Шаг 3: Быстрый старт Docker (рекомендуемый путь)
docker compose up -d --build
Во время сборки будут подтянуты базовые образы и установлены зависимости Python; первый запуск займёт примерно 3–5 минут. Когда увидите, что все четыре контейнера odysseus / chromadb / searxng / ntfy — healthy / running, всё готово:
docker compose ps
Откройте http://localhost:7000 — первая страница это логин. Начальный пароль admin будет в логах терминала:
docker compose logs --tail=200 odysseus | grep -i "temporary\|admin\|password"
Вы должны увидеть что-то вроде:
[odysseus] Created admin user 'admin' with temporary password: aB3x-9pQz-2vRt
WARNING
Этот временный пароль выводится только один раз — при первом старте. Получили — сразу войдите, сразу перейдите в Settings → Account и поставьте свой пароль.
Шаг 4: Проверка, что сервисы действительно здоровы
# 1. Статус контейнеров
docker compose ps
# 2. Логи самого Odysseus (учтите: в первый запуск нужно подтянуть модель — будет задержка)
docker compose logs --tail=120 odysseus
# 3. Действительно ли поднялся ChromaDB (не HTTP-деградация)
docker compose logs odysseus | grep -E "ChromaDB|MemoryVectorStore|DEGRADED"
Если видите DEGRADED, с большой вероятностью chromadb-client конфликтует с chromadb — причины и диагностику смотрите дальше в разделе «Частые вопросы».
Шаг 5: Подключите вашу первую модель
Зайдите в Settings → Models / Providers и выберите путь в зависимости от вашей конфигурации:
Путь A: Ollama уже запущен (самый простой)
Base URL: http://host.docker.internal:11434/v1
API Key: (оставьте пустым)
Model: qwen2.5:7b (или любая другая модель, которая у вас есть локально)
Путь B: Хотите, чтобы Cookbook сам скачал + запустил
Войдите в Cookbook: он просканирует вашу видеопамять, предложит модели, которые реально запускаются, и даст оценку (fit score). Нажимаете «Download» — дальше всё пойдёт через huggingface-cli: модель будет скачана в ./data/huggingface/, затем она будет запущена напрямую через llama.cpp / vLLM.
Путь C: Подключиться к облачному API — вот что обсудим подробнее сегодня
Конфигурация Provider в Odysseus устроена как протоколо-ориентированная: то есть любой сервис, который корректно отвечает на эндпоинты v1/chat/completions или v1/messages, можно просто подставить, указав Base URL — это не только OpenAI/Anthropic официальные, но и собственные gateway’и, и сторонние прокси.
В моём развертывании, «ежедневные» агентские задачи вроде запуска кода/работы с длинными документами я делаю через облачный API по двум причинам:
- Локально на 24G GPU квантование 70B уже тяжело, а при включении агента многошаговые вызовы часто приводят к OOM
- Модели уровня Claude/GPT на сложное рассуждение всё ещё сильнее, чем Qwen2.5-Coder
Но проблема очевидна — официальный API слишком дорогой. Счёт от Claude Opus за неделю легко переваливает за сотню долларов, а играть «просто так» — это фактически работа на Anyscale.
Моё решение — подключить Defapi с эндпоинтом, совместимым с v1/messages:
# Odysseus Settings → Custom Anthropic Provider
Base URL: https://api.defapi.org
API Key: sk-xxxxx # берётся в бэкенде defapi.org
Model: anthropic/claude-sonnet-4.5 # или haiku-4.5 / opus-4.6
Примеры конфигурации: Defapi Claude Sonnet 4.5 (основной инструмент для программирования/длинных документов), Claude Haiku 4.5 (для повседневных агентских вызовов — дешевле).
По факту: при том же объёме диалогов/задач месячный счет по сравнению с подключением к официальному Anthropic снижается более чем наполовину. При этом возможности модели, вызовы инструментов агента, формат prompt’ов и т.п. вообще не меняются — потому что это прокси на уровне протокола; сама модель остаётся той же. Это идеально сочетается с «протокол-драйвен» дизайном Odysseus.
TIP
При использовании Defapi со стороны Odysseus нет правок кода. Вызовы инструментов в agent_tools.py и управление контекстом трогать не нужно: можно даже в Settings настроить «чатику» Sonnet, «Deep Research» — Opus, «агентским задачам» — Haiku, каждый со своим Provider и независимой тарификацией.
Путь D: Подключить GitHub Copilot / OpenRouter и т.п.
Они тоже совместимы с протоколом OpenAI. Base URL задаёте соответственно: https://api.githubcopilot.com / https://openrouter.ai/api/v1 — и всё.
Шаг 6: Первый чат + первая задача для агента
Вернитесь в главное окно, выберите модель и отправьте простой prompt, чтобы проверить связность:
В трёх предложениях представь себя, а затем дай список проверок производительности Linux, который можно использовать сегодня.
Если проходит — значит путь до LLM на вашей стороне открыт.
Дальше проверьте режим Agent: создайте новый диалог, переключитесь на «Agent» и введите:
Посчитай количество строк для всех .py файлов в текущем каталоге, а затем скажи, какой файл больше всего стоит подвергнуть рефакторингу.
Агент сам спланирует:
- Вызовет инструмент
shellи выполнитfind . -name "*.py" | xargs wc -l - Получит результат
- Сформирует рекомендации
Это и есть фундаментальное отличие локального Agent от ChatGPT из веба: он реально умеет «делать руками» — у него есть доступ к вашему коду, файлам и терминалу.
Шаг 7 (опционально): Включить GPU
Этот шаг нужен только тогда, когда вы планируете использовать vLLM / SGLang / llama.cpp CUDA — «тяжёлый» локальный инференс. Если используете только Ollama или облачный API, пропускайте.
NVIDIA:
# Быстрая диагностика
scripts/check-docker-gpu.sh
# Установить NVIDIA Container Toolkit (Ubuntu/Debian; нужен sudo)
scripts/check-docker-gpu.sh --install-nvidia-toolkit
# Включить overlay только после успешной проверки проброса GPU
scripts/check-docker-gpu.sh --enable-nvidia-overlay
# Проверка
docker compose exec odysseus nvidia-smi -L
Он добавляет в .env:
COMPOSE_FILE=docker-compose.yml:docker/gpu.nvidia.yml
AMD ROCm:
scripts/check-docker-amd-gpu.sh
# Запишите выведенный RENDER_GID в .env
COMPOSE_FILE=docker-compose.yml:docker/gpu.amd.yml
RENDER_GID=989
WARNING
Проброс GPU ≠ установка CUDA для llama.cpp.
nvidia-smiвнутри контейнера видит карту — это лишь подтверждает, что устройства проброшены. Но llama.cpp всё ещё нуждается вcudartи CUDA Toolkit runtime — это делается на шаге Cookbook → Dependencies: там нужно «поставить заново», и это не решается на уровне Docker. Сообщение видаUnable to find cudart libraryкак раз означает это.
Шаг 8 (опционально): Включить Playwright MCP (агент через браузер)
В Odysseus уже есть несколько MCP server’ов, но браузерный требует предварительно подтянуть npx:
npx -y @playwright/mcp@latest --version
Перезапустите контейнер Odysseus — и в Agent появится возможность использовать browser MCP (скриншоты, навигация, заполнение форм):
Откройте https://news.ycombinator.com, возьмите первые 10 заголовков и ссылок, и кратко изложите 5 ключевых тем.
Шаг 9 (опционально): Запуск нативно в Windows
git clone https://github.com/pewdiepie-archdaemon/odysseus.git
cd odysseus
powershell -ExecutionPolicy Bypass -File .\launch-windows.ps1
Скрипт автоматически создаст venv → установит зависимости → запустит setup → запустит uvicorn. Откройте http://localhost:7000.
TIP
В Windows локальный vLLM / SGLang не поддерживается. Чтобы запускать модели локально, установите Ollama for Windows, а затем в Settings заполните endpoint как http://localhost:11434/v1. А если хотите Claude/GPT, но без локального инференса — используйте любой облачный API, совместимый с OpenAI.
Шаг 10 (опционально): Дать доступ с телефона
При условии, что Tailscale уже подключён:
ODYSSEUS_HOST=0.0.0.0 docker compose up -d
# или указать в .env
APP_BIND=0.0.0.0
Но голый HTTP наружу в LAN / через Tailscale небезопасен, настоятельно рекомендуется добавить HTTPS через mkcert:
mkcert -install
mkcert -cert-file cert.pem -key-file key.pem 100.x.y.z # ваш Tailscale IP
python -m uvicorn app:app --host 0.0.0.0 --port 7000 \
--ssl-certfile=cert.pem --ssl-keyfile=key.pem
На телефоне открывайте https://<tailscale-ip>:7000, установите PWA на главный экран — ощущения почти как у нативного приложения.
Частые проблемы и диагностика
Q1: Порт 7000 занят (часто на macOS)
На macOS AirPlay по умолчанию занимает 7000. Два варианта:
# Вариант 1: поменять порт в .env
APP_PORT=7001
docker compose up -d
# Откройте в браузере http://localhost:7001
# Вариант 2: Apple меню → Настройки системы → Общие → AirPlay Receiver → выключить
Q2: ChromaDB поднялся, но в логах DEGRADED
Чаще всего одновременно установлен chromadb-client и chromadb, и тихо используется HTTP-only режим — векторные возможности «отваливаются». Исправление:
# В запущенном контейнере (или в локальном venv)
./venv/bin/pip uninstall chromadb-client -y
./venv/bin/pip install --force-reinstall chromadb
docker compose restart odysseus
Проверка после фикса:
docker compose logs odysseus | grep -E "ChromaDB|MemoryVectorStore"— должно быть успешная инициализация, безDEGRADED.
Q3: Cookbook не видит мой GPU — вижу только iGPU или CPU
По умолчанию Docker пробрасывает все GPU хоста, но если вы монтируете только iGPU или другие карты, почти всегда причина в том, что не установлен NVIDIA Container Toolkit / не настроен runtime: нет nvidia-ctk runtime configure --runtime=docker:
# Диагностика
scripts/check-docker-gpu.sh
# Смотрите вывод — он подскажет, какой шаг не сделан
# Установка + конфиг одним махом (Ubuntu/Debian)
scripts/check-docker-gpu.sh --install-nvidia-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
Q4: Проброс GPU успешен, но в логах llama.cpp пишут Unable to find cudart
С устройствами всё ок, не хватает CUDA runtime. Docker тут не поможет — идите в Cookbook → Dependencies и выполните CUDA-билд для llama-cpp-python заново:
Откройте Cookbook → Dependencies → найдите llama-cpp-python → Reinstall (CUDA build)
Он сам сделает pip install --no-cache-dir llama-cpp-python[cuda], займёт около 2–3 минут.
Q5: Outlook / Office 365 почтовый ящик не подключается
Модуль почты в Odysseus сейчас поддерживает только аутентификацию IMAP + логин/пароль. После 2024 года Microsoft практически везде отключила обычный парольный вход — нужен OAuth. Это пока известное ограничение.
Временное решение: использовать Gmail / Fastmail / собственный почтовый сервис или включить Microsoft App Password (для аккаунта с 2FA), чтобы имитировать вход по паролю.
Q6: Хочу доступ из интернета — как сделать безопасно?
Сразу APP_BIND=0.0.0.0 для публичного выхода = катастрофа. LOCALHOST_BYPASS обходит аутентификацию, а у Agent ещё есть shell-инструменты — такие инстансы быстро появляются в Shodan: за 24 часа сканеры находят кучу «голых» серверов.
Правильная схема:
[Internet] → Cloudflare Access / Tailscale / WireGuard
→ Caddy / Nginx / Traefik (завершение HTTPS)
→ http://127.0.0.1:7000 (Odysseus, оставляем привязку к localhost)
И в .env:
AUTH_ENABLED=true
LOCALHOST_BYPASS=false
SECURE_COOKIES=true
Q7: Как контролировать биллинг облачного API?
Давайте разберём конкретно проблему из пути C на шаге 5.
Когда пробуешь это «для себя», есть три подхода по убыванию стоимости:
- Подключить официальный API — самый полный по ощущениям вариант, но самый дорогой. Claude Opus + частые вызовы агента: превысить 100 долларов за неделю — обычное дело
- Подключить протоколо-совместимый транзит (я использую Defapi) — те же Claude / GPT / Gemini модели, но ежемесячный счёт ниже на порядок (точно «на сколько» я не считал; но логика простая: с недельных 100 долларов выходит уровень месячного порядка тех же 100 долларов). Главная выгода — полная совместимость на уровне протокола: со стороны Odysseus всё на месте — не нужно менять prompt / код агента
- Локальные квантованные модели — скачать в Cookbook GGUF
Q4_K_M: с 16G VRAM реально запускать 30B-класс, нулевая стоимость по API, но инференс медленнее облака, а качество на сложных задачах будет чуть хуже
Моя реальная связка: чат + Deep Research через Defapi Claude Sonnet 4.5, Agent — через Claude Haiku 4.5 для tool-calls (дешевле), а простые задачи вроде классификации/сводок — локальный Qwen2.5 в квантованном варианте. Три Provider считаются независимо; они не мешают друг другу. За месяц выходит сумма в «двузначных» рублях.
TIP
Ключевой трюк: не используйте один и тот же модельный «движок» для всего. Settings в Odysseus позволяет назначать разные Provider под разные сценарии — это полезная функция, которую многие упускают.
Дополнительное чтение / направления для углубления
- Экосистема MCP: встроенные MCP, которые Odysseus регистрирует автоматически, включают
playwright(браузер) /filesystem/shell. Можно написать свой MCP server, зарегистрировать вmcp_servers/— и агент сможет им пользоваться - Система Skills:
routes/skills_routes.pyуправляет переиспользуемыми «фрагментами навыков», похоже на Skills в OpenClaw — один раз написал, и он будет доступен в любых сессиях - Tailscale + mkcert HTTPS: в предыдущем разделе уже показан базовый процесс, дальше можно добавить автопродление и DNS-01 challenge
- Комбинация reverse-proxy: Caddy с HTTPS + Cloudflare proxy позволяет получить публичный доступ без лишней операторской работы
- Синхронизация CalDAV: поднимайте Radicale (лёгкий CalDAV сервис) — и календарь Odysseus будет двунаправленно синхронизироваться с системным календарём телефона
- AI-автоматическое разбиение писем: после подключения IMAP, со временем оно само классифицирует по «срочно / обычно / спам», черновики ответов будут подготовлены заранее — вам останется только нажать отправить
- Cookbook удалённые серверы: Cookbook → Settings → Servers: можно указать удалённую GPU-машину, запуск/скачивание моделей пойдёт по SSH — хост маленький, GPU далеко, и всё получается красиво
- Deep Research многошаговые отчёты: переработка Tongyi DeepResearch от Alibaba — берёт SearXNG для сбора из нескольких источников → резюмирование → синтез, отлично подходит для анализа конкурентов/отраслевых исследований
- Маршрутизация по Provider: в Odysseus назначайте разные Provider для чата/агента/исследований — локальный Ollama тянет 80% повседневного общения, а сложные вопросы отправляются в облако; и стоимость, и качество сбалансированы
GitHub-репозиторий: pewdiepie-archdaemon/odysseus, документация — в docs/, roadmap — в ROADMAP.md, чтобы участвовать в разработке смотрите CONTRIBUTING.md.