Чтобы писать код с нейросетью, задайте небольшую проверяемую задачу: язык и версию среды, формат входа, ожидаемый выход и ограничения. Попросите отдельные файлы с решением и тестами, прочитайте их и запустите проверки у себя. Если результат не совпал с требованиями, верните модели конкретный вход, ожидаемый ответ и сообщение об ошибке.
В этой инструкции разберём очистку списка тегов на JavaScript: от задания до восьми тестов. Пример подготовлен редакцией и проверен локально на Node.js v24.19.0 5 октября 2026 года. Платные запросы к моделям Искры для статьи не выполнялись; код ниже не выдаётся за результат сравнительного теста моделей.
1. Выберите задачу с понятным результатом
Для первого запроса возьмите одну функцию, которую можно проверить на нескольких входных значениях. Например, обработать список тегов перед показом в интерфейсе. Запрос «сделай приложение для заметок» оставляет слишком много решений на усмотрение модели: хранение данных, авторизацию, внешний вид и обработку ошибок. Начните с функции, а затем отдельно подключите её к приложению.
Запишите правила до получения кода. Тогда вы сможете отличить ошибку от разумного, но неподходящего вам решения. В нашем примере теги AI и ai считаются одинаковыми, а Ёлка и елка — разными. Это выбранное правило учебной задачи, а не универсальное требование к тегам.
| Условие | Ожидаемое поведение |
|---|---|
| Вход | Массив строк; иной тип — TypeError |
| Пробелы | Убрать только пробелы по краям; пустые строки пропустить |
| Повторы | Сравнивать строки после toLowerCase(), сохранить первый вариант |
| Порядок | Сохранить порядок первых появлений |
| Исходные данные | Не изменять переданный массив |
| Границы примера | Не заменять ё на е, не схлопывать внутренние пробелы, не выполнять Unicode-нормализацию |
Например, из [" AI ", "ai", "Код", " код ", ""] должен получиться ["AI", "Код"]. Вход ["AI", 7] должен вызвать ошибку, а не превратить число в строку. Такие пары «вход — выход» полезнее расплывчатого требования сделать функцию надёжной.
2. Подготовьте контекст и запрос
Если функция нужна для существующего проекта, добавьте её текущий код, пример вызова и относящиеся к задаче типы данных. Укажите версию языка или среды и допустимые зависимости. Не отправляйте весь репозиторий, если достаточно двух файлов. Перед вставкой замените токены, пароли, персональные данные и закрытые адреса на явные заглушки.
Напиши учебную функцию normalizeTags(values) для JavaScript, Node.js 24, ES modules. Вход — массив строк. Удали пробелы по краям каждой строки, пропусти пустые строки. Сравнивай теги без учёта регистра через toLowerCase(), сохрани написание и порядок первого появления. Не изменяй исходный массив. Если вход не массив или в нём есть не строка, выброси TypeError. Не заменяй ё на е, не схлопывай внутренние пробелы, не делай Unicode-нормализацию. Пример: [" AI ", "ai", "Код", " код ", ""] → ["AI", "Код"]. Верни два полных файла: tags.mjs и tags.test.mjs. Используй только встроенные node:test и node:assert/strict, без сторонних пакетов. Покрой восемь случаев: обычный ввод, пустой массив, пробельные строки, неверный тип входа, нестроковый элемент, неизменность входа, внутренние пробелы, порядок и первое написание. Затем кратко объясни решение и дай команду запуска. Если требования противоречат друг другу, сначала укажи противоречие. Не утверждай, что тесты пройдены, если ты их не запускал.
Сначала проверьте, что ответ содержит именно два файла и не добавляет сервер, базу данных или новый пакет. Если модель использует другую среду, уточните её в следующем сообщении до переноса кода. Запрос тестов помогает оформить проверку, но сами ожидаемые значения нужно сверить с исходными правилами.
3. Отправьте задание через «Анализ и код»
Порядок в Искре
- Откройте страницу «Анализ и код» по ссылке в конце статьи.
- Вставьте задание в поле «Опишите вашу задачу» и выберите доступную текстовую модель.
- Нажмите «Продолжить в студии», выполните вход, если он потребуется, и проверьте итоговые настройки и стоимость перед запуском.
- Сохраните полученные файлы отдельно от рабочего проекта и переходите к локальной проверке.
На дату подготовки публичная страница Искры показывает поле задания, выбор модели и переход в студию. В каталоге есть текстовая карточка Claude со ссылкой на контракт CometAPI. Это подтверждает наличие текстового сценария, но не означает, что Искра сама запускает ваш код или автоматически подключается к репозиторию. Здесь выполнение примера происходит локально в Node.js.[4]
4. Сохраните функцию и прочитайте её
Ниже — воспроизводимый редакционный вариант решения. Создайте отдельную папку и сохраните код в файл tags.mjs в кодировке UTF-8. Расширение .mjs здесь используется для модулей JavaScript; не сохраняйте файл как tags.mjs.txt.
export function normalizeTags(values) {
if (!Array.isArray(values)) throw new TypeError('Expected array');
const seen = new Set();
const result = [];
for (const value of values) {
if (typeof value !== 'string') throw new TypeError('Expected string');
const tag = value.trim();
const key = tag.toLowerCase();
if (tag && !seen.has(key)) {
seen.add(key);
result.push(tag);
}
}
return result;
}Set хранит уже встречавшиеся ключи в нижнем регистре. Массив result хранит исходное написание первого непустого тега после удаления краевых пробелов. Проверка typeof стоит до trim(), поэтому число или null внутри массива приводят к TypeError. Входной массив код только читает.
Обратите внимание на пределы решения: слово Ёлка не объединяется с елка, а строки с одним и двумя пробелами внутри остаются разными. Оно не предназначено для сложного языкового сопоставления имён. Если вашему продукту нужны другие правила, сначала измените контракт и ожидаемые результаты тестов, затем реализацию.
5. Запустите восемь тестов
Во второй файл tags.test.mjs в той же папке вставьте следующий набор. Он проверяет результат функции по примерам из контракта, включая ошибки и сохранность исходного массива. Node.js предоставляет встроенный модуль node:test и команду запуска тестов; отдельный тестовый пакет здесь не нужен.[3]
import test from 'node:test';
import assert from 'node:assert/strict';
import { normalizeTags } from './tags.mjs';
test('trim and duplicates', () => {
assert.deepEqual(normalizeTags([' AI ', 'ai', 'Код', ' код ', '']), ['AI', 'Код']);
});
test('empty array', () => assert.deepEqual(normalizeTags([]), []));
test('blank strings', () => assert.deepEqual(normalizeTags([' ', '\t']), []));
test('reject non-array', () => assert.throws(() => normalizeTags(null), TypeError));
test('reject non-string', () => assert.throws(() => normalizeTags(['AI', 7]), TypeError));
test('do not mutate', () => {
const input = Object.freeze([' AI ', 'ai']);
assert.deepEqual(normalizeTags(input), ['AI']);
assert.deepEqual(input, [' AI ', 'ai']);
});
test('preserve inner spaces', () => {
assert.deepEqual(normalizeTags(['AI tools', 'AI tools']), ['AI tools', 'AI tools']);
});
test('keep first spelling and order', () => {
assert.deepEqual(normalizeTags(['Ёлка', 'елка', 'ЁЛКА', 'B', 'a']), ['Ёлка', 'елка', 'B', 'a']);
});Как запустить пример
- Откройте терминал в папке с двумя файлами.
- Выполните node --version. Пример проверен на Node.js v24.19.0; для повторения используйте установленную среду Node.js 24.
- Выполните node --test tags.test.mjs.
- Проверьте итог: tests 8, pass 8, fail 0. При ошибке прочитайте название неудавшегося теста и различие между actual и expected.
В редакционном запуске 5 октября 2026 года все восемь тестов прошли. Это результат именно опубликованного небольшого примера на указанной среде. Он не доказывает, что произвольный ответ нейросети безопасен или что функция подходит любому приложению. Для другого контракта понадобятся другие проверки.
Написанные моделью тесты тоже требуют чтения: она может закрепить в expected собственную ошибку или пропустить неудобный случай. Сверяйте ожидаемые значения с требованиями и добавляйте проверки границ входных данных. Такой подход к конкретным сценариям и исключениям описан и в руководстве GitHub по созданию тестов.[2]
6. Исправляйте одну причину за раз
Если ваш вариант не проходит проверку, не начинайте с «перепиши всё правильно». Скопируйте минимальный вход, ожидаемый и фактический результат, команду запуска и относящийся к ошибке фрагмент. Ниже шаблон для ситуации, когда реализация возвращает нижний регистр вместо сохранения первого написания. Это пример сообщения, а не ошибка, найденная в опубликованном коде.
Нужно исправить только нарушение контракта normalizeTags. Среда: Node.js 24, ES modules. Вход: [" AI ", "ai"]. Ожидаю: ["AI"]. Получаю: ["ai"]. Требование: сравнение без учёта регистра, но написание первого тега сохраняется. Текущий код: [вставьте функцию]. Сообщение теста: [вставьте фактический вывод терминала]. Объясни причину и предложи минимальную правку. Не меняй контракт и ожидаемое значение теста ради зелёного результата. Не удаляй тесты.
После правки запускайте весь набор снова: исправление одного случая может нарушить другой. Если тест требует поведения, которого нет в договорённости, обсудите именно это требование. Удалять неудачный тест только ради успешного отчёта нельзя считать исправлением; документация GitHub отдельно обращает внимание на пропущенные и удалённые проверки при ревью AI-кода.[1]
7. Перенесите решение в проект осознанно
Перед подключением
- Прочитайте каждую ветку функции и убедитесь, что понимаете её вход, выход и исключения.
- Проверьте, где вызывающий код обработает TypeError. Ошибка ввода не должна неожиданно обрывать весь пользовательский сценарий.
- Сохраните текущую версию проекта и внесите небольшое изменение, которое можно просмотреть и отменить.
- Запустите тесты самого проекта, проверку типов и другие принятые в нём проверки. Учебные восемь тестов их не заменяют.
- Для предложенных моделью внешних пакетов отдельно проверьте существование, документацию и необходимость зависимости до установки.
Когда небольшая задача завершена, сохраните удачное задание вместе с требованиями, версией среды и командой проверки. Для следующей функции замените контракт, а не только её имя. Внутренние инструкции ниже помогут оформить шаблон и сравнить несколько ответов по одинаковым критериям.
Частые вопросы
Можно ли писать код с нейросетью без опыта?
Можно начать с небольшого примера, у которого понятен ожидаемый результат. Но перед использованием нужно уметь сохранить файлы, запустить их в нужной среде и прочитать ошибку. Если не можете объяснить, какие данные код меняет или куда отправляет, сначала попросите разбор и проверьте его на изолированном учебном примере.
Почему код выглядит правильно, но не работает?
Частые причины — другая версия библиотеки, отсутствующая зависимость, неверное имя файла или незаданное правило обработки данных. Например, возврат ["ai"] вместо ["AI"] допустим для одного контракта и ошибочен для нашего. Сообщите модели точную среду и расхождение, затем повторите проверку.
Нужно ли каждый раз просить тесты?
Если результат имеет проверяемое поведение, запишите хотя бы несколько примеров до генерации. Для функции обработки данных подойдут автоматические тесты; для изменения интерфейса дополнительно нужен просмотр в браузере. Сообщение модели «всё работает» само по себе не является запуском проверки.
