Реверс-инжиниринг интерфейса командной строки Codex, чтобы заставить GPT-5-Codex-Mini нарисовать мне пеликана

Реверс-инжиниринг интерфейса командной строки Codex, чтобы заставить GPT-5-Codex-Mini нарисовать мне пеликана

9 ноября 2025 г.

Вчера OpenAI частично выпустила новую модель под названием GPT-5-Codex-Mini, которую они описывать как «более компактная и экономичная версия GPT-5-Codex». В настоящее время он доступен только через инструмент Codex CLI и расширение VS Code с надлежащим доступом к API.вскоре«Я решил использовать Codex для обратного проектирования инструмента Codex CLI и дать мне возможность напрямую подсказывать новую модель.

я сделал видео рассказываю о своем прогрессе и демонстрирую окончательные результаты.

Это немного дерзко

OpenAI явно пока не намерен предоставлять людям прямой доступ к этой модели. Он доступен исключительно через Codex CLI, который является привилегированным приложением: он получает доступ к специальной конечной точке внутреннего API, которая не документирована публично, и использует специальный механизм аутентификации, который выставляет счета за использование непосредственно существующей учетной записи ChatGPT пользователя.

Я решил, что заниматься реверс-инжинирингом этого API напрямую было бы несколько невежливо. Но… Codex CLI — это проект с открытым исходным кодом, выпущенный под лицензией Apache 2.0. Как насчет обновления, чтобы вместо этого я мог запускать собственные запросы через существующие механизмы API?

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

Codex CLI написан на Rust.

опенай/кодекс Репозиторий содержит исходный код инструмента Codex CLI, который OpenAI переписал на Rust всего несколько месяцев назад.

Я совсем не знаю Раст.

Я сделал свой собственный клон на GitHub и проверил его локально:

git clone [email protected]:simonw/codex
cd codex

Затем я запустил сам Кодекс (в опасном режиме, потому что мне нравится жить опасно):

codex --dangerously-bypass-approvals-and-sandbox

И запустил эту подсказку:

Выясните, как собрать версию этого инструмента на Rust, а затем соберите ее.

Это сработало. Он немного поработал и понял, как построить себя. Это полезная отправная точка для такого проекта: при определении этапа компиляции агент кодирования получает немного соответствующей информации о проекте, и если он может скомпилировать, это означает, что он может позже частично протестировать код, который он пишет, пока он работает.

После успешной компиляции я передал ему дизайн новой функции, которую хотел:

Добавьте новую подкоманду в инструмент Rust под названием «подсказка кодекса».

Подсказка кодекса «подсказка идет здесь» — данная подсказка запускается непосредственно с API OpenAI, который использует Кодекс, с тем же путем к коду и учетными данными аутентификации, что и остальная часть Кодекса.

подсказка кодекса -m «Здесь идет подсказка» — то же самое, но позволяет вам установить модель

подсказка кодекса «Здесь идет подсказка» -s/–system «Здесь идет системная подсказка» — запускается с пользовательским сообщением системы/разработчика

подсказка кодекса –models — здесь перечислены все доступные модели, которые можно использовать с командой «подсказка кодекса».

Моя конструкция этой новой подкоманды взята непосредственно из моей собственной. команда ллм.

Read more:  Asylum Hotel Protest Live: Анти-мигрантские толпы, чтобы спуститься на Epping и London Hotel | Великобритания | Новости

Итерация кода

Кодекс приступил к работе. у меня есть поделился полной стенограммой здесь (с помощью инструмента Я описал здесь), но этот список TODO, который он составил сам, представляет собой полезное резюме того, что он решил сделать:

Updated Plan
└ ✔ Inspect CLI structure and relevant core utilities for sending prompts and listing models
  ✔ Implement new `codex prompt` subcommand (CLI plumbing + command handler)
  ✔ Format, lint, and test (`just fmt`, `just fix -p codex-cli`, `cargo test -p codex-cli`)

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

Я попробовал запустить первую версию написанного кода следующим образом:

./target/debug/codex prompt 'Generate an SVG of a pelican riding a bicycle' -m gpt-5-codex-mini

… и это не совсем сработало. Я получил это:

(reasoning summary) **Seeking
(reasoning summary)  instructions
(reasoning summary)  and
(reasoning summary)  sandbox
(reasoning summary)  info
(reasoning summary) **
(reasoning summary) **Dec
(reasoning summary) iding
(reasoning summary)  on
(reasoning summary)  SVG
(reasoning summary)  creation
(reasoning summary)  approach
(reasoning summary) **
(reasoning summary) **Checking
(reasoning summary)  current
(reasoning summary)  directory
(reasoning summary) **
(reasoning summary) **Preparing
(reasoning summary)  to
(reasoning summary)  check
(reasoning summary)  current
(reasoning summary)  directory
(reasoning summary) **
I�m ready to help�what would you like me to do next?I�m ready to help�what would you like me to do next?
Token usage: total=2459 input=2374 cached_input=0 output=85 reasoning_output=64

Обратите внимание, что он ДЕЙСТВИТЕЛЬНО думал о создании SVG, но затем решил, что ему следует просмотреть текущий каталог. Это не то, что мне нужно: похоже, он работает в обычном режиме Codex с системным приглашением, требующим редактирования файлов на диске. Я хотел, чтобы он реагировал на приглашение, не действуя так, как будто ему было доступно полное рабочее пространство.

Read more:  Россия, Вьетнам, используя нефтяную прибыль, чтобы избежать санкций США на сделки с оружием - United24 Media

Я повторил запрос, вставив неверный вывод:

похоже, это не сработало — вот что произошло — обратите внимание, что краткое изложение рассуждений выводится на множество строк, тогда как я бы предпочел, чтобы оно вытекало в stderr в той же строке (постоянно сбрасывается) — а затем, несмотря на то, что краткое изложение рассуждений думало о пеликане в SVG, оно на самом деле не отреагировало на это и не отобразило результат, что очень удивительно. [pasted content]

Он потребовал еще немного, но судя по выводам, он все еще пытался включить специфичные для Кодекса инструменты и информацию о рабочем пространстве. Поэтому я сказал:

Обратите внимание, что эта новая команда «подсказки кодекса» вообще НЕ должна иметь возможность запускать какие-либо инструменты и не должна думать о рабочей области или песочнице — она должна отправлять одно приглашение без инструментов, а затем транслировать и отображать ответ, а затем останавливаться.

Это дало мне новую сборку, но когда я ее запустил:

Error: unexpected status 400 Bad Request: {"detail":"Instructions are not valid"}

Я предполагаю, что пользовательскому внутреннему API OpenAI для Кодекса не понравится, если вы попытаетесь вызвать его. без передавая ожидаемые инструкции. Справедливо!

Вместо того, чтобы вставлять эту ошибку, я попросил Кодекс попробовать выполнить команду самостоятельно, чтобы он мог увидеть ошибку:

Вы попробуйте запустить это и посмотрите, что произойдет: ./target/debug/codex приглашение «Создать SVG с изображением пеликана, едущего на велосипеде»

Кодекс вернулся к инструкциям по умолчанию. Из его ответа:

cli/src/prompt_cmd.rs#L1-L320 теперь принудительно выполняет запрос без использования инструментов: мы сохраняем настройки рабочей области по умолчанию, вводим облегченное сообщение системы/разработчика («не запускать инструменты»), отключаем apply_patch/веб-поиск с помощью переопределений конфигурации и создаем исходящее приглашение как просто этот системный диапазон плюс пользовательский текст.

Думаю, это придется сделать. Я попросил еще одну функцию:

Добавьте параметр –debug в команду приглашения кодекса, которая приводит к печати полного запроса и ответа JSON в stderr, а также URL-адреса, к которому осуществляется доступ, и команды HTTP.

… и мы готовы опробовать эту штуку!

Примечательно, что я сам не написал здесь ни строчки о Rust и почти не обратил внимания на то, что он на самом деле делает. Моим главным вкладом было время от времени запускать двоичный файл и проверять, делает ли он то, что мне нужно.

Read more:  Венера Уильямс взволнована, чтобы продлить свой собственный рекорд на Us Open

Я отправил рабочий код в ветка подкоманды подсказки в моем репозитории если вы хотите посмотреть и посмотреть, как все это работает.

Давайте нарисуем пеликанов

Создав окончательную версию кода, я нарисовал несколько пеликанов. Вот полная расшифровка терминалано вот некоторые основные моменты.

Это модель GPT-5-Codex по умолчанию:

./target/debug/codex prompt "Generate an SVG of a pelican riding a bicycle"

я вставил это в свой инструменты.simonwillison.net/svg-render инструмент и получил следующее:

Я запустил его еще раз для GPT-5:

./target/debug/codex prompt "Generate an SVG of a pelican riding a bicycle" -m gpt-5

Гораздо лучший велосипед, «Пеликан» немного напоминает рисование линий, но в нем есть необходимые детали в нужных местах.

И вот момент истины… Кодекс GPT-5 Mini!

./target/debug/codex prompt "Generate an SVG of a pelican riding a bicycle" -m gpt-5-codex-mini

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

Я не думаю, что добавлю его в свой набор инструментов для рисования SVG в ближайшее время.

Бонус: опция –debug

Я попросил Кодекс добавить --debug вариант, который поможет мне увидеть, что именно происходит.

./target/debug/codex prompt -m gpt-5-codex-mini "Generate an SVG of a pelican riding a bicycle" --debug

Вывод начинается так:

[codex prompt debug] POST https://chatgpt.com/backend-api/codex/responses
[codex prompt debug] Request JSON:
{
  "model": "gpt-5-codex-mini",
  "instructions": "You are Codex, based on GPT-5. You are running as a coding agent ...",
  "input": [
    {
      "type": "message",
      "role": "developer",
      "content": [
        {
          "type": "input_text",
          "text": "You are a helpful assistant. Respond directly to the user request without running tools or shell commands."
        }
      ]
    },
    {
      "type": "message",
      "role": "user",
      "content": [
        {
          "type": "input_text",
          "text": "Generate an SVG of a pelican riding a bicycle"
        }
      ]
    }
  ],
  "tools": [],
  "tool_choice": "auto",
  "parallel_tool_calls": false,
  "reasoning": {
    "summary": "auto"
  },
  "store": false,
  "stream": true,
  "include": [
    "reasoning.encrypted_content"
  ],
  "prompt_cache_key": "019a66bf-3e2c-7412-b05e-db9b90bbad6e"
}

Это показывает, что частная конечная точка API OpenAI для интерфейса командной строки Codex https://chatgpt.com/backend-api/codex/responses.

Также интересно, как "instructions" ключ (усеченный выше, полная копия здесь) содержит инструкции по умолчанию, без которых API не работает, но также показывает, что вы можете отправить сообщение с помощью role="developer" перед приглашением пользователя.

2025-11-09 04:02:00


1762666385
#Реверсинжиниринг #интерфейса #командной #строки #Codex #чтобы #заставить #GPT5CodexMini #нарисовать #мне #пеликана

По теме

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.