так модель будет всегда идти в обход чего-то кастомного в пользу того что она умеет, а она намного лучше умеет использовать существующие команды типа "cat/head/sed/grep/find/rg/python" чем то что вы опишите в промпте или будете лимитировать ограничениями своего шелла
если делать более умную обертку - модель вообще сойдет сума, потому что она будет ждать ожидаемый результат от shell команд - а получая кастомный результат, будет действовать на ошибочных выводах - привет бесконечный цикл ошибок и попыток
прямо запрет не работает, увы. точнее он работает в начале, когда контекста мало, пока модель еще не потупела, а когда контекста уже становится заметно, она быстро сдается встретив такие жесткие рамки - и либо крутит по кругу попытки обойти ограничения пока не упрется в лимит вызовов, либо просто начинает текстом объяснять вместо того чтобы делать
такое же можно наблюдать и у зрелых агентов, только вчера наблюдал как Claude Code на Opus 4.6 пытался менять файлы через sed -i.
вот это вы токенов потратили на то чтобы сказать то что и так написано в статье: это поделка, учебный пет-проект, конечно там много чего нет и миллион компромиссов
Codex использует немного модифицированный Unified Diff (тот что уже сто лет использует git) - поэтому OpenAI модели очень хорошо умеют под него генерировать изменения, даже множественных файлов в одном вызове - с этим не было проблем. И на сколько понимаю это стандарт, все модели стараются уметь под него генерировать патч. Вот так же сделано и в OpenCode который использует это для разных моделей.
А избавится от использования шелла полностью конечно ж не получается, причем чем больше контекста, тем более вероятно модель будет использовать только shell - в codex/opencode в общем то такая же проблема (видно по трейсам последнем скрине)
а еще поле фиксированной длинны не покинет кластерный индекс, а вот VARCHAR будет заменено ссылкой на диск, в случае если размер строки начнет превышать выделенный лимит я пытался это воспроизвести - но не получилось продемонстрировать разницу
Спасибо за столь детальный анализ! Со многим согласен.
Примеры 1-4: Вижу только как вы сами написали бы их и что упомянули бы, кажется, это окей - спасибо за дополнение ?
Пример 5: Расскажите, пожалуйста, как возможно это сделать ОДНИМ запросом?
Пример 6: Тут, похоже, вы меня не так поняли - место в таблице с NULLable полями экономится только в сравнении с указанием DEFAULT значения (например 0 или '') вместо NULL
понимаю вас! это и есть тот самый ад создания песочницы для LLM который я и пытался донести в статье =)
так модель будет всегда идти в обход чего-то кастомного в пользу того что она умеет, а она намного лучше умеет использовать существующие команды типа "cat/head/sed/grep/find/rg/python" чем то что вы опишите в промпте или будете лимитировать ограничениями своего шелла
если делать более умную обертку - модель вообще сойдет сума, потому что она будет ждать ожидаемый результат от shell команд - а получая кастомный результат, будет действовать на ошибочных выводах - привет бесконечный цикл ошибок и попыток
прямо запрет не работает, увы. точнее он работает в начале, когда контекста мало, пока модель еще не потупела, а когда контекста уже становится заметно, она быстро сдается встретив такие жесткие рамки - и либо крутит по кругу попытки обойти ограничения пока не упрется в лимит вызовов, либо просто начинает текстом объяснять вместо того чтобы делать
такое же можно наблюдать и у зрелых агентов, только вчера наблюдал как Claude Code на Opus 4.6 пытался менять файлы через sed -i.
Все верно! Именно так и сделано 👍
полностью поддерживаю, спасибо!
вот это вы токенов потратили на то чтобы сказать то что и так написано в статье: это поделка, учебный пет-проект, конечно там много чего нет и миллион компромиссов
именно такой и был посыл в статье!
то что все пишут что это простой цикл с вызовом тулов - большое заблуждение
Codex использует немного модифицированный Unified Diff (тот что уже сто лет использует git) - поэтому OpenAI модели очень хорошо умеют под него генерировать изменения, даже множественных файлов в одном вызове - с этим не было проблем. И на сколько понимаю это стандарт, все модели стараются уметь под него генерировать патч. Вот так же сделано и в OpenCode который использует это для разных моделей.
А избавится от использования шелла полностью конечно ж не получается, причем чем больше контекста, тем более вероятно модель будет использовать только shell - в codex/opencode в общем то такая же проблема (видно по трейсам последнем скрине)
+
а еще поле фиксированной длинны не покинет кластерный индекс, а вот VARCHAR будет заменено ссылкой на диск, в случае если размер строки начнет превышать выделенный лимит
я пытался это воспроизвести - но не получилось продемонстрировать разницу
подробнее тут: https://dev.mysql.com/blog-archive/externally-stored-fields-in-innodb/
Спасибо за столь детальный анализ! Со многим согласен.
Примеры 1-4: Вижу только как вы сами написали бы их и что упомянули бы, кажется, это окей - спасибо за дополнение ?
Пример 5: Расскажите, пожалуйста, как возможно это сделать ОДНИМ запросом?
Пример 6: Тут, похоже, вы меня не так поняли - место в таблице с NULLable полями экономится только в сравнении с указанием DEFAULT значения (например 0 или '') вместо NULL