MiniMax M3.1 Flash в OpenCode: проверенная настройка и вызовы инструментов
Проверенная настройка OpenCode v2.2.3 для MiniMax M3.1 Flash: полный JSON провайдера, реальная трасса вызовов инструментов и ошибки, которые обрывают продолжение.
На этой странице
- Что подготовить перед началом
- Проверенная конфигурация OpenCode V2
- Запуск с ключом в оболочке сервера
- Проверка цикла чтения, записи и теста
- Как задать effort, контекст и лимит вывода
- Исправление ошибок ключа, ID и продолжения
- Стоимость, права и следующие шаги
- Частые вопросы
- Подходит ли эта конфигурация для OpenCode V1?
- Нужен ли opencode --standalone models фильтр провайдера?
- Можно ли отправлять изображения или PDF в эту модель через OmniaKey?
- Можно ли поднять max_tokens выше 4096?
- Проверенные источники
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. Это публичная форма конфигурации, использованной в запуске.
{
"$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.
Для предсказуемого первого запуска поднимите приватный сервер из оболочки, где есть ключ:
export OMNIAKEY_API_KEY="your-omniakey-api-key"
opencode --standalone models
Проверенная команда models не принимает аргумент провайдера. Она выводит omniakey/minimax-m3.1-flash. Затем запустите одну задачу. В проверке использовались этот аргумент модели и блок промпта ниже; замените заметный заполнитель точным текстом:
# 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 падали.
Вот промпт из запуска, без изменений:
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:
| Инструмент | Раз | Что охватил |
|---|---|---|
read | 5 | Список репозитория, исходник, каталог тестов, package.json, файл тестов |
write | 1 | src/normalize.js |
shell | 1 | node --test |
Первый ход отправил два чтения параллельно: список репозитория и исходник. Следующие два хода прочитали каталог тестов, файл пакета и файл тестов. Запись заменила исходник. Вызов shell запустил тесты. Весь запуск занял 70,172 секунды.
Тестовый вызов внутри цикла сообщил:
ℹ 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_effort | medium | Сколько модель думает перед ответом |
max_tokens | 4096 | Предел вывода клиента на один вызов |
limit.context | 1000000 | Опубликованное окно контекста |
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. |
| Ошибка контекста на промпте в 300K | OpenCode всё ещё считает по умолчанию 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, затем поднимайте предел.
Проверенные источники
- OpenCode Providers — проверено 12 ноября 2026 года
- OpenCode Models — проверено 12 ноября 2026 года
- OpenCode CLI — проверено 12 ноября 2026 года
- Руководство MiniMax по генерации текста — проверено 12 ноября 2026 года
- Справка MiniMax по OpenAI-совместимому API — проверено 12 ноября 2026 года
- OmniaKey: MiniMax M3.1 Flash — проверено 12 ноября 2026 года
Модели в этой статье
Похожие статьи
Обзор MiniMax M3.1 Flash: бенчмарки, скорость и сравнение с M3
Вдвое ниже цена за токен и выше индекс, но она думает при каждом вызове. Мы прогнали обе модели бок о бок на пяти задачах.
Лучшая LLM для кодинг-агентов в 2026: Claude vs GPT vs Gemini
Единственной «лучшей» модели для кода нет: у каждой из трёх — Claude, GPT, Gemini — своя сильная сторона. Как они сравниваются по вызову инструментов, контексту и стоимости и почему маршрутизация выигрывает у ставки на одну.
Claude Code с OmniaKey
Направьте Claude Code на эндпоинт OmniaKey с нативным Anthropic API — две переменные окружения, модели Claude без молчаливой подмены, оплата за токены без месячной подписки.