Разделы базы знаний ▾

Навигация

▸ Начните здесь По ролям

Категории

Инструменты 52
Глоссарий 12

Инструменты

OpenHands + JoinGonka Gateway: агент на своём endpoint

OpenHands — открытая платформа для автономной разработки: агент сам читает репозиторий, запускает команды, правит файлы и ведёт задачу до результата, а вы ставите цель и проверяете итог. В 2026 году её главный интерфейс — Agent Canvas, браузерный пульт, из которого запускают разговоры с агентом и автоматизации на своей машине, в Docker, на сервере или в облаке OpenHands. Код открыт под лицензией MIT.

Модель OpenHands не навязывает: весь слой работы с LLM построен на LiteLLM, поэтому агенту подходит любой OpenAI-совместимый endpoint. Для JoinGonka Gateway это три поля в настройках: Custom Model — openai/deepseek-ai/DeepSeek-V4-Flash-0731, Base URL — https://gate.joingonka.ai/v1, API Key — ваш ключ jg-…. Отдельный установщик не понадобится: всё делается в интерфейсе за пару минут.

Автономный агент — самый прожорливый потребитель токенов: каждый шаг несёт системный промпт, историю и результаты инструментов, а шагов в задаче десятки. Документация OpenHands прямо предупреждает: агент шлёт модели много запросов, следите за расходом. Через шлюз миллион входных токенов стоит $0.0069 — одинаково для DeepSeek V4 Flash, GLM-5.3 Flash и MiniMax M2.7, — так что длинные прогоны перестают быть статьёй бюджета. После подтверждения адреса на счёт придут 3M бесплатных токенов: этого хватит, чтобы прогнать агента на настоящей задаче и увидеть собственный расход.

Какой OpenHands у вас: четыре интерфейса и ключ

У проекта сегодня несколько интерфейсов, и от того, какой из них запущен у вас, зависит, где искать настройки модели. Сами значения везде одни и те же — отличается только путь к ним.

ИнтерфейсКак запускаетсяГде задаётся модельСостояние на сентябрь 2026
Agent Canvasnpx @openhands/agent-canvas либо npm install -g @openhands/agent-canvas и команда agent-canvas; открывается на http://localhost:8000Settings > LLM, вкладка Advancedосновной интерфейс проекта
OpenHands CLIuv tool install openhands --python 3.12, затем openhandsмастер первого запуска, Ctrl+P → Settings, файл ~/.openhands/agent_settings.jsonработает, но в README помечен как проект, который больше не развивается активно
Прежний веб-интерфейс в Dockeropenhands serve или docker run из документации; порт 3000Settings → вкладка LLM → переключатель Advancedв документации назван Local GUI (Legacy)
OpenHands Cloudуправляемое облако проектата же страница настроек LLMпо документации свой LLM там задаётся так же; этот путь мы не проверяли

Для Agent Canvas нужны Node.js и uv — на нём работает локальный сервер агента (подробности — в инструкции по установке). Инструкция называет Node.js 22.12 или новее, но сам пакет начиная с версии 1.17 объявляет Node.js 24 и новее — ставьте 24, чтобы не получить предупреждение о несовместимой версии. Есть и вариант в контейнере: образ ghcr.io/openhands/agent-canvas отдаёт интерфейс на http://localhost:8000/canvas и видит только те каталоги, которые вы смонтировали.

Ключ JoinGonka. Зарегистрируйтесь на gate.joingonka.ai/register, подтвердите адрес и создайте ключ с префиксом jg- в разделе «API-ключи». Один ключ и один баланс действуют для всех моделей сети. В списке инструментов установщика @joingonka/setup OpenHands нет, и это не упущение: его настройки живут в интерфейсе и в защищённом хранилище бэкенда, а не в текстовом конфиге, который можно аккуратно дописать снаружи.

Подключение в Agent Canvas: три поля на вкладке Advanced

Шаг 1. Запустите Agent Canvas и откройте Settings > LLM. Мастер первого запуска предлагает собственного провайдера OpenHands — этот шаг можно пропустить, к настройкам легко вернуться позже.

Шаг 2. Нажмите Add LLM Profile и перейдите на вкладку Advanced: вкладка Basic предлагает только провайдеров и модели из встроенного списка.

Шаг 3. Заполните три поля:

ПолеЗначение
Custom Modelopenai/deepseek-ai/DeepSeek-V4-Flash-0731
Base URLhttps://gate.joingonka.ai/v1
API Keyваш ключ jg-…

Шаг 4. Сохраните профиль. Перед сохранением Canvas проверяет конфигурацию запросом с бэкенда: если ключ отклонён или модель недоступна, профиль не сохранится, а вы увидите текст ошибки.

Шаг 5. Начните новый разговор и отправьте короткое сообщение. Уже открытые разговоры продолжают работать на той модели, с которой начались.

Почему openai/. LiteLLM определяет провайдера по префиксу модели. Префикс openai/ означает не «модель от OpenAI», а «говорить с сервером по протоколу OpenAI Chat Completions». Срезается только первый сегмент, так что до шлюза доходит настоящий идентификатор — deepseek-ai/DeepSeek-V4-Flash-0731. В документации OpenHands та же схема показана на примере openai/qwen/qwen3.6-35b-a3b. Без префикса LiteLLM откажется работать с сообщением LLM Provider NOT provided.

Почему /v1 и ничего больше. LiteLLM ходит к серверу через официальный клиент OpenAI, а тот сам дописывает /chat/completions. Поэтому адрес обязан заканчиваться на /v1: без суффикса запрос уйдёт мимо API, с лишним хвостом — на путь, которого не существует. И ещё одно требование Canvas: адрес должен быть доступен с бэкенда, а не только из браузера. Шлюз — публичный HTTPS-адрес, из контейнера Docker он виден так же, как с хоста; приёмы вроде host.docker.internal нужны только для моделей на вашей машине.

Профили под все три модели. Заведите по профилю на каждую модель сети и назовите их коротко — например deepseek, glm и minimax (документация говорит о лимите в десять профилей). Переключаться можно прямо в разговоре, не теряя контекста: кнопкой выбора профиля в поле ввода или командой /model glm; /model без аргумента покажет список. Чтобы не вставлять ключ в каждый профиль, его можно сохранить один раз в блоке Provider Connections — он доступен на локальном бэкенде.

Прежний интерфейс в Docker. Поля те же: Settings → вкладка LLM → включить Advanced → Custom Model, Base URL, API Key → Save Changes.

Терминал и автоматизация: CLI, переменные окружения, SDK

CLI ставится одной командой через uv и при первом запуске сам проведёт через настройку модели; позже к ней возвращает Ctrl+P → Settings:

uv tool install openhands --python 3.12
openhands

Для скриптов удобнее переменные окружения. Важная деталь: по умолчанию CLI их игнорирует и применяет только с флагом --override-with-envs — на один запуск, ничего не сохраняя:

export LLM_MODEL="openai/deepseek-ai/DeepSeek-V4-Flash-0731"
export LLM_BASE_URL="https://gate.joingonka.ai/v1"
export LLM_API_KEY="jg-your-key"

openhands --override-with-envs

Тот же набор работает без интерфейса — для CI и пакетных задач:

openhands --headless --override-with-envs -t "Read calc.py and tell me in one sentence whether it has a bug."

В headless-режиме агент всегда действует с автоодобрением, поэтому запускайте его там, где ему можно всё: в отдельном каталоге или контейнере. Флаг --json превращает вывод в поток событий JSONL — его удобно разбирать в конвейере. Именно так мы проверяли связку 21 сентября 2026 на CLI 1.16.0: в шапке CLI печатает Agent initialized with model: openai/deepseek-ai/DeepSeek-V4-Flash-0731, затем агент читает файл и отвечает по существу.

СпособГде действуетСохраняется ли
Settings > LLM в Agent Canvasвсе новые разговоры на этом бэкендеда, в хранилище бэкенда (~/.openhands)
Мастер и Ctrl+P → Settings в CLIвсе запуски CLIда, в ~/.openhands/agent_settings.json
LLM_MODEL, LLM_BASE_URL, LLM_API_KEY с флагом --override-with-envsодин запуск CLIнет
config.tomlпрежняя линейка V0 и режим разработкив документации отнесён к Legacy; в Agent Canvas и CLI 1.x настройки задаются способами выше

Сохранённые настройки CLI лежат в ~/.openhands/agent_settings.json: модель в нём меняется правкой трёх полей блока llm — model, api_key и base_url. Создавать файл с нуля не стоит: мастер первого запуска пишет туда и остальные настройки агента, в том числе сжатие истории, без которого долгий разговор упрётся в окно контекста.

Если вы встраиваете агента в собственный код, те же три значения принимает OpenHands SDK:

from pydantic import SecretStr
from openhands.sdk import LLM

llm = LLM(
    model="openai/deepseek-ai/DeepSeek-V4-Flash-0731",
    base_url="https://gate.joingonka.ai/v1",
    api_key=SecretStr("jg-your-key"),
)

Какую модель брать для длинных автономных прогонов

Цена у моделей сети одна, поэтому выбор — про поведение. Автономному агенту важны две цифры. Окно контекста: каждый шаг заново отправляет историю, и чем окно длиннее, тем дольше агент работает без потерь. Потолок ответа: шаг, на котором агент пишет большой файл целиком, должен уместиться в один ответ. В таблице — результаты нашего прогона одной и той же задачи (прочитать файл и найти ошибку) через OpenHands CLI 1.16.0 с SDK 1.21.0.

МодельCustom Model для OpenHandsКонтекстПотолок ответаКак ведёт себя в OpenHands
DeepSeek V4 Flashopenai/deepseek-ai/DeepSeek-V4-Flash-0731380K32768Прочитала файл и ответила по существу, без лишнего текста. Длинный контекст и самый высокий потолок ответа в сети — выбор по умолчанию для многочасовых задач
GLM-5.3 Flashopenai/zai-org/GLM-5.3-Flash390K8192Рассуждает перед ответом; цикл с инструментами прошла чисто. Профиль для планирования и разбора запутанной логики — с поправкой на то, что часть ответа уходит на рассуждения
MiniMax M2.7openai/MiniMaxAI/MiniMax-M2.7200K8192Задачу решила, но в итоговом сообщении показала вслух ход рассуждений. У модели самая большая ёмкость в сети — запасной профиль на час пик и для заголовков разговоров

Рабочая схема для долгой задачи повторяет совет из документации OpenHands — планировать одной моделью, исполнять другой. Начните разговор на профиле glm и попросите план без правок файлов; затем отправьте /model deepseek и дайте команду исполнять. История, файлы и состояние задачи при переключении сохраняются. Профиль minimax держите третьим: на него удобно уйти, когда у двух других в час пик закончилась ёмкость, и ему же в Settings > Application можно отдать генерацию заголовков разговоров.

Сжатие истории. Даже окно в сотни тысяч токенов на многочасовой задаче конечно. В OpenHands за это отвечает конденсер: он сворачивает старые события в краткое резюме, что, по словам документации, снижает задержку и расход токенов в долгих разговорах. В Agent Canvas он настраивается в разделе Settings > Condenser; в нашем прогоне CLI включил его сам, с порогом в 80 событий.

Лимиты модели. Окно контекста и потолок ответа OpenHands берёт из справочника LiteLLM, а идентификаторов сети Gonka в нём нет (мы проверили на LiteLLM 1.81), так что своих значений для этих моделей у агента нет. Работе это не мешает: потолок ответа шлюз применяет сам, по таблице выше. Захотите задать лимиты явно — в SDK это поля max_input_tokens и max_output_tokens, а в Canvas полный набор полей профиля открывает вкладка All. Подробности о модели по умолчанию — в обзоре DeepSeek V4 Flash.

Проверка и частые ошибки

Убедиться, что запросы действительно идут через шлюз, можно с двух сторон. Со стороны OpenHands — новый разговор и короткое задание вроде «прочитай README и перескажи одной фразой»: агент должен вызвать инструмент и ответить. Со стороны шлюза — кабинет, раздел «Использование»: запрос появится в разбивке «По моделям», а в блоке «По ключам» обновится время последнего запроса. Пусто — значит, разговор идёт на другом профиле: проверьте, какой из них отмечен активным.

Что видноЧто это значитЧто сделать
LLM Provider NOT providedВ поле модели нет префикса провайдераВпишите openai/ перед идентификатором: openai/deepseek-ai/DeepSeek-V4-Flash-0731
Профиль не сохраняется, Canvas показывает ошибку бэкендаCanvas проверил конфигурацию живым запросом и получил отказТекст ошибки — одна из строк ниже: исправьте ключ, адрес или модель и сохраните снова
AuthenticationError … Invalid API keyШлюз ответил 401: ключ не принятВставьте ключ целиком, без пробелов по краям; проверьте в кабинете, что он не отозван
405 Not Allowed и HTML-страница nginxВ Base URL нет суффикса /v1Адрес — ровно https://gate.joingonka.ai/v1
404 … Invalid URL (POST /v1/v1/chat/completions)В Base URL лишний хвост: второй /v1 или путь /chat/completions целикомОставьте только /v1 — путь LiteLLM дописывает сам
400 … Model "…" not found. Available: …Идентификатор после openai/ не совпал ни с одной моделью сетиШлюз сам перечисляет доступные; полный список — GET https://gate.joingonka.ai/v1/models
429У ключа исчерпан минутный лимит запросов либо у модели в час пик закончилась ёмкостьOpenHands сам повторяет запрос с нарастающей паузой. Затянулось — переключите профиль командой /model; состояние сети видно на странице статуса
402На балансе закончились средстваПополните счёт в разделе «Биллинг»; ключ при этом рабочий
Агент отвечает как чат-бот: не трогает файлы, путается в вызовах инструментовМодель не справляется с агентным циклом; документация OpenHands советует в таком случае сменить модельПереключитесь на профиль DeepSeek V4 Flash — в нашем прогоне он прошёл агентный цикл без замечаний

По документации OpenHands число повторов и паузы между ними при 429 настраиваются переменными LLM_NUM_RETRIES, LLM_RETRY_MIN_WAIT и LLM_RETRY_MAX_WAIT. Значения по умолчанию в документации и в SDK расходятся, поэтому ориентируйтесь на фактические: в состоянии разговора CLI 1.16.0 мы видели 5 попыток с паузами от 8 до 64 секунд.

Сколько это стоит и что учесть в работе

Через JoinGonka Gateway токены стоят $0.0069 за миллион на входе и $0.021 за миллион на выходе — цена одинакова для всех моделей сети и подставляется на этой странице из живого источника.

СценарийРасходЧерез Gateway
Разовая задача: разобраться в файле, внести правкудесятки тысяч токеновдоли цента
Автономная доработка фичи20-50M токеновдесятки центов
Сутки фоновых автоматизаций~150M токеновоколо доллара

Оценки в правой колонке — по ценам на сентябрь 2026; как устроена экономика агентов, подробно разобрано в статье про самый дешёвый API для AI-агентов.

Потолок расхода. OpenHands советует ставить лимиты трат — у шлюза он встроен в саму модель оплаты: баланс предоплаченный, и больше, чем на счёте, агент не потратит. Остаток и расход по дням видны в кабинете. Для CI и фоновых автоматизаций заведите отдельный ключ, чтобы их расход не смешивался с вашим; дочерние ключи с дневным лимитом описаны в статье про Management Keys.

Граница доверия. Agent Canvas, запущенный через npm, работает с правами вашего пользователя и видит всю файловую систему. Для чужого кода берите вариант в Docker: агент увидит только смонтированный каталог. Это свойство самого OpenHands, от провайдера модели оно не зависит.

Переписка остаётся у вас. Историю разговора OpenHands хранит у себя, в ~/.openhands, и отправляет её модели с каждым шагом; шлюз переписку не хранит — ваши промпты и код не остаются на нём после ответа.

Если в задаче есть картинки — скриншоты интерфейса, схемы — заведите для неё отдельный профиль с vision-моделью: модели сети Gonka текстовые. Для кода, команд и файлов это не ограничение.

OpenHands подключается к JoinGonka Gateway тремя полями: Custom Model openai/deepseek-ai/DeepSeek-V4-Flash-0731, Base URL https://gate.joingonka.ai/v1 и ключ jg-…. В Agent Canvas это вкладка Advanced в Settings > LLM, в CLI — мастер настройки или переменные LLM_MODEL, LLM_BASE_URL и LLM_API_KEY с флагом --override-with-envs; config.toml остался в прошлой линейке. Префикс openai/ выбирает протокол, а не вендора, суффикс /v1 обязателен. Живой прогон подтвердил агентный цикл на всех трёх моделях сети: по умолчанию берите DeepSeek V4 Flash с контекстом 380K и ответом до 32768 токенов, GLM-5.3 Flash — для планирования, MiniMax M2.7 — запасным профилем на час пик.

Хотите узнать больше?

Изучите другие разделы или начните зарабатывать GNK прямо сейчас.

Получить ключ и бесплатные токены →