Проверка промежуточных результатов
Проверка промежуточных результатов
При декомпозиции задачи на цепочку промптов ошибка на раннем шаге лавинообразно разрастается. Если модель неправильно извлекла данные на шаге 1, все последующие шаги будут построены на неверных данных. Поэтому проверка промежуточных результатов — не опция, а обязательный этап.
Что именно проверять
Для каждого промежуточного результата задай три вопроса:
1. Полнота — всё ли извлечено/сделано?
Не пропустила ли модель часть данных? Например, в резюме было 5 мест работы, а модель извлекла 4.
2. Корректность — нет ли фактических ошибок?
Не перепутала ли модель цифры, имена, даты? «80 000 руб.» не превратились ли в «80000» (без указания валюты)?
3. Формат — соответствует ли ответ ожидаемой схеме?
Валидный ли JSON? Все ли ключи на месте? Не обёрнут ли JSON в markdown-блок?
Методы проверки
1. Ручная проверка (быстрая)
Для ключевых полей — пробегись глазами:
Модель вернула: {"name": "Иван Иванов", "salary": 80000, "position": "инженер"}
Ожидалось: name, salary, position — все три поля.
Проверка: name есть ✓, salary есть ✓, position есть ✓. Формат: JSON ✓.
2. Проверка через саму модель (дешёвая)
Попроси модель проверить свой же ответ:
Вот JSON, который ты вернула. Проверь его:
- Все ли поля из исходного текста извлечены?
- Нет ли фактических ошибок?
- Валидный ли JSON?
Исходный текст: "Иван Петров, инженер, 80 000 руб."
JSON: {"name": "Иван Петров", "salary": 80000, "position": "инженер"}
Модель проверит свой ответ и может найти ошибку, которую ты пропустил.
3. Автоматическая валидация (надёжная)
Если ответ в JSON — используй JSON Schema валидатор в коде (в браузере можно открыть консоль разработчика и выполнить JSON.parse()). Если ответ в тексте — проверь регулярными выражениями.
Но в рамках этого курса (браузер, без программирования) — ручная проверка + проверка моделью.
Пример: ошибка, которую нашли проверкой
Шаг 1 (извлечение данных из договора):
Извлеки из договора сумму, дату и стороны.
Договор: "ООО 'Ромашка' и ИП Иванов заключили договор на сумму
150 000 (сто пятьдесят тысяч) рублей. Дата: 15.01.2025."
Ответ модели:
{
"party1": "ООО 'Ромашка'",
"party2": "ИП Иванов",
"amount": 150000,
"date": "15.01.2025"
}
Проверка: на первый взгляд всё верно. Но читаем исходный текст внимательно: сумма прописью — «сто пятьдесят тысяч», а числом — 150 000. Всё совпадает. Ошибки нет.
Другой пример с ошибкой:
Договор: "...на сумму 1 200 000 (один миллион двести тысяч) рублей..."
Ответ модели: "amount": 1200000
Проверка: один миллион двести тысяч = 1 200 000. Совпадает. Ошибки нет.
Реальный пример ошибки:
Договор: "...арендная плата 50 000 руб. в месяц. Депозит — 100 000 руб."
Ответ модели: "total_amount": 50000
Проверка: модель извлекла только арендную плату и проигнорировала депозит, хотя поле называется total_amount. Либо поле названо неправильно (нужно monthly_rent и deposit), либо модель пропустила часть данных. Ошибка найдена проверкой.
Чек-лист проверки промежуточного результата
Перед тем как передать результат на следующий шаг:
- Все ли запрошенные поля присутствуют?
- Значения соответствуют исходным данным (нет выдумок)?
- Числа не потеряли единицы измерения (рубли, килограммы)?
- Формат соответствует ожидаемому (JSON, таблица)?
- JSON валидный (если применимо)?
- Нет ли экстра-текста вне JSON?
Проверь себя
Модель извлекла данные из чека: {"items": [{"name": "Молоко", "price": 89}, {"name": "Хлеб", "price": 45}], "total": 134}. Исходный текст чека: «Молоко — 89₽, Хлеб — 45₽, Итого: 134₽». Какие проверки выполнишь?
Ответ: (1) Все ли items на месте? Молоко ✓, Хлеб ✓. (2) Совпадают ли цены? 89 ✓, 45 ✓. (3) Сумма корректна? 89 + 45 = 134 ✓. (4) JSON валидный? Да. (5) Формат правильный? Да. Всё ок, можно передавать дальше.
Итог
- Проверяй КАЖДЫЙ промежуточный результат перед передачей на следующий шаг.
- Три вопроса: полнота (всё ли извлечено?), корректность (нет ли ошибок?), формат (соответствует ли схеме?).
- Методы проверки: ручная, через саму модель, автоматическая (JSON.parse).
- Ошибка, найденная на раннем шаге, экономит часы переделывания на поздних.
Что дальше
Ты освоил все элементы декомпозиции: разбиение на подзадачи, prompt chaining, итеративное уточнение и проверку результатов. В финальном уроке модуля — практика: применим все четыре техники к сквозной аналитической задаче.