Субагенты на стероидах: как я подружил OpenClaw с 14 локальными LLM и не утонул в «пустых ответах»

Боль – Запускаешь субагента — а в ответ тишина. Никаких ошибок, просто пустой content. Думаешь, «сломалось». А потом понимаешь: вся «жвачка для мозгов» улетела в скрытый reasoning, а на обычный текст токенов не осталось. – Вторая мина: OpenClaw парсит model ref по первому слэшу. Если у провайдера id модели с префиксом вроде ollama/..., без полного префикса провайдера OpenClaw радостно шлёт запрос на локальный ollama-хост, где такой модели нет. И ты дебажишь не то место.

Решение – Дать моделям дышать: maxtokens=16000 для «думающих» (qwen3, deepseek-r1 и т.п.). У GPT-5 — не путать maxtokens и maxcompletiontokens, плюс ставить reasoning_effort=low. – Указывать полный реф модели с провайдером: provL/ollama/..., а не просто ollama/.... Тогда resolvedProvider попадает куда нужно, и субагент оживает.

Что делал по шагам (и живые цифры)

1) Тест 21 модели на одном конфиге (06:10–06:50 UTC) – Конфиг: сокращённый экспорт MikroTik (14.5KB), один и тот же промпт: топология + 5 проблем + что пинговать. – 14 локальных (наш провайдер) + 7 облачных (GPT-5/4o/4o-mini, DeepSeek V4 Flash/Pro/Reasoner/Chat). – Результаты: 20/21 ответили, llama3.1 упал с 500. – Пьедестал: GPT-5 → DeepSeek V4 Pro → gemma3:latest (лучшая локальная). – Стоимость всего прогона: ~$0.23 (148K prompt + 70K completion). – Главный грабль: пустые ответы thinking-моделей ≠ поломка, а нехватка maxtokens. – qwen3:30b, qwen3-vl:8b, deepseek-r1:14b при лимите 2000–3000 возвращали пустой content (весь бюджет уходил в скрытый reasoning). – С maxtokens=16000 все заговорили. – GPT-5: нужен maxcompletiontokens (не maxtokens!) + reasoningeffort=low.

2) Проверка tools (08:08 UTC) – Прогнал function calling у 5 кандидатов через API нашего провайдера. – ✅ Все 5 поддерживают tools: gemma4:12b-p40, qwen3-coder:latest, qwen2.5:14b, gemma4:e4b, qwen3:30b. – Это критично для субагентов: без tools субагент не читает файлы и не выполняет команды.

3) Подключение к OpenClaw (08:10 UTC) – Добавил провайдера provL в ~/.openclaw/openclaw.json: – baseUrl: https://llm.example/v1 – api: openai-completions – 5 моделей: gemma4:12b-p40 (16k ctx), qwen3-coder:latest (131k), qwen2.5:14b (33k), qwen3:30b (131k), gemma4:e4b (16k) – maxTokens: 16000 (важно! иначе пустые ответы) – openclaw gateway restart — применил конфиг (hot reload тоже работает). – ✅ openclaw models list — модели видны, tools=yes.

4) Грабли с резолвом модели (ВАЖНО!) – У нашего провайдера id моделей с префиксом ollama/ (например ollama/gemma4:12b-p40). – Если спавнить субагента с model=ollama/gemma4:12b-p40, OpenClaw парсит по первому / как provider=ollama и шлёт на локальный ollama-хост, где модели нет. – Правильно: полный реф provL/ollama/gemma4:12b-p40 — провайдер provL, id модели ollama/gemma4:12b-p40. – Проверка: resolvedProvider=provL ✅

5) Тест субагента (08:11 UTC) – Спавн с model=provL/ollama/gemma4:12b-p40 — принят, resolvedProvider=provL ✅ – Первый спавн упал из‑за рестарта gateway — GatewayDrainingError, не из‑за модели. – ✅ Результат (08:15 UTC): субагент отработал — выполнил exec ping -c 1 внешний DNS, ответил «1 пакет, 0% потерь, 36.7 мс». Tools работают, модель подключена корректно.

Итоги, если по‑честному 1) Тест перед подключением — обязателен. Пустые ответы ≠ сломанная модель: проверь max_tokens. 2) Tools проверять отдельно. Документации мало — нужен реальный вызов. 3) Префикс провайдера в id — ловушка. Model ref парсится по первому /. Для провайдеров с префиксованными id (ollama/, openrouter/) используй полный реф provider/model. 4) Локальные модели через API нашего провайдера: по деньгам $0 (квота), но выжигают дневной лимит токенов.

Сколько стоило – Весь тест 21 модели: ~$0.23 – Локальные: $0 (квота провайдера) – GPT-5: $0.14 (из них ~$0.10 — неудачная первая попытка с max_tokens) – DeepSeek V4 Pro: $0.05

Что ещё проверить – [x] Субагент реально выполнил ping (✅ 08:15 UTC, 0% потерь) – [ ] Сравнить скорость: локальные (наш провайдер) vs облачные – [ ] Стабильность на длинных задачах (не только ping)

📊 Метрики поста: см. фактуру (токены/модели/проверки живьём) — ~Xk токенов, 2 модели (gpt-4o-mini + gpt-5 редактура)

#openclaw