Не работают инструменты GPT‑6.1 Sol? Перенос полного цикла на Responses
Исправьте интерфейс и параметры GPT‑6.1 Sol, сохраните call_id и состояние, проверьте аргументы и ограничьте цикл. Полный Python-пример и офлайн-тесты.
Если после замены имени модели на gpt-6.1-sol перестали работать инструменты, сначала проверьте интерфейс, а не промпт. Для вызова инструментов GPT‑6.1 Sol нужен Responses API. Chat Completions поддерживается без вызова инструментов. Уровни рассуждений none и minimal также не поддерживаются. Замена только имени модели может оставить несовместимый запрос.
Здесь разобран полный цикл чтения учебного склада: запрос, вызов функции, выполнение в приложении и возврат результата. Python-файл включает офлайн-тесты с синтетическими ответами. Они проверяют нашу логику, а не платный API и не качество модели. Технические условия сверены 30 сентября 2026 года со страницей модели, руководством по миграции и документацией функций.
Найдите слой, на котором произошёл сбой
Клиент собирает запрос; API возвращает структурированный вызов; приложение исполняет разрешённую функцию; затем передаёт результат модели. Фраза «инструменты не работают» не различает эти четыре этапа.
| Симптом | Что проверить | Действие |
|---|---|---|
| Запрос отклонён до вывода | Интерфейс и поля | Responses и совместимые параметры |
| Только текст вместо вызова | Переданы ли tools, инструкции и выбор инструмента | Просмотреть структурированный output |
| Вызов есть, исполнения нет | Диспетчер приложения | Исполнить функцию из разрешённого списка |
| Следующий шаг не связывает результат | call_id и история | Вернуть исходный ID и сохранить элементы |
| Цикл повторяется | Ошибки, недостающие данные, лимит | Явный результат ошибки и граница повторов |
| Интерфейс пишет «готово» без результата | Условие успеха | Потребовать подтверждение реального выполнения |
Не повторяйте запрос до определения категории ошибки. Неподдерживаемое поле не станет допустимым с пятой попытки. Ошибка авторизации также требует другого решения, чем ограничение частоты.

Настоящий снимок английской документации. Он подтверждает ограничение API, но не запуск складской функции.
Измените структуру запроса
В определении функции Responses поля находятся непосредственно в объекте инструмента. Обёртку function из Chat Completions нельзя переносить без изменений:
tool = {
"type": "function",
"name": "lookup_stock",
"description": "Read stock for one known product SKU.",
"parameters": {
"type": "object",
"properties": {"sku": {"type": "string"}},
"required": ["sku"],
"additionalProperties": False,
},
"strict": True,
}
Минимальный запрос использует client.responses.create, input, reasoning={"effort": "medium"} и подходящий max_output_tokens. Для Sol допустимы low, medium, high, xhigh, max. Название Ultra в продукте не является допустимой строкой API.
Руководство по миграции требует убрать несовместимые параметры выборки для этих запросов, включая temperature, top_p, top_logprobs, а также соответствующие запросы выходных log probabilities. Прокси или SDK могут добавить значение по умолчанию. Если ошибка называет поле, проверьте окончательную конфигурацию, а не только строку с моделью. В диагностике храните маршрут, модель, названия параметров, статус и ID запроса без секретов.
Запустите полный пример только для чтения
Скачайте tool_loop.py. В нём есть схема, два вымышленных товара, проверка аргументов, диспетчер, ограниченный цикл и тесты. Это учебные данные, а не реальные остатки.
С Python 3.9 или новее сначала выполните:
python3 tool_loop.py --self-test
Ожидается offline checks passed. Этот режим использует стандартную библиотеку, не читает API-ключ, не устанавливает клиент и не обращается к сети. Проверяются корректный вызов, повреждённый JSON, неверные аргументы, неизвестные функция и SKU, незавершённый ответ, лимит раундов и запрет ложного успеха.
Для необязательного платного запуска в своём разрешённом API-проекте:
python3 -m venv .venv
. .venv/bin/activate
python -m pip install --upgrade openai
# Задайте OPENAI_API_KEY в окружении; не сохраняйте ключ в репозитории.
python tool_loop.py --live
Режим --live создаёт оплачиваемое использование API и требует доступа к модели. Для статьи он не запускался. Скрипт явно задаёт официальный адрес OpenAI, чтобы сторонняя переменная base URL не изменила маршрут. Он запрашивает DEMO-A, для которого локальный образец содержит 12 единиц. Успех требует настоящего lookup_stock, соответствующего результата и финального ответа с правильным количеством. Одной убедительной фразы недостаточно.
Сохраните версию SDK своего запуска. Команда установки берёт актуальный официальный пакет, а не означает, что эта среда прошла здесь платный интеграционный тест.
Сохраните элементы ответа и исходный call_id
Ключевые действия цикла:
history.extend(response.output)
for call in calls:
result = dispatch(call.name, call.arguments)
history.append({
"type": "function_call_output",
"call_id": call.call_id,
"output": json.dumps(result),
})
Сохраняйте весь response.output, включая необходимые элементы рассуждений. Нельзя восстановить полный протокол из response.output_text: текст — лишь часть ответа. Нескольким вызовам нужны отдельные результаты с их собственными ID. Имя функции не заменяет ID, и приложение не должно придумывать новый идентификатор.
Пример повторно отправляет накопленную историю и не добавляет previous_response_id. Допустим и документированный способ со ссылкой на прошлый ответ, но смешивать его с полным повтором, не зная сохранённого состояния, опасно дублированием контекста. Выберите один способ и проверьте следующий вход.
Если вызовов больше нет, скрипт требует завершённый статус, непустой текст и ранее полученный корректный результат DEMO-A=12. Неизвестная функция или SKU не засчитываются. При этом соответствие итоговой естественной фразы данным нужно проверить отдельно. Отказ, незавершённость, сетевой сбой и пустой вывод не превращаются в сообщение об успехе.
Проверка аргументов остаётся обязанностью приложения
Строгая схема помогает ограничить аргументы, но не заменяет проверку сервера и не предоставляет полномочий. Диспетчер разбирает JSON, требует ровно одно строковое поле sku и допускает только известную функцию. Для отсутствующего товара возвращается структурированный unknown_sku. Команды оболочки, предложенные моделью, не исполняются, а текст инструмента не становится новой инструкцией.
В учебном примере ошибка возвращается как небольшой объект, который модель может обработать. В сервисе дополнительно регистрируйте категорию и останавливайте повторяющееся недопустимое действие. Не отправляйте модели всю базу или приватный traceback, если задаче достаточно короткого результата.
Для записи нужны отдельные меры. После тайм-аута действие могло уже завершиться на сервере; повтор способен выполнить его дважды. Нужны ID операций, устойчивое состояние и подходящее согласование платежей, удаления или развёртывания. Пример намеренно только читает данные: он обучает протоколу, а не решает все вопросы авторизации записей.
Ограничьте время, раунды и бюджет
Число модельных раундов ограничено. Для учебного запуска через реальный API заданы тайм-аут SDK и отключение автоматических повторов, чтобы сбои были видимыми. Это учебные настройки, не универсальные параметры продакшена.
Лимит раундов не является денежным лимитом. В каждом обращении разное количество данных, история может пересечь порог длинного контекста. Для сервиса добавьте журнал и бюджет по руководству стоимости.
Временную сетевую ошибку или ограничение частоты можно повторять с задержкой и в пределах остатка бюджета. Неверное поле, неподдерживаемый интерфейс или недоступная модель сначала требуют исправления причины. При тайм-ауте функции нельзя угадывать остаток. При исчерпании раундов верните незавершённую задачу с диагностическими ID.
Приёмка перед заменой старого пути
В изолированном проекте подтвердите фактический маршрут Responses и модель, структурированный вызов, исполнение разрешённой функции, сохранённые элементы и точный ID результата следующего шага. Сверьте финальный ответ с образцом. Затем перенесите намеренные сбои из офлайн-набора в интеграционные проверки.
Оставьте обратимую конфигурацию модели и интерфейса. Не меняйте одновременно промпт, инструменты и разрешения: иначе источник регрессии будет неясен. Общий переход на Sol (на английском) рассматривает решение об обновлении, а настройка Codex — продуктовый клиент. Они не заменяют проверку собственного API-цикла.


