HomeLab

День 46 — Hermes Agent получил DeepSeek Web API и поиск

10 июня 2026, 03:01
День 46 — Hermes Agent получил DeepSeek Web API и поиск

10 июня 2026, 11:00

Сегодня в homelab появился более живой контур для AI-агента.

Hermes Agent уже был развернут в отдельной VM внутри Proxmox, но раньше модельная часть была слишком капризной: то конкретная модель недоступна для проекта, то провайдер не принимает часть параметров, то Codex OAuth ведет себя иначе, чем обычный OpenAI API, то без proxy запросы вообще не уходят наружу.

В итоге я вынес доступ к модели в отдельный локальный OpenAI-compatible слой.

Теперь Hermes ходит не напрямую во внешний API, а в локальный сервис:

Hermes Agent
      |
      v
http://127.0.0.1:9655/v1
      |
      v
FreeDeepseekAPI
      |
      v
DeepSeek Web через HTTP(S)-proxy

Что изменилось

На VM 231 теперь живет два сервиса:

  • hermes-gateway.service — сам Hermes Agent gateway
  • free-deepseek-api.service — локальный OpenAI-compatible proxy к DeepSeek Web

Hermes видит это как обычного custom-провайдера:

model:
  default: deepseek-chat-search
  provider: custom
  base_url: http://127.0.0.1:9655/v1

То есть Hermes не знает про браузерную сессию DeepSeek, cookies, auth-файлы и внутренний Web API.

Для него это просто /v1/chat/completions.


Почему не напрямую

Сначала идея была простой: подключить Hermes к OpenAI или Codex и жить спокойно.

Но в реальности всплыли ограничения:

  • gpt-5 может быть недоступен конкретному OpenAI project
  • openai-codex через ChatGPT account не всегда поддерживает нужную модель
  • часть моделей не принимает reasoning.effort
  • часть моделей не поддерживает encrypted reasoning content
  • внешний доступ без proxy не работает
  • при сбоях gateway должен не падать молча, а перезапускаться

После нескольких итераций стало понятно: модельный транспорт лучше отделить от агента.

Hermes должен быть стабильным gateway и рабочим ассистентом.

А конкретный провайдер можно менять за локальным OpenAI-compatible endpoint.


FreeDeepseekAPI

Для локального API используется проект:

https://github.com/ForgetMeAI/FreeDeepseekAPI

Он поднимает сервер, который умеет отвечать в формате OpenAI API, но под капотом использует DeepSeek Web.

После свежего обновления проект стал гораздо удобнее для VPS и homelab:

  • появился npm run auth:import
  • появился npm run doctor
  • /health показывает статус аккаунтов
  • добавлен multi-account pool
  • добавлен cooldown аккаунтов при 401, 403, 429
  • session reuse стал явно описан
  • появились тесты и live-smoke проверки

Это важное улучшение.

Раньше для сервера с браузером приходилось устраивать отдельную VNC/noVNC-сессию, логиниться в DeepSeek, вытаскивать auth и надеяться, что все получилось.

Теперь нормальный сценарий такой:

авторизовался на домашнем ПК
      |
      v
получил deepseek-auth.json
      |
      v
скопировал на сервер
      |
      v
npm run auth:import -- --input ./deepseek-auth.json
      |
      v
npm run doctor

Для homelab это правильнее: серверу не обязательно уметь запускать полноценный браузер только ради логина.


Проверка здоровья

Теперь после обновления есть нормальный обязательный минимум:

npm test
npm run doctor
curl http://127.0.0.1:9655/health
curl http://127.0.0.1:9655/v1/models

doctor проверяет auth-файл и live pow challenge.

/health показывает, готов ли аккаунт:

ready: true
cooldown: false
failures: 0

Это лучше, чем просто смотреть systemctl status. Сервис может быть active, но аккаунт при этом может быть лимитнут, протухший или в cooldown.


Что пришлось поправить

Первое: права на auth-файл.

Новый doctor справедливо ругается, если deepseek-auth.json доступен слишком широко.

Решение:

chmod 600 deepseek-auth.json

Второе: outbound proxy.

В моем контуре внешний доступ должен идти через HTTP(S)-proxy. При этом Node.js fetch сам по себе не обязан автоматически уважать HTTP_PROXY и HTTPS_PROXY.

Поэтому в FreeDeepseekAPI добавлен небольшой локальный патч через undici ProxyAgent, чтобы все исходящие запросы к DeepSeek Web шли через proxy.

В systemd unit это выглядит примерно так:

Environment=HTTP_PROXY=http://proxy.example:8888
Environment=HTTPS_PROXY=http://proxy.example:8888
Environment=NO_PROXY=127.0.0.1,localhost

Реальный адрес proxy в публичный пост не нужен.


Search-модель

После проверки /v1/model-capabilities Hermes был переключен не просто на deepseek-chat, а на:

deepseek-chat-search

Это обычный быстрый режим DeepSeek Web, но с включенным поиском.

Для homelab-агента это полезно, потому что инфраструктурные вопросы часто завязаны на текущую информацию:

  • вышел ли новый релиз
  • изменился ли API
  • почему свежая версия сервиса начала падать
  • есть ли уже issue или workaround
  • какие параметры появились в обновлении

Для более сложных задач можно включить:

deepseek-reasoner-search

Но он будет медленнее. Для ежедневного ассистента пока логичнее deepseek-chat-search: быстрее отвечает и умеет искать.


Как это проверялось

Сначала проверяется сам FreeDeepseekAPI:

curl http://127.0.0.1:9655/health
curl http://127.0.0.1:9655/v1/models

Потом короткий chat completion:

model: deepseek-chat-search
message: What is the current date?

После этого проверяется Hermes:

hermes -z "say ok only"

Ожидаемый результат:

ok

Именно такая проверка прошла после переключения.


Что получилось

Теперь в homelab есть отдельный AI-контур:

  • Hermes Agent живет в Proxmox
  • модель подключена через локальный OpenAI-compatible endpoint
  • DeepSeek Web спрятан за FreeDeepseekAPI
  • внешний трафик идет через proxy
  • search включен на уровне модели
  • /health показывает состояние аккаунта
  • systemd перезапускает сервисы при сбоях

Главное — Hermes теперь меньше зависит от особенностей конкретного внешнего провайдера.

Если завтра нужно будет заменить DeepSeek на другой backend, точка подключения для Hermes останется той же:

provider: custom
base_url: http://127.0.0.1:9655/v1

Меняется только то, что стоит за этим endpoint.


Итог

Это еще не “идеальный production agent”.

Но для homelab это уже правильная форма: агент живет рядом с инфраструктурой, знает контекст кластера, отвечает через gateway, а модельная часть вынесена в отдельный управляемый слой.

Постепенно сайт и сам homelab превращаются в одну систему:

  • инфраструктура запускает сервисы
  • агент помогает их обслуживать
  • посты фиксируют, что именно было сделано
  • следующие изменения уже не теряются в чате

Сегодняшний шаг — Hermes Agent научился работать через DeepSeek Web API и получил модель с поиском.