Выбор модели OpenCode в Docker: бесплатная модель, OpenCode Go или OpenRouter
Введение
Эта статья — часть большого руководства
OpenCode в Docker на Ubuntu 24.04.
Руководство показывает, как запускать
OpenCode с флагом
--auto внутри контейнера
Docker.
С --auto агент не спрашивает вас перед каждой
командой, поэтому контейнер ограничивает то, до чего он может достать:
агент работает только в одном git worktree, отдельной
копии проекта.
Эта статья объясняет, как задача получает модель: где модель задана, как проверить её до запуска и как запустить задачу на платной модели OpenCode Go или OpenRouter — на один запуск или на каждый.
Откуда берётся модель
Запуск использует модель, названную в файле конфигурации контейнера, если
вы не укажете другую модель через -m.
Файл конфигурации — это
container/tools/ai/docker/opencode.jsonc в вашей
основной копии.
Вы написали его в шаге 4
(конфигурация и заметки для контейнера).
Лаунчер монтирует этот файл в каждый контейнер, только на чтение, как
/work/opencode.jsonc, и OpenCode читает его при
запуске. Какую модель называет файл:
grep '"model"' container/tools/ai/docker/opencode.jsonc
"model": "opencode/deepseek-v4.1-flash-free",
Та же проверка в оболочке шага 6 (проверка, что видит контейнер) показывает, что прочитал сам OpenCode:
opencode debug config | grep -A3 '"model": {'
"model": { "providerID": "opencode", "model": "deepseek-v4.1-flash-free" },
Первый выбор: бесплатная модель OpenCode
Модель в файле — текущая
бесплатная модель OpenCode.
Это первый выбор этой настройки: она ничего не стоит и не требует ключа,
поэтому в контейнере нет никакого ключа.
Запуск без -m и без опции с ключом идёт на ней.
Поэтому команды руководства используют бесплатную модель, если не сказано
иное.
- Бесплатный тариф может хранить то, что ему отправляют. Монтируйте только то, что готовы отправить.
- У неё есть лимит использования. Когда вы до него дойдёте, продолжите задачу на платной модели (когда бесплатная модель упирается в лимит).
Другая модель на один запуск: -m
-m после run выбирает
модель только для этого запуска.
Платной модели нужен ещё и её ключ: поставьте опцию лаунчера с ключом и её
файл перед worktree.
Файл конфигурации не меняется, поэтому следующий запуск без
-m снова идёт на бесплатной модели:
| Запуск | Модель |
|---|---|
| container/tools/ai/opencode-docker.sh ../site-agent-<task> run "<what to do>" | модель из файла конфигурации: бесплатная модель OpenCode |
| container/tools/ai/opencode-docker.sh --opencode-key ~/.config/opencode-agent/opencode.key ../site-agent-<task> run -m opencode-go/deepseek-v4.1-flash "<what to do>" | DeepSeek V4.1 Flash через OpenCode Go, для этого запуска |
| container/tools/ai/opencode-docker.sh --openrouter-key ~/.config/opencode-agent/openrouter.key ../site-agent-<task> run -m openrouter/deepseek/deepseek-v4.1-flash "<what to do>" | DeepSeek V4.1 Flash через OpenRouter, для этого запуска |
Id моделей — это строки opencode models в оболочке
шага 6, например opencode
models | grep '^opencode-go/' или
opencode models | grep
'^openrouter/'.
Цены меняются, поэтому проверяйте их перед долгой задачей
(проверяйте цены до планирования
бюджета).
Платной модели нужен ключ
Ключ должен быть в контейнере, и агент может его прочитать.
Берите ключ, сделанный для этого, с лимитом расходов, и никогда не
монтируйте auth.json хоста.
Контейнер получает ключ одним из двух способов:
- Файл ключа на один запуск: --opencode-key для OpenCode Go, --openrouter-key для OpenRouter (ключи для одного запуска, платная модель через OpenRouter).
- Сохранённый вход в томе сессий, который видит каждый запуск (сохранённый вход).
Без ключа запуск останавливается сразу, ещё до того, как что-то отправит.
Проверено на одноразовом томе, с -m и без ключа:
Error: Model unavailable: openrouter/deepseek/deepseek-v4.1-flash
Какую модель запуск использовал на самом деле
Первая строка вывода запуска — это агент и модель, как в демонстрации с бесплатной моделью:
> build · deepseek-v4.1-flash-free
Другая модель на каждый запуск
Поменяйте строку модели в файле конфигурации на хосте.
Лаунчер монтирует файл из вашей основной копии, поэтому следующий запуск
использует новую модель без коммита.
Если там платная модель, ключ нужен каждому запуску, а бесплатную модель
вы тогда выбираете через -m.
Автор статьи: Клавдия Кондакова