ИИ-агенты и автоматизация

DeepSeek Harness на своём endpoint и ошибка developer

DeepSeek Harness на своём endpoint и ошибка developer

DeepSeek Harness — агентная обвязка DeepSeek — подключается к любому OpenAI-совместимому шлюзу через собственного провайдера в настройках. Но у неё есть известная ловушка: для рассуждающих моделей адаптер отправляет системную инструкцию с ролью developer, и шлюзы, которые принимают только system, отвечают 400 на каждый запрос. В обсуждениях репозитория это больше десяти одинаковых сообщений. Мы проверили наш шлюз: роль developer он принимает на всех пяти проверенных позициях, так что на KeyDealer эта ошибка не воспроизводится.

Разберём, как подключить Harness к своему шлюзу, откуда берётся ошибка и как проверить любой шлюз за минуту до того, как тратить вечер на настройку.

Как подключают свой провайдер

Harness работает с моделями через адаптер, и в его настройках описывается провайдер. Минимальный набор полей, по конфигурации из обсуждения в репозитории:

ПолеЧто означаетНа что обратить внимание
имя провайдераидентификатор, на который ссылаются моделипостоянный, менять его потом неудобно
apiKeyEnvимя переменной окружения с ключомименно имя переменной, а не сам ключ
apiпротоколopenai-completions для чат-дополнений
baseURLадрес шлюзадля OpenAI-совместимого — с /v1 на конце
modelsсписок моделей и их уровни рассужденияидентификаторы как в каталоге шлюза

Идентификаторы моделей берите из живого каталога шлюза, а не из документации вендора. В каталоге KeyDealer они пишутся через дефис: deepseek-v4-flash, deepseek-v4-pro, а не через точку.

Для сравнения: похожая настройка другого агента разобрана в материале Codex CLI на своём endpoint. Принцип одинаковый, названия полей разные.

Откуда берётся ошибка

Здесь разбор по первоисточнику — обсуждению в репозитории DeepSeek Harness.

В протоколе чат-дополнений у сообщения есть роль: system, user, assistant, tool. Для рассуждающих моделей часть клиентов отправляет системную инструкцию не с ролью system, а с ролью developer — так устроено у ряда вендоров.

Адаптер Harness решает, какую роль использовать, по признаку совместимости. Для незнакомого адреса шлюза, который выглядит как стандартный OpenAI-совместимый, этот признак по умолчанию включён — и рассуждающая модель получает developer. А поменять это в настройках нельзя: в схеме конфигурации адаптера нужного поля нет, лишнее поле отбрасывается.

Итог для шлюза, который знает только system: запрос отклоняется с ошибкой 400 о неизвестной роли. На каждой рассуждающей модели, на каждом запросе.

В обсуждении собрано больше десяти сообщений с одной и той же причиной. Участник, сверивший исходный код, указывает, что на версии rc.7 исправления в основном коде ещё нет, хотя готовая правка из сообщества существует.

Работает ли это с KeyDealer

Работает. Мы проверили 25 сентября 2026 года: отправили запрос с ролью developer в системной инструкции на пять позиций каталога.

ПозицияРоль developer
deepseek-v4-flashпринята, ответ корректный
deepseek-v4-proпринята, ответ корректный
qwen-3-7-maxпринята, ответ корректный
sonnet-4-6принята, ответ корректный
gpt-5-6-lunaпринята, ответ корректный

То есть описанная ошибка на нашем API не воспроизводится, и никаких обходов для подключения Harness не нужно.

Оговорка честная: мы проверили пять позиций из 46 текстовых, а не все. Для остальных проверьте сами одним запросом — как это сделать, ниже.

Как проверить любой шлюз за минуту

Самое полезное в этой истории — проверка, которую стоит делать до подключения любой обвязки, а не только Harness.

Отправьте один запрос в чат-дополнения с двумя сообщениями: первое с ролью developer и короткой инструкцией, второе с ролью user и простым вопросом. Если пришёл ответ — шлюз роль принимает. Если пришла ошибка 400 с упоминанием неизвестной роли — вы нашли ту самую проблему заранее, а не после часа настройки.

Та же проверка полезна и в обратную сторону: если вы переносите интеграцию с одного шлюза на другой и вдруг всё перестало работать на рассуждающих моделях, первое, что стоит проверить, — роль системного сообщения. Про разбор ошибок API в целом — в материале ошибки API нейросетей.

Что делать, если шлюз не принимает developer

Если вы подключаете Harness к другому шлюзу и ловите эту ошибку, в обсуждении описаны два обхода.

Плагин-посредник. Сторонний плагин регистрирует провайдера как отдельный маршрут со своими настройками совместимости, и они не проходят через урезанную схему адаптера. Участник обсуждения проверил: с выключенной ролью developer уходит system, а уровень рассуждения доходит до модели.

Правка установленного пакета. Добавить недостающее поле в схему адаптера. Работает сразу, но слетает при обновлении пакета.

Оба варианта — обходы, а не исправление. Правильное решение — поле в основном коде, и его ждут.

Почему роль developer вообще появилась

Коротко, чтобы было понятно, это не каприз одного клиента.

Ряд вендоров развёл два вида инструкций: те, что задаёт разработчик приложения, и те, что пишет пользователь. У рассуждающих моделей это разделение стало заметнее — инструкции разработчика получили отдельную роль с более высоким приоритетом. Клиенты, которые хотят работать с такими моделями правильно, начали отправлять системную инструкцию именно в этой роли.

Проблема в том, что протокол чат-дополнений стал стандартом де-факто, и его реализуют десятки шлюзов. Часть из них держит только исходный набор ролей. Когда клиент по умолчанию считает, что любой стандартный на вид адрес понимает новую роль, а шлюз её не знает, получается ровно эта ошибка.

Правильное поведение клиента — давать выключить новую роль в настройках. Правильное поведение шлюза — принимать обе и отображать developer на то, что понимает модель. Пока хотя бы одна сторона ведёт себя правильно, всё работает.

На что ещё смотреть при подключении обвязки

Роль системного сообщения — самая заметная ловушка, но не единственная. Три вещи, которые стоит проверить в первый же день.

Инструменты. Обвязка агента почти всегда передаёт модели набор инструментов. Статус вызова инструментов у позиции в каталоге должен быть подтверждён, иначе агент будет отвечать текстом там, где должен вызывать инструмент.

Принудительный вызов. Если обвязка задаёт обязательный вызов инструмента, у позиции должен быть подтверждён именно этот режим. У части моделей он недоступен, и это отдельное поле в каталоге.

Стриминг вместе с инструментами. Бывает, что по отдельности работает и то и другое, а вместе — нет. У позиций каталога это тоже отдельная строка статуса.

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

Какой уровень рассуждения выбирать

В настройках Harness у каждой модели можно задать уровни рассуждения. Это отдельный рычаг расхода, и о нём стоит подумать до запуска, а не после первого счёта.

Высокий уровень пишет длиннее и стоит дороже при той же ставке. Для рутинных задач агента — прочитать файл, поправить строку, запустить проверку — он почти никогда не нужен. Механика уровней рассуждения разобрана в материале уровни рассуждения: reasoning effort, а то, насколько обвязка сама влияет на счёт, — в материале HarnessTax: обвязка агента.

Что даёт свой шлюз

Три вещи, ради которых обвязку вообще переключают на сторонний эндпоинт.

Оплата. Доступ к моделям оплачивается по факту расхода, в нашем случае — российской картой в рублях.

Выбор модели. Через один ключ доступен весь каталог, а не одна линейка. Можно гонять рутину на дешёвой позиции, а сложное — на сильной.

Контроль расхода. Отдельный ключ под агента, дневной и месячный лимит расходов на этот ключ и список разрешённых моделей. Если агент зациклится, он упрётся в лимит, а не в ваш бюджет.

KeyDealer даёт один ключ на 56 позиций каталога, 44 из которых доступны сейчас, со ставками от 1 ₽ за миллион токенов. Семейство DeepSeek представлено двумя позициями: deepseek-v4-flash по 1 ₽ и deepseek-v4-pro по 2 ₽ за миллион, одинаково на вход и на выход. Про само подключение к API DeepSeek — в материале DeepSeek API: как подключить.

Чего мы не утверждаем

Три оговорки.

Мы проверили пять позиций, а не весь каталог. На остальных роль developer не проверялась. Проверьте нужную позицию сами одним запросом перед подключением.

Мы не пересказываем версии и сроки выпуска Harness. Проект развивается быстро, и конкретные номера версий устаревают. Актуальное состояние смотрите в репозитории.

Мы не гарантируем, что все возможности Harness заработают через сторонний шлюз. Через эндпоинт вы получаете модель и протокол. То, что реализовано на стороне вендора, само не приезжает.

Что держать в голове

Первое. Перед подключением любой обвязки к шлюзу проверьте одним запросом, принимает ли он роль developer. Это минута работы.

Второе. Ошибка 400 на рассуждающих моделях при работающих обычных — почти всегда роль системного сообщения, а не ключ и не адрес.

Третье. Уровень рассуждения — такой же рычаг расхода, как выбор модели. Задавайте его осознанно для каждого класса задач. Что мы за проект — на странице о проекте, ключ заводится на keydealer.ru/login.

Частые вопросы

Что такое DeepSeek Harness?

Агентная обвязка от DeepSeek — программа, которая даёт модели инструменты, собирает контекст и ведёт задачу. Её можно подключить не только к API DeepSeek, но и к любому OpenAI-совместимому шлюзу через собственного провайдера в настройках.

Что за ошибка с ролью developer?

Для рассуждающих моделей адаптер Harness отправляет системную инструкцию с ролью developer вместо system. Часть OpenAI-совместимых шлюзов эту роль не принимает и отвечает 400 на каждый запрос. В обсуждениях репозитория это собрано в группу из более чем десяти одинаковых сообщений.

Работает ли Harness с KeyDealer?

Роль developer наш шлюз принимает — мы проверили это 25 сентября 2026 года на пяти позициях: deepseek-v4-flash, deepseek-v4-pro, qwen-3-7-max, sonnet-4-6 и gpt-5-6-luna. Все ответили без ошибки. Поэтому описанная ошибка на нашем API не воспроизводится.

Какой протокол указывать?

Протокол чат-дополнений, в настройках Harness он называется openai-completions. Адрес указывается с /v1 на конце, ключ — через имя переменной окружения, а не открытым текстом.

Что делать, если шлюз не принимает developer?

В обсуждениях описаны два обхода. Первый — отдельный плагин, который регистрирует провайдера со своими настройками совместимости и отправляет system. Второй — правка установленного пакета, которая слетает при обновлении. Исправление в основной код, по данным обсуждения, на версии rc.7 ещё не внесено.

Почему это касается не только Harness?

Роль developer используют и другие клиенты для рассуждающих моделей. Перед подключением любой обвязки к шлюзу стоит проверить одним запросом, принимает ли он эту роль. Это минута работы, которая экономит вечер поисков.

Источники