GPT-Image 2.6 Flare и Sunburst уже доступныОт $0.025 за изображение

MiniMax M3.1 Flash в OpenCode: проверенная настройка и вызовы инструментов

Проверенная настройка OpenCode v2.2.3 для MiniMax M3.1 Flash: полный JSON провайдера, реальная трасса вызовов инструментов и ошибки, которые обрывают продолжение.

Kiki, OmniaKey COO9 мин чтения
На этой странице

MiniMax M3.1 Flash работает в OpenCode v2.2.3 через собственный OpenAI-совместимый провайдер. Точное имя модели в OpenCode — omniakey/minimax-m3.1-flash, Base URL — https://api.omniakey.com/v1. С настройкой ниже 12 ноября 2026 года прошла реальная задача в репозитории: пять чтений, одна запись, один запуск node --test и 12 из 12 успешных тестов.

OpenCode общается с собственным провайдером в формате OpenAI Chat Completions, а OmniaKey отдаёт этот формат по адресу /v1. Вся настройка умещается в одном файле проекта, но результат решают три детали: ID модели должен совпадать с написанием OmniaKey, ключ должен быть виден процессу сервера OpenCode, а конфигурация провайдера должна сохранять поле рассуждений между вызовами инструментов.

Что подготовить перед началом

Используйте OpenCode V2. Проверенная версия — v2.2.3. В V2 собственные провайдеры лежат в объекте providers верхнего уровня; примеры для V1 устроены иначе. Перед копированием сверьтесь с документацией провайдеров V2 и выполните opencode --version.

  • OpenCode: v2.2.3, проверено 12 ноября 2026 года.
  • ID модели в OmniaKey: minimax-m3.1-flash.
  • Ссылка в OpenCode: omniakey/minimax-m3.1-flash.

Создайте ключ OmniaKey и положите его в OMNIAKEY_API_KEY. В JSON ниже указано только имя переменной, самого секрета там нет. Возьмите небольшой репозиторий с готовой командой тестов; в проверке использовался пример на Node с src/normalize.js, файлом тестов и тестовым скриптом.

Собственный API MiniMax использует ID со смешанным регистром MiniMax-M3.1-Flash. OmniaKey использует строчный minimax-m3.1-flash. В opencode.jsonc в обоих местах, в ключе карты models и в modelID, пишите строчный ID OmniaKey: при другом регистре он не совпадёт с ID OmniaKey.

Если вы ещё выбираете модель, в обзоре MiniMax M3.1 Flash собраны бенчмарки, данные о выпуске и постоянно включённые рассуждения.

Проверенная конфигурация OpenCode V2

Положите этот файл в корень проекта под именем opencode.jsonc. Это публичная форма конфигурации, использованной в запуске.

json
{
  "$schema": "https://opencode.ai/config.json",
  "model": "omniakey/minimax-m3.1-flash",
  "share": "disabled",
  "update": "disable",
  "warming": false,
  "snapshots": false,
  "enabled_providers": ["omniakey"],
  "providers": {
    "omniakey": {
      "name": "OmniaKey",
      "env": ["OMNIAKEY_API_KEY"],
      "package": "@opencode/ai/providers/openai-compatible",
      "settings": {
        "baseURL": "https://api.omniakey.com/v1"
      },
      "models": {
        "minimax-m3.1-flash": {
          "modelID": "minimax-m3.1-flash",
          "name": "MiniMax M3.1 Flash",
          "body": {
            "reasoning_effort": "medium",
            "max_tokens": 4096,
            "stream_options": {"include_usage": true}
          },
          "limit": {
            "context": 1000000,
            "output": 4096
          },
          "capabilities": {
            "tools": true,
            "input": ["text"],
            "output": ["text"],
            "freeform": [],
            "reasoning": {
              "supported": true,
              "effort": ["low", "medium", "high", "xhigh", "max"]
            }
          },
          "compatibility": {
            "reasoningField": "reasoning_content",
            "requireReasoning": true,
            "maxTokensField": "max_tokens"
          }
        }
      }
    }
  },
  "permissions": [
    {"action": "*", "resource": "*", "effect": "deny"},
    {"action": "read", "resource": "*", "effect": "allow"},
    {"action": "glob", "resource": "*", "effect": "allow"},
    {"action": "grep", "resource": "*", "effect": "allow"},
    {"action": "edit", "resource": "src/normalize.js", "effect": "allow"},
    {"action": "shell", "resource": "node --test", "effect": "allow"},
    {"action": "shell", "resource": "git diff *", "effect": "allow"},
    {"action": "external_directory", "resource": "*", "effect": "deny"}
  ]
}

Массив env говорит OpenCode, какую переменную с учётными данными читать: OMNIAKEY_API_KEY берётся из окружения процесса сервера. modelID — это ID, который уходит в OmniaKey, а ключ в карте models — ID, который OpenCode использует в ссылках provider/model. Если оба равны minimax-m3.1-flash, поиск остаётся однозначным.

Блоки limit и capabilities заменяют умолчания OpenCode для неизвестной модели. Иначе OpenCode предполагает контекст 200 000 токенов и приём изображений. Страница модели в OmniaKey указывает контекст 1M токенов и не упоминает зрение, поэтому в конфигурации стоит предел 1 000 000, а на входе только текст. 1M — это опубликованное окно, а не размер, который исчерпала эта небольшая задача.

В блоке body два проверенных значения: средний уровень рассуждений и предел max_tokens 4096. Список effort в capabilities — пять уровней из руководства MiniMax; в тесте использовался medium.

Блок permissions намеренно узкий для демонстрационного репозитория. Сначала всё запрещено, затем разрешены чтение, glob и grep, правка src/normalize.js, команда node --test и git diff. Внешние каталоги тоже запрещены. Замените путь и команды правилами своего проекта. Общее разрешение на правку или shell даёт агенту гораздо больше доступа, чем нужно ограниченной задаче.

Запуск с ключом в оболочке сервера

Обычно OpenCode запускает общий фоновый сервер или находит уже работающий. Этот сервер хранит сессии, конфигурацию и выполнение инструментов, а переменные env провайдера читает из своего окружения. Ключ, экспортированный в другом терминале, до него не доходит. Документация CLI OpenCode описывает общий сервер и флаг --standalone.

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

bash
export OMNIAKEY_API_KEY="your-omniakey-api-key"
opencode --standalone models

Проверенная команда models не принимает аргумент провайдера. Она выводит omniakey/minimax-m3.1-flash. Затем запустите одну задачу. В проверке использовались этот аргумент модели и блок промпта ниже; замените заметный заполнитель точным текстом:

bash
# Replace <task prompt> with the text from the prompt block below.
opencode --standalone run --model omniakey/minimax-m3.1-flash '<task prompt>'

Флаг --standalone запускает приватный сервер из этой оболочки, поэтому он наследует ключ и читает конфигурацию проекта. Общий сервер, запущенный раньше, видит только своё окружение. Строка с ключом выше — заполнитель; в файле конфигурации секрета по-прежнему нет.

Если общий сервер уже работает в окружении с OMNIAKEY_API_KEY, можно использовать его. Когда это окружение неясно, приватный сервер — воспроизводимый путь.

Проверка цикла чтения, записи и теста

Небольшого примера на Node достаточно, чтобы увидеть, работают ли вызовы инструментов. В примере были src/normalize.js с заглушкой, которая только сортировала, файл тестов на 12 случаев и скрипт node --test. До исправления проходили 3 теста, 9 падали.

Вот промпт из запуска, без изменений:

prompt
Fix src/normalize.js in this small JavaScript repository. Read the source and existing tests, then implement normalizeIntervals: accept valid half-open numeric intervals [start,end], drop empty intervals, sort them, and merge overlapping or touching ranges. Return fresh arrays without mutating the input. Do not change tests or configuration. Run `node --test` and summarize the result. Work only in this repository; do not read any credentials, network resources or files outside it. Use at most 8 tool calls.

Запуск дал семь операций инструментов в шести HTTP-запросах, все вернули 200:

ИнструментРазЧто охватил
read5Список репозитория, исходник, каталог тестов, package.json, файл тестов
write1src/normalize.js
shell1node --test

Первый ход отправил два чтения параллельно: список репозитория и исходник. Следующие два хода прочитали каталог тестов, файл пакета и файл тестов. Запись заменила исходник. Вызов shell запустил тесты. Весь запуск занял 70,172 секунды.

Тестовый вызов внутри цикла сообщил:

text
ℹ tests 12
ℹ suites 0
ℹ pass 12
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 52.316459

Финальный ответ назвал изменённый файл и результат 12/12. Шесть блоков usage в сумме дают 20 739 входных токенов, включая чтение префикса из кеша, и 803 выходных токена. Самое длинное завершение — 363 токена, так что предел 4096 не был достигнут.

Локальный процесс пересылки отправил тело запроса и потоковый ответ в OmniaKey без изменений. Это одна небольшая задача: она показывает, что цикл чтения, записи и теста работает в этом репозитории, а не сравнивает скорость или качество кода на любых проектах.

Как задать effort, контекст и лимит вывода

На M3.1 Flash рассуждения обязательны. Руководство MiniMax по генерации текста говорит, что модель думает всегда, а справка по OpenAI-совместимому API возвращает HTTP 400, если клиент отправляет thinking: {"type": "disabled"} или reasoning_effort: "none". Оставляйте рассуждения включёнными и снижайте effort, когда нужен более короткий ход.

НастройкаПроверенное значениеЧто регулирует
reasoning_effortmediumСколько модель думает перед ответом
max_tokens4096Предел вывода клиента на один вызов
limit.context1000000Опубликованное окно контекста

reasoning_effort принимает low, medium, high, xhigh и max; если параметр не указан, руководство MiniMax называет значением по умолчанию max. Для этой ограниченной задачи хватило medium. Снижение effort укорачивает рассуждения, но не выключает их.

Параметры сэмплирования на этой модели ничего не делают. Справка API MiniMax говорит, что M3.1 Flash всегда использует 1 и 0,95, поэтому убрать temperature и top_p чище, чем настраивать игнорируемые значения.

Контекст 1M токенов взят со страницы модели OmniaKey и из руководства MiniMax. Предел вывода 4096 — это выбранный для запуска клиентский предохранитель, а не опубликованный максимум провайдера. Токены рассуждений входят в этот предел, поэтому долгий ход может закончиться с finish_reason: "length" и почти без текста. Сначала снизьте effort, а предел повышайте, если задаче действительно нужно больше места.

Исправление ошибок ключа, ID и продолжения

Успешный запуск не дал ошибок. Список ниже опирается на связанную документацию OpenCode и MiniMax. Точный Base URL — https://api.omniakey.com/v1.

СимптомЧто проверитьКак исправить
401 или 403Есть ли OMNIAKEY_API_KEY в окружении сервера?Экспортируйте в оболочке, которая запускает OpenCode, или используйте --standalone; держите ключ вне JSON.
Model unavailable или модель не найденаКлюч карты и modelID оба равны minimax-m3.1-flash?Исправьте написание и регистр; не берите ID MiniMax-M3.1-Flash от провайдера; проверьте, что provider включён.
404 от шлюзаsettings.baseURL — это ровно адрес OmniaKey?Впишите точный Base URL выше и уберите лишний путь.
400 про adaptive thinkingКлиент отправил отключённые рассуждения или reasoning_effort: "none"?Уберите это и снизьте effort.
Остановка после первого вызова инструментаЗадано ли поле рассуждений? Есть ли оно в истории?Установите reasoningField в "reasoning_content" и повторите тот же промпт.
Пустой ответ, finish_reason: "length"Съедают ли рассуждения лимит вывода?Сначала снизьте effort, затем поднимите max_tokens.
Ошибка контекста на промпте в 300KOpenCode всё ещё считает по умолчанию 200K?Поставьте limit.context в 1000000 и сократите промпт.
Не проходит ввод изображения или PDFУказано ли зрение на странице OmniaKey?Отправляйте только текст, а файл сначала преобразуйте.

Продолжение может сломаться из-за конфигурации, хотя выглядит как проблема модели. Справка API MiniMax требует добавлять полный ответ assistant в следующие ходы, включая tool_calls и рассуждения из reasoning_content. Настройка reasoningField в OpenCode читает это поле из потока и восстанавливает его при отправке истории.

В этом запуске каждый последующий запрос нёс поле reasoning_content в сообщениях assistant с вызовом инструмента, все шесть запросов завершились, и каждый результат инструмента попадал в следующий ход.

Стоимость, права и следующие шаги

OmniaKey считает по токенам по текущим тарифам на странице модели. Шесть вызовов использовали 20 739 входных токенов, включая чтение префикса из кеша, и 803 выходных токена. Чтобы оценить похожую задачу, разделите расход на вход без кеша, вход из кеша и выход, затем умножьте каждую часть на её текущий тариф. Общий вход нельзя умножить на одну ставку.

В своём репозитории начните с запрета всего и добавьте только те папки и команды, которые нужны задаче. Оставьте право правки на файлах, которые задача меняет, а право shell — на команде тестов. Именно эту часть переписывают для каждого проекта; блоки провайдера и модели можно не трогать.

Та же схема с ключом и Base URL подходит другим клиентам. Руководство по настройке Claude Code от OmniaKey описывает этот клиент, а документация по агентам для кода перечисляет шаги для каждого инструмента.

Частые вопросы

Подходит ли эта конфигурация для OpenCode V1?

Проверена версия OpenCode v2.2.3, и конфигурация использует объект providers во множественном числе из V2. В V1 другая форма, поэтому сверьте версию, прежде чем копировать её в старую установку.

Нужен ли opencode --standalone models фильтр провайдера?

Нет. Проверенная команда — ровно opencode --standalone models, без аргумента провайдера. Она выводит omniakey/minimax-m3.1-flash.

Можно ли отправлять изображения или PDF в эту модель через OmniaKey?

Страница модели OmniaKey не указывает зрение, и проверенная конфигурация объявляет только текстовый вход. Отправляйте текст, а изображения и PDF сначала преобразуйте. Исходная модель MiniMax принимает изображения, но это не добавляет ввод изображений на страницу модели в OmniaKey.

Можно ли поднять max_tokens выше 4096?

Да, клиентский предел можно увеличить. 4096 — проверенное значение, и текущие страницы не называют жёсткий максимум для этой модели. Рассуждения входят в предел, поэтому следите за обрывом по длине или пустым ответом; сначала снизьте effort, затем поднимайте предел.

Проверенные источники

Модели в этой статье

MiniMax M3.1 FlashOpenCodeагенты для кодавызовы инструментовOmniaKey

Похожие статьи

Недавние статьи

Популярные руководства