ГигаЧат и код: как получить функцию, которую можно проверить
ГигаЧат и код: как поставить рабочую задачу, проверить результат тестами и не перенести ошибку в проект. Даю запрос и критерии проверки на примере UTM-меток.
М
Марина
Контент-маркетолог LibraChat
6 мин чтения
В таблице рекламных ссылок я увидела пустую кампанию у адреса, где метка была: знак равенства стоял, а значение забыли. Для отчёта это не то же самое, что отсутствие метки. Мне понадобилась крошечная функция: извлечь utm_campaign из URL и различить три состояния. Здесь ГигаЧат и код могут помочь, но полезный результат начинается с описания входа и ожидаемого выхода. Не с фразы «напиши скрипт».
ГигаЧат, по собственной справке сервиса, умеет создавать, объяснять и исправлять код. Я не проверяла его ответ на этом примере и не буду выдавать мой фрагмент ниже за ответ модели. Покажу, как поставить задачу и проверить любой полученный вариант. Такой же порядок работает, если ты используешь LibraChat для помощи с кодом.
ГигаЧат и код: сначала контракт функции
У меня был список из 18 ссылок для отчёта, собранный за 2 недели. Я сделала черновик задачи на бумаге и сразу поймала дыру: что вернуть, если метка есть, но она пустая? Когда это не указано, два аккуратных фрагмента кода могут вести себя по-разному. Для таблицы такая разница заметна только через неделю, когда кто-то начинает считать кампании.
Я записываю контракт в пяти строках:
Вход: одна строка URL. На этом шаге нет доступа к сети и файлам.
Выход: значение первой метки utm_campaign или None, если метки вообще нет.
Пустое значение: вернуть пустую строку. Она отличается от None.
Повтор метки: взять первое значение. Таков выбор для этой задачи, не универсальное правило аналитики.
Область применения: функция разбирает строку, но не подтверждает, что сайт существует и URL безопасен.
Теперь запрос к модели получается коротким, зато проверяемым:
Напиши функцию Python utm_campaign(url). На входе строка URL. Верни первое значение параметра utm_campaign. Если параметра нет, верни None; если он есть без значения, верни пустую строку. Не обращайся к сети и не используй сторонние пакеты. После кода покажи проверки для обычного URL, отсутствующей метки, пустой метки и двух меток с одинаковым именем. Объясни выбор для повторов.
Это предлагаемый промпт. В него не нужно вставлять рабочие ссылки с клиентскими идентификаторами: для проверки хватит выдуманного адреса. Если код пишется для настоящего проекта, сперва уточни правила обращения с его исходниками.
Какие тесты должны пройти до копирования
В моём примере четыре случая, и каждый ловит отдельную ошибку. Проверка на один красивый URL почти ничего не доказывает. Я собрала таблицу ещё до кода, чтобы не соглашаться на результат только потому, что он выглядит убедительно.
Вход · Ожидаемый результат · Какую ошибку ловит
URL с utm_campaign=november — november — Функция читает нужный параметр
URL без utm_campaign — None — Не путает отсутствие с пустотой
URL с utm_campaign= — пустая строка — Не выбрасывает пустую метку
URL с utm_campaign=a и затем utm_campaign=b — a — Обрабатывает повторы по нашему правилу
Для ориентира я написала свой вариант на стандартной библиотеке Python. Функция берёт часть URL после вопросительного знака через urlsplit, а parse_qs разбирает параметры. У parse_qs есть флаг keep_blank_values: без него пустая метка пропала бы. Это описано в документации Python. Если твой процесс считает пустую метку ошибкой, функция всё равно должна сначала её обнаружить. Решение «исправлять или отклонять» относится к следующему шагу обработки. Когда эти шаги смешивают, исходную проблему уже нельзя восстановить из выгрузки.
```python
from urllib.parse import parse_qs, urlsplit
def utm_campaign(url):
values = parse_qs(
urlsplit(url).query,
keep_blank_values=True,
).get("utm_campaign")
return values[0] if values else None
```
Я проверила этот фрагмент локальным Python на четырёх входах из таблицы. Все четыре проверки прошли. Это проверка приведённого кода, а не тест качества ответа ГигаЧат или LibraChat. Код намеренно маленький: его можно прочитать глазами. Он не проверяет валидность адреса и не решает, как бизнес должен трактовать повторяющиеся метки.
Если предложенный моделью код сложнее, не считай длину признаком качества. Попроси объяснить, почему добавлена каждая библиотека и каждая ветка. Я однажды попросила «сделай надёжнее» и получила больше условий, но не лучшее определение того, что считать пустой кампанией. Пришлось вернуться к контракту.
ГигаЧат и код: где чаще прячется ошибка
Нейросеть может написать синтаксически правильный фрагмент и всё же решить соседнюю задачу. Особенно если в просьбе есть слова «очисти», «нормализуй» или «убери мусор» без точного определения. В нашем случае модель могла бы молча удалить пустые значения, хотя именно их мы хотели увидеть в отчёте.
Проверяю результат в таком порядке:
читаю сигнатуру и смотрю, нет ли обращения к сети или файлам, которого не просила;
прогоняю обычный случай и все крайние случаи из таблицы;
проверяю, что в коде нет секретов, реальных клиентских адресов и жёстко прописанных путей;
запускаю линтер и существующие тесты проекта, если функция попадёт в рабочий репозиторий;
прошу коллегу посмотреть изменение перед применением к данным, от которых зависит отчёт.
Последний пункт иногда кажется лишним ради пяти строк. Но в строках кода виден только механизм; правило «первое значение побеждает» спрятано в задаче. Именно это правило коллега может оспорить. Тогда спор лучше провести до запуска, пока данные ещё не затронуты.
Как повторить приём в своей задаче
Если тебе нужен не парсер меток, а функция для переименования файлов или подсчёта строк, замени предмет, сохрани порядок. Сначала вход и выход. Затем два крайних случая. Потом запрет на нежелательные действия. И только после этого попроси код. Для маленькой функции этого часто хватает, чтобы разговор с моделью стал предметным.
В LibraChat можно попросить написать, переписать или объяснить код. Если сравниваешь условия доступа, они указаны на странице тарифов. О постановке более крупных задач есть разбор нейросети для программиста. Я бы начала с функции, которую реально понимаю сама, а не с просьбы собрать приложение целиком.
Попробуй сейчас взять одно повторяющееся действие из своей работы и описать его как функцию: один вход, один выход, четыре проверки. Вставь этот контракт в чат и сравни ответ с таблицей ожиданий до того, как переносить код. Если хоть один случай расходится, уточни правило в запросе. Здесь переделка занимает минуты, а в рабочем отчёте она могла бы затронуть сотни строк.