Claude Certified Architect · Модуль 4 · Урок 4.4

Валидация, повторы и циклы обратной связи

Суть

Повтор с обратной связью об ошибке работает, только когда ошибка исправима (формат, структура). Если информации в документе нет — повтор не поможет: модель либо повторит null, либо выдумает значение.

Видимость и выборка

Поля вроде detected_pattern, calculated_total, conflict_detected дают семантическую видимость. Повтор должен включать исходный документ, неудачное извлечение и конкретные ошибки валидации. Подход «сначала выборка, потом пакет» максимизирует успех с первого раза и минимизирует дорогую переотправку.

Повтор с конкретной обратной связью об ошибке
func retryWithFeedback(client *Client, document, failedOutput string, errs []string) (*Response, error) {
	messages := []Message{
		{Role: "user", Content: document},
		{Role: "assistant", Content: failedOutput},
		{Role: "user", Content: "Извлечение не прошло валидацию. Конкретные ошибки:\n" +
			strings.Join(errs, "\n") +
			"\nИсправь ТОЛЬКО эти ошибки формата/структуры. " +
			"Если информации нет в документе — верни null, не выдумывай."},
	}
	return client.CreateMessage(MessageRequest{Model: "claude-opus-4-8", Messages: messages})
}

Anti-patterns

ЛовушкаПочему не работаетВерный паттерн
Повторять, когда обязательное поле null из-за отсутствия данныхУ модели нет нового — повторит null или выдумаетРазличать ошибки формата/структуры (повтор помогает) и отсутствие данных (человек/null)
Повторять без конкретной ошибки валидацииТот же промпт даёт тот же вывод — нет новой информацииВключать документ, неудачное извлечение и конкретные ошибки
Запускать пакет на 10 000 документов без выборкиПробелы извлечения затронут все 10 000 — дорого переобрабатыватьСначала выборка 10–20; починить, затем масштаб

Exam traps

ЛовушкаПочему не работаетВерный паттерн
Повтор для отсутствующей информацииВызывает выдумываниеПринять null или направить человеку
Общий повтор без конкретики ошибкиНеэффективенКонкретные ошибки в сообщении повтора
Большой пакет без проверки выборкойДорогие массовые сбоиСначала выборка

Практическое задание (T4)

  • Реализовать повтор с обратной связью: включать исходный документ, неудачное извлечение и конкретные ошибки.
  • Тест-кейсы: (a) несоответствие формата даты — повтор чинит; (b) отсутствует обязательное поле — повтор даёт выдумку или null, а не верный ответ.
  • Добавить семантическую валидацию: проверка сумм позиций; поля calculated_total и conflict_detected.
  • Добавить detected_pattern к находкам ревью; отслеживать отклоняемые паттерны; выделить топ-3 ложных после 50 ревью.
  • Тест «выборка перед пакетом»: 10 документов, найти пробелы, починить промпт, затем 100 — измерить рост успеха с первого раза.

Проверка знаний

Извлечение структурированных данных

Доля null в publication_date — 15%: у 8% документов даты реально нет, у 7% нестандартный формат вроде «Published Spring 2023». Цикл повторов переотправляет все null. Что произойдёт?

  • A Повтор чинит оба — модель постарается найти пропущенные даты
  • B Повтор не чинит ничего — переотправка без новой информации даёт тот же вывод
  • C Повтор с подсказкой формата чинит 7% (несоответствие формата исправимо); 8% без дат останутся null или будут выдуманы
  • D Повтор чинит 8% без дат, так как модель выведет их из контекста

Извлечение структурированных данных

Извлечение контрактов проваливает повторы 3 раза, остаётся 12% ошибок. Анализ выявил три причины: (A) заголовки разделов принимаются за содержимое пунктов, (B) многоабзацные пункты обрезаются на первом переносе строки, (C) перекрёстные ссылки извлекаются буквально вместо разрешения. Что сделать?

  • A Повтор с temperature=0 ради детерминизма
  • B Классифицировать тип сбоя и применить точечный правящий промпт под каждую причину
  • C Повтор с большим окном контекста
  • D Добавить все три причины как предупреждения в system prompt на первой попытке

Извлечение структурированных данных

Валидатор-Claude проверяет качество извлечения, имея только извлечённый JSON и схему. Он одобряет извлечения, которые люди отклоняют. Причина?

  • A Промпт валидатора слишком строг и отклоняет валидные извлечения
  • B Модель валидатора слабее экстрактора
  • C У валидатора есть только JSON, но не исходный документ — он не может проверить, что значения реально есть в источнике
  • D Схема у валидатора устарела относительно экстрактора