ИИ-агенты и автоматизация
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 используют и другие клиенты для рассуждающих моделей. Перед подключением любой обвязки к шлюзу стоит проверить одним запросом, принимает ли он эту роль. Это минута работы, которая экономит вечер поисков.