Выбор модели 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 хоста.

Контейнер получает ключ одним из двух способов:

Без ключа запуск останавливается сразу, ещё до того, как что-то отправит.

Проверено на одноразовом томе, с -m и без ключа:

Error: Model unavailable: openrouter/deepseek/deepseek-v4.1-flash

Какую модель запуск использовал на самом деле

Первая строка вывода запуска — это агент и модель, как в демонстрации с бесплатной моделью:

> build · deepseek-v4.1-flash-free

Другая модель на каждый запуск

Поменяйте строку модели в файле конфигурации на хосте.

Лаунчер монтирует файл из вашей основной копии, поэтому следующий запуск использует новую модель без коммита.

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

Автор статьи: Клавдия Кондакова