Добавить в корзинуПозвонить
Найти в Дзене

Почему ИИ плохо пишет макросы для Word и как заставить его писать хорошо

Однажды ваш покорный устал от рутины и пошел в гости к ИИ. Дело в том, что я, когда проверяю работы студентов в виде двухколоночной таблицы-билингвы, постоянно сталкиваюсь с одной и той же проблемой: текст в ячейках лежит монолитом, без разбивки на предложения (как на скриншоте). Заниматься разбивкой таких текстов и растаскивать предложения по ячейкам вручную — еще то удовольствие. Вот я психанул и пошел к ИИ. Зная, какие вещи мне ИИ выдавал на Python, я посчитал, что тут будет фигня делов, поэтому написал ему по-простому, сходу: «Напиши макрос для Word, который будет разбивать текст в таблице на предложения». Дальше началось интересное — ИИ начал чудить. Он то добавлял пустую строку не там, то путал ячейки, то копировал в обе колонки один и тот же русский текст, а иногда и вовсе оставлял ячейки пустыми. Каждая новая попытка, каждая уточняющая инструкция делали результат чудесатее и чудесатее. После четырех часов дебаггинга меня вдруг осенило — я же наступал уже на эти грабли. Приме

Однажды ваш покорный устал от рутины и пошел в гости к ИИ. Дело в том, что я, когда проверяю работы студентов в виде двухколоночной таблицы-билингвы, постоянно сталкиваюсь с одной и той же проблемой: текст в ячейках лежит монолитом, без разбивки на предложения (как на скриншоте).

Заниматься разбивкой таких текстов и растаскивать предложения по ячейкам вручную — еще то удовольствие.

Вот я психанул и пошел к ИИ. Зная, какие вещи мне ИИ выдавал на Python, я посчитал, что тут будет фигня делов, поэтому написал ему по-простому, сходу:

«Напиши макрос для Word, который будет разбивать текст в таблице на предложения».

Дальше началось интересное — ИИ начал чудить. Он то добавлял пустую строку не там, то путал ячейки, то копировал в обе колонки один и тот же русский текст, а иногда и вовсе оставлял ячейки пустыми. Каждая новая попытка, каждая уточняющая инструкция делали результат чудесатее и чудесатее.

После четырех часов дебаггинга меня вдруг осенило — я же наступал уже на эти грабли. Примерно 4 месяца назад я так же пыхтел несколько часов над скриптом для комментирования ошибок — мне нужно было заставить скрипт выделять ошибки каждый раз новым цветом, и выводить их в блок для комментирования, примерно так:

-2

Я тогда в итоге, не добившись рабочего скрипта от ИИ, просто взял и написал ему четкий, пошаговый алгоритм того, что нужно сделать, чтобы получилось то, что мне нужно (он правда и там умудрился напортачить, но там уже было проще - я просто увидел, в каком шаге он делает ошибку, и попросил его скорректировать именно ее).

Здесь важно уяснить один методологический момент: при работе с VBA ИИ ведет себя как исполнительный, но неопытный стажер (и это резко отличается от того, что он делает с Python, хотя он и в нем косячит немало).

Почему так происходит? Дело в том, что когда мы просим его написать код на Python, он обращается к гигантской базе знаний, собранной со всего интернета. А когда речь заходит о VBA, то его «библиотека» состоит из обрывков информации со старых форумов и редких мануалов. Он знает язык, но у него нет «насмотренности», нет интуитивного понимания, как решать типичные задачи.

Получается как в анекдоте про заблудившегося в пустыне Алладина:

— Я джинн, загадывай желание, мой повелитель.
— О, джинн, я хочу в город.
— Хорошо, пошли.
— Ты не понял, я быстро хочу.
— Тогда побежали.

В общем, здесь я поступил так же, я просто написал ему алгоритм действий, как для тупых, цитирую:

Напиши макрос на VBA для MS Word, который делает в таблице следующее (комментарии внутри кода строго на английском):
1. Убеждается, что курсор находится в левой ячейке двухколоночной таблицы. Если нет — выводит сообщение и выходит. Если таблица не двухколоночная — то же самое. Если курсор в правой колонке — переносит его в левую ячейку этой же строки.
2. Убеждается, что в текущей ячейке больше одного предложения.
3. Добавляет новую пустую строку над текущей.
4. Переносит в левую ячейку новой строки первое предложение из исходной левой ячейки.
5. Переносит в правую ячейку новой строки первое предложение из исходной правой ячейки.
6. Возвращает курсор в исходную левую ячейку.
7. Никаких сообщений об успехе не выводит

И тут случилось чудо: ИИ, получив такой детальный список операций, почти с первого раза выдал нормально работающий код. Потому что ему не пришлось думать — ему пришлось просто перевести человеческий алгоритм на язык VBA.

Как бы сказали разработчики (но это неточно), с Python ИИ умеет работать по декларативным инструкциям, а с VBA — только по императивным.

Код я положил в сниппет по ссылке, скриншот кода ниже:

-3

В деле тексты студентов стали дробиться так:

-4

Выводы

Когда работаешь с ИИ по популярным языкам (типа Python), можно слегка «забить» на точность формулировок, ИИ более или менее простые задачи «вывозит».

Как только заходишь на территорию чего-то более редкого (как VBA), про вайбкодинг можно забыть, тут работает только декомпозиция. Разбиваешь задачу на мельчайшие, примитивные шаги и расписываешь их так, чтобы даже первоклассник не смог ошибиться.

В чем-то это, конечно, похоже на то, чтобы написать макрос самому. Но все же ты не греешь голову синтаксисом, ты просто инструктируешь исполнителя, и он переводит твои инструкции в VBA-код. Уже немало.

И это явно быстрее, чем часами дебажить кривые фантазии ИИ.