Статус сохранения изменился на «успешно», но модель не появилась в списке, а первая рабочая сессия всё равно обращается к старому endpoint.
Быстрое решение: для официального DeepSeek API сначала выбирайте встроенный маршрут; собственный Provider добавляйте только для корпоративного модельного шлюза, self-hosted сервиса или модели вне каталога. Перед рабочим запуском зафиксируйте Provider ID, затем проверьте отдельной сессией обнаружение модели, минимальный текстовый запрос, инструментальный вызов и обратный маршрут.
Эта статья предназначена для трёх групп:
- инженеров платформ, которым нужно направить DeepSeek Harness через внутренний модельный шлюз;
- команд, обслуживающих self-hosted модели и проверяющих OpenAI-совместимый API;
- разработчиков AI Agent, которым требуется добавить маршрут, не разрушив уже существующие сессии.
Последовательность ниже построена по времени внедрения: сначала определяется необходимость пользовательского Provider, затем фиксируются параметры, проверяется цепочка обнаружения, выполняется безопасный первый запрос и только после этого меняются рабочие значения по умолчанию.
Последнее обновление: 18 августа 2026 года. Данные сверены с официальным репозиторием DeepSeek Harness, официальным руководством по интеграции и текущей документацией DeepSeek API. Проект находится в developer preview, поэтому названия полей и поведение интерфейса могут измениться без обратной совместимости.
00Сначала выберите правильный маршрут
Встроенный маршрут подходит в тех случаях, когда задача ограничивается прямым подключением официального API DeepSeek. Официальная документация указывает совместимый формат API, базовый адрес, способ авторизации и доступные идентификаторы моделей; для такого сценария создание дополнительного Provider не даёт полезной изоляции, но добавляет ещё одну точку для ошибки. В текущей документации в качестве базового адреса OpenAI-совместимого API указан https://api.deepseek.com, а среди примеров моделей — deepseek-v4-flash и deepseek-v4-pro. Официальная инструкция по первому API-запросу описывает эти параметры и пример вызова.
Пользовательский Provider оправдан, если выполняется хотя бы одно условие:
- запросы должны проходить через внутренний модельный шлюз с журналированием, квотами или маршрутизацией;
- модель обслуживается внутри компании или в отдельном self-hosted inference-сервисе;
- endpoint не входит во встроенный каталог DeepSeek Harness;
- одна и та же модель должна вызываться через разные окружения — например, тестовое и производственное;
- компании требуется заменить ключ, адрес или модель независимо от встроенного маршрута.
Важно не смешивать четыре разных сценария:
| Сценарий | Что выбрать | Что обязательно проверить | Когда откатываться |
|---|---|---|---|
| Прямой официальный API DeepSeek | Встроенный Provider | Ключ, доступность модели и минимальный запрос | Если официальный endpoint недоступен, временно использовать заранее проверенный маршрут |
| Внутренний модельный шлюз | Пользовательский Provider | Адрес шлюза, протокол, заголовки, каталог и фактический ID модели | При ошибке авторизации или несовместимом ответе вернуть прежний Provider |
| Self-hosted сервис | Пользовательский Provider | Сетевой доступ, TLS, авторизация, /models или иной каталог |
При неполном API отключить автоматическое обнаружение и следовать текущей документации Harness |
| Модель вне каталога | Пользовательский Provider | Регистр модели и поддерживаемые возможности | Если модель отвечает только на текст, не включать инструменты как рабочий режим |
Официальный репозиторий прямо помечает DeepSeek Harness как developer preview и предупреждает о возможных ломающих изменениях. Поэтому встроенный маршрут предпочтительнее не только из-за простоты: он уменьшает количество параметров, которые придётся заново проверять после обновления. Статус проекта и способ запуска следует сверять перед каждым обновлением рабочего окружения.
Что может пойти не так ещё до первого запроса
У пользовательской схемы есть несколько скрытых расходов:
- Проблема идентичности. Provider ID становится ссылкой, по которой Harness может находить запросы, настройки сессии и секреты. Позднее переименование может выглядеть как создание нового маршрута, а не как изменение старого.
- Разрыв между базовым адресом и маршрутом API. Base URL может указывать на корень шлюза, тогда как клиент ожидает конкретный путь для чата или каталога. Успешное открытие корня в браузере не доказывает, что API-путь собран правильно.
- Неполная совместимость. Сервис может принимать текстовый запрос, но не поддерживать tools, streaming, reasoning-поля или требуемый формат истории сообщений.
- Разные права доступа. Ключ, разрешающий чат-запрос, не обязательно имеет право получать каталог моделей.
- Сохранение старого состояния. Новая настройка по умолчанию не переписывает уже отправленную историю сессии, поэтому исправный новый Provider может казаться нерабочим.
01Первый этап: зафиксируйте Provider ID и протокол
Перед заполнением формы или файла конфигурации следует записать короткий реестр маршрута:
- стабильный Provider ID;
- назначение маршрута — тестовый, внутренний или производственный;
- владелец endpoint;
- базовый адрес;
- API-протокол;
- ссылка на секрет или имя переменной окружения;
- точный идентификатор модели;
- дата последней проверки;
- рабочий маршрут для отката.
Provider ID лучше выбирать по назначению, а не по текущему названию модели. Например, смысловой идентификатор «gateway-test» легче сохранить при замене модели внутри шлюза, чем имя, содержащее конкретную версию. При этом нельзя использовать один ID для двух разных endpoint: иначе логи и старые сессии перестанут однозначно объяснять, куда ушёл запрос.
Сначала фиксируется протокол, затем Base URL. Эти параметры решают разные задачи:
- Provider ID отвечает за идентичность конфигурации внутри Harness;
- Base URL определяет, куда отправляется HTTP-запрос;
- API-протокол описывает структуру запроса и ответа;
- учётные данные позволяют пройти авторизацию;
- модельный ID сообщает сервису, какую модель нужно вызвать;
- каталог моделей позволяет Harness проверить, что указанная модель действительно объявлена endpoint.
Официальный API DeepSeek поддерживает формат, совместимый с OpenAI, а документация показывает базовый адрес и формат Authorization: Bearer .... Однако это не означает, что любой сторонний шлюз с похожим URL автоматически поддерживает весь набор возможностей Harness. Раздел с форматом API и примером запроса используйте как эталон для прямого DeepSeek API, а не как доказательство совместимости конкретного self-hosted сервиса.
Не стоит копировать названия полей из старого скриншота или стороннего руководства. В developer preview интерфейс и конфигурационный каталог могут меняться. Перед сохранением нужно сверить текущую форму и актуальный официальный раздел интеграции DeepSeek Harness, если он доступен для установленной версии.
Чек-лист перед сохранением
- [ ] Provider ID записан в журнале изменений и больше не будет переименован без миграции.
- [ ] Base URL проверен без лишнего завершающего пути.
- [ ] Протокол соответствует документации конкретного endpoint.
- [ ] Секрет хранится в менеджере секретов или переменной окружения, а не в рабочем репозитории.
- [ ] Точный модельный ID получен от сервиса, а не угадан по отображаемому имени.
- [ ] Понятно, имеет ли ключ право на список моделей.
- [ ] Сохранён прежний рабочий маршрут для отката.
02Второй этап: проверьте обнаружение модели отдельно
Сохранение Provider означает только то, что конфигурация принята локальным интерфейсом. Это не подтверждает авторизацию, сетевую доступность и способность сервиса обработать запрос.
Если endpoint реализует каталог моделей, сначала выполняется его проверка. В официальном DeepSeek API для этого используется GET /models; ответ содержит массив моделей, а идентификатор id затем применяется в API-запросе. Схема метода списка моделей показывает ожидаемую структуру ответа и прямо указывает, что id — это идентификатор, используемый API.
У результата есть четыре practically полезных сигнала:
- Успешный ответ с нужным ID. Можно переходить к минимальному текстовому запросу.
- 401 или 403. Сначала исправляются ключ, ссылка на секрет, заголовок авторизации и права доступа к каталогу.
- Успешный ответ без нужной модели. Сервис доступен, но модельный ID не совпадает либо модель не опубликована в этом окружении.
- Каталог не поддерживается. Нельзя объявлять модель обнаруженной только потому, что чат endpoint отвечает. Следует проверить, допускает ли текущая версия Harness ручное добавление модели, и какие сведения о её возможностях обязательны.
Ошибка «модель не найдена» после успешного сохранения обычно не требует немедленного пересоздания Provider. Сначала нужно сравнить строку модельного ID посимвольно: регистр, дефисы, суффиксы версии и внутренние алиасы часто отличаются от отображаемого названия.
Если запрос списка моделей возвращает 401, действие выбирается по уровню сбоя:
- проверить, что используется секрет именно этого Provider;
- убедиться, что запрос идёт на правильный endpoint;
- сверить формат заголовка авторизации с документацией шлюза;
- проверить права ключа на каталог;
- повторить проверку вне Harness тем же адресом и тем же секретом;
- только после этого менять конфигурацию Harness.
Для прямого API DeepSeek официальная документация также публикует коды ошибок и рекомендации по их интерпретации. Для внутреннего шлюза эти коды могут быть преобразованы прокси, поэтому в журнале следует сохранять не только HTTP-статус, но и тело ответа, request ID и фактический маршрут.
03Третий этап: выполните минимальный текстовый запрос
Первую проверку следует запускать в изолированном рабочем пространстве и новой сессии. Не используйте для неё важный репозиторий, производственные секреты или команды, способные изменить файлы.
Порядок проверки:
- Создайте отдельную тестовую сессию и явно выберите новый Provider.
- Укажите одну модель без алиаса и без автоматического переключения.
- Отправьте короткое текстовое задание, например просьбу вернуть фиксированную строку.
- Сохраните фактический Provider, модель, HTTP-статус, request ID и сообщение об ошибке.
- Повторите запрос с потоковой выдачей, только если этот режим заявлен как поддерживаемый.
- Сравните фактический ответ с ожидаемой структурой: текст должен находиться там, где его ожидает Harness, а не только присутствовать в сыром JSON.
- При сбое вернитесь к последнему проверенному Provider, не изменяя старую рабочую сессию.
Официальный пример DeepSeek использует POST /chat/completions, передаёт модель и массив сообщений, а также показывает варианты параметров thinking и streaming. Это полезная контрольная точка для прямого API, но внутренний шлюз может ограничивать отдельные поля. Пример запроса в официальной документации следует адаптировать только после проверки текущего протокола пользовательского endpoint.
04Четвёртый этап: добавьте один контролируемый инструмент
Текстовая генерация и работа агента — разные уровни совместимости. Сервис может вернуть корректный ответ на сообщение, но неправильно обработать схему инструмента, аргументы, параллельные вызовы или возврат результата в историю.
Для первой инструментальной проверки выбирается безопасная функция без доступа к важным данным, например операция, которая принимает строку и возвращает заранее предсказуемый результат. Не следует начинать с shell-команд, записи файлов, доступа к сетевым ресурсам или операций в производственном репозитории.
Запишите следующие наблюдения:
- дошёл ли список tools до endpoint;
- вызвал ли модель инструмент именно с допустимыми аргументами;
- получил ли Harness результат инструмента в правильной роли сообщения;
- продолжилась ли сессия после возврата результата;
- сохранился ли исходный Provider во втором запросе;
- не исчезли ли поля reasoning или служебные части ответа, если текущая конфигурация их использует.
Если текст работает, а инструмент нет, это не «почти успешное» подключение. Для AI Agent такой маршрут следует считать ограниченным текстовым режимом до тех пор, пока инструментальный цикл не пройдёт проверку целиком. В рабочем каталоге можно зафиксировать возможности отдельно: текст, streaming, tools, структурированный вывод и многоходовая история.
05Пятый этап: переключите новые сессии, не ломая старые
После успешных проверок новый Provider можно назначить значением по умолчанию для новых сессий. Старые сессии не следует считать автоматически перенесёнными: уже отправленные запросы сохраняют сведения о выбранном маршруте и модели.
Безопасная процедура выглядит так:
- оставить старую сессию неизменной как контрольную;
- создать новую сессию после изменения значения по умолчанию;
- отправить минимальный текстовый запрос;
- повторить инструментальную проверку;
- сравнить Provider и модель в журнале;
- только затем переносить рабочий prompt или задачу.
Если Provider удалён, а старая сессия продолжает ссылаться на него, многократное редактирование истории не решит проблему. Создаётся новая сессия с актуальным маршрутом, а старая сохраняется для анализа. Это особенно важно при расследовании: иначе невозможно отличить неисправность сервиса от остаточной ссылки на удалённую конфигурацию.
06Поддерживайте маршрут и заранее готовьте откат
После внедрения нужно вести короткую карточку изменения для каждого endpoint. В неё включаются:
- предыдущий и новый Base URL;
- Provider ID;
- модельный ID;
- версия DeepSeek Harness;
- версия шлюза;
- изменённый секрет или ссылка на него;
- результаты текстовой и инструментальной проверки;
- подтверждённый маршрут отката.
После обновления Harness или внутреннего шлюза повторяются минимум две проверки: короткий текстовый запрос и контролируемый вызов инструмента. Если изменились каталог моделей, правила Provider или формат ошибок, добавляется проверка обнаружения модели.
Для длительной работы лучше иметь два маршрута: текущий и последний подтверждённый. Откат должен означать выбор заранее проверенного Provider, а не срочное редактирование нескольких полей в неработающей сессии. Ключевая граница здесь проста: резервный маршрут должен быть проверен до аварии, иначе он является только записью в документации.
При необходимости подготовить отдельный macOS-контур для такой проверки стоит сначала изучить руководство по помощи и эксплуатации NUKCLOUD, а затем сопоставить требования проекта с доступными вариантами аренды Mac. Это особенно полезно, когда шлюз доступен только из изолированной сети или тестовый агент должен оставаться онлайн в течение всего окна проверки.
07Когда собственный endpoint лучше не использовать
Пользовательский Provider не является универсальным способом «разблокировать» любую модель. От него лучше отказаться, если:
- официальный API уже присутствует во встроенном каталоге;
- команда не может гарантировать стабильность Base URL;
- ключи выдаются без понятной ротации и аудита;
- endpoint поддерживает только один демонстрационный запрос;
- нет владельца, который будет проверять маршрут после обновлений;
- сервис не сообщает точный модельный ID;
- инструментальный цикл не проходит тест в изолированной сессии.
Самостоятельный сервис может дать контроль над данными, маршрутизацией и квотами, но одновременно добавляет обслуживание TLS, сетевых правил, секретов, каталогов моделей и совместимости формата. Для краткого теста это оправдано не всегда.
Если текущая схема работает через Windows или Linux-сервер, её слабые места обычно проявляются не в самом HTTP-запросе, а в непостоянном доступе, ручном обновлении секретов, отсутствии стабильной macOS-среды и сложном воспроизведении ошибки на том же окружении. Когда модельный шлюз нужно проверять в изолированной и постоянно доступной macOS-среде, аренда Mac через NUKCLOUD может оказаться удобнее разовой настройки собственного компьютера: не требуется заранее покупать отдельное оборудование, поддерживать его включённым и переносить тестовую конфигурацию между рабочими местами. При этом для постоянной тяжёлой нагрузки, физического доступа к периферии или долгосрочной экономии следует отдельно сравнить аренду с покупкой собственного Mac.
Если текущая задача ограничивается несколькими проверками маршрута, разумно подготовить временную удалённую Mac-среду, провести описанные в статье тесты и сохранить результаты в карточке Provider. Если же после этого маршрут становится постоянной частью производственной платформы, решение о долгосрочной инфраструктуре следует принимать уже по фактическим требованиям к доступности, секретам, сети и нагрузке, а не по одному успешному текстовому ответу.