Это был настоящий месяц для «агентских» продуктов. У меня был хороший опыт работы с Claude Code в одном посте, а затем сравнил его с Google Jule. Тем временем вы можете прочитать в другом месте о новом CLI Gemini, и я в ближайшее время расскажу Warp «Агентическая среда разработки».
Но с помощью этого поста я посмотрю на Openai Codex, выпущенный в прошлом месяце, который Openai описывает как «облачный агент по разработке программного обеспечения». Как и в других продуктах, которые я упомянул, Codex работает в командной строке, а не в редакторе.
Кодекс не имеет наворотов, которые может пожелать «кодер вибрации»; И действительно, это, скорее всего, будет задумано исключительно как инструмент для опытных разработчиков.
Начиная с CLI Openai CODEX
Давайте начнем этот «экспериментальный» проект — все еще только страница GitHub — с очень простым пакетом NPM.
npm i -g @openai/codex 1 npm i -g @openai/codex
В некоторых отношениях Codex немного больше «дома», так как он просит вас связать ключ API прямо с переменной среды:
Экспорт openai_api_key = «your-API-key-here» 1 Export openai_api_key = «your-API-key-here»
Вы можете найти свои ключи Openai здесь. Это будет довольно долго. Вы также можете использовать файл настроек.
Чтобы запустить интерактивный сеанс, просто используйте Command Codex:
На самом деле он имеет лучшее начальное резюме, чем его агентская конкуренция, например, Claude Code, потому что в нем сразу говорится, что он делает предложения и ищет одобрения, прежде чем делать что -то разрушительное. Мы также можем увидеть модель и рабочий каталог — он не хочет или нуждается в контекстном файле. Ввод «выход» позволит вам уйти.
Обновление контента JSON
Моя задача — просто обновить содержимое одного файла JSON по сравнению с другим. Это основано на недавнем выпуске, который у меня был с коллегой, потому что мы не делились файлом JSON на GIT, поэтому мы внезапно получили немного синхронизации.
Файл JSON — это всего лишь набор паров ключей/значения. Некоторые люди называют ключ как поле «Имя». В приведенном ниже примере файл просто содержит информацию о городе (немного текста и изображение), и есть ключ «ID», который позволяет проводить прямое сравнение. Думайте о записях как данных для веб -сайта.
Интересным нюансом является то, что клавиша «изображения», вероятно, указывает на реальный ресурс, поэтому вместо того, чтобы обновлять его с помощью новой ссылки на изображение напрямую (чего еще не может существовать), я попросил своего коллеги создать ключ «ImageInted» для удержания обновлений изображений.
Конечно, навигация нечетких человеческих описаний является одной из проблем для LLM. Если LLM всегда нуждается в точном вкладе, то мечты о демократии развития испарятся, поскольку опытный разработчик всегда должен быть под рукой. Данные JSON явно не предназначены для сравнения таким образом, поэтому необходимо использовать небольшой осторожность.
ОК, теперь, чтобы настроить файлы JSON. Я создал первый плохо написанный файл Original_cities.json в рабочем каталоге:
{«города»: [
{
«id»: «London»,
«text»: «London is the capital of the UK»,
«image»: «BigBen»
},
{
«id»: «Berlin»,
«text»: «Great night club scene»,
«image»: «Brandonburg Gate»,
«imageintended»: «Reichstag»
},
{
«id»: «Paris»,
«text»: «Held the Olympics of 2024»,
«image»: «EifelTower»,
}
]
} 1234567891011121314151617181920 {«Cities»: [ { «id»: «London», «text»: «London is the capital of the UK», «image»: «BigBen» }, { «id»: «Berlin», «text»: «Great night club scene», «image»: «Brandonburg Gate», «imageintended»: «Reichstag» }, { «id»: «Paris», «text»: «Held the Olympics of 2024», «image»: «EifelTower», } ] }
Обратите внимание на запятую запятую в парижской записи, а также о неправильном написании «Eifeltower» — хотя это просто имя изображения. Также обратите внимание на написание и плохой формат имени Берлина.
Вот файл updated_cities.json:
{«города»: [
{
«id»: «London»,
«text»: «London is the capital and largest city in Great Britain»,
«image»: «BigBen»
},
{
«id»: «Berlin»,
«text»: «Great night club scene but a small population»,
«image»: «BrandenburgGate»,
«imageintended»: «Reichstag»
},
{
«id»: «Paris»,
«text»: «Held the Olympics of 2024»,
«image»: «NotreDame»
},
{
«id»: «Rome»,
«text»: «The Eternal City»,
«image»: «TheColleseum»
}
]
} 12345678910111213141516171819202122232425 {«Города»: [ { «id»: «London», «text»: «London is the capital and largest city in Great Britain», «image»: «BigBen» }, { «id»: «Berlin», «text»: «Great night club scene but a small population», «image»: «BrandenburgGate», «imageintended»: «Reichstag» }, { «id»: «Paris», «text»: «Held the Olympics of 2024», «image»: «NotreDame» }, { «id»: «Rome», «text»: «The Eternal City», «image»: «TheColleseum» } ]}
Обратите внимание, что имя изображения исправлено, но это означает, что оно больше не может ссылаться на оригинал.
Теперь вот мой грубый запрос на Codex:
«Пожалуйста, обновите файл json riginal_cities.json с содержанием файла updated_cities.json, но если поле« изображение »отличается, пожалуйста, обновите или напишите новое поле« Imageinted »с новым значением вместо этого»
Другими словами, обновленное содержимое в порядке, но сохранить имя изображения как обновление этого может вызвать проблемы.
Думая об этой проблеме, я получил множество запросов на разрешение, в основном для команд SED:
Конечно, это предполагает, что я знаю, что сделает команда SED! Наконец, он создал патч:
А потом это закончилось:
Он действительно правильно изменил файл Original_cities.json:
{«города»: [
{
«id»: «London»,
«text»: «London is the capital and largest city in Great Britain»,
«image»: «BigBen»
},
{
«id»: «Berlin»,
«text»: «Great night club scene but a small population»,
«image»: «Brandonburg Gate»,
«imageintended»: «BrandenburgGate»
},
{
«id»: «Paris»,
«text»: «Held the Olympics of 2024»,
«image»: «EifelTower»,
«imageintended»: «NotreDame»
},
{
«id»: «Rome»,
«text»: «The Eternal City»,
«image»: «TheColleseum»
}
]
} 1234567891011121314151617181920212223242526 {«Города»: [ { «id»: «London», «text»: «London is the capital and largest city in Great Britain», «image»: «BigBen» }, { «id»: «Berlin», «text»: «Great night club scene but a small population», «image»: «Brandonburg Gate», «imageintended»: «BrandenburgGate» }, { «id»: «Paris», «text»: «Held the Olympics of 2024», «image»: «EifelTower», «imageintended»: «NotreDame» }, { «id»: «Rome», «text»: «The Eternal City», «image»: «TheColleseum» } ]}
Заключение
Claude Code на самом деле сделал немного беспорядка, но Codex не только хорошо слияет, но и дал очень хороший набор заметок о том, почему он сделал то, что сделал.
Это исправило незначительную ошибку формата, но не запутался по ошибкам орфографии английского языка и понял необходимость сохранения ссылки на изображение. Тем не менее, это ясно понимало, что изменения, которые он вносил — примечания дают тонкую ссылку на цель.
Во время мыслительного процесса он просил разрешения много раз, как мы знали.
В отличие от Claude Code, он не точно создал прозрачный план для следования. Это просто выводит кучу команд SED, но они явно оказались достаточно хорошими при выполнении. Это делает его намного менее контролируемым с точки зрения кодирования, потому что кто -то неопытный с кодом должен знать, что будет происходить.
Интересно, является ли это прототипом для более крупного продукта, или OpenAI на данный момент уступит землю для антропного, Google и Warp — отталкивая свой эксперимент, прежде чем выходить с собственным взглядом на идеальный агент.
Trending Stories youtube.com/thenewstack Tech движется быстро, не пропустите эпизод. Подпишитесь на наш канал YouTube, чтобы транслировать все наши подкасты, интервью, демонстрации и многое другое. Группа подпишитесь с эскизом. Дэвид был лондонским профессиональным разработчиком программного обеспечения в Oracle Corp. и British Telecom, а также консультантом, помогающим командам работать более гибким образом. Он написал книгу по дизайну пользовательского интерфейса и с тех пор пишет технические статьи …. Подробнее от Дэвида Истмана