Пакетная обработка с LLM: как обогатить каталог и принять результат
В каталоге несколько тысяч карточек. Нужно извлечь материал и тип крепления из описаний, чтобы заработал фильтр магазина. Ручная обработка занимает недели, LLM умеет читать свободный текст, но результат надо вернуть в правильную строку, проверить по словарю и передать спорные значения редактору. Именно этот рабочий контур стоит собрать первым.
Определите, что считается готовой карточкой
У каждой карточки должен быть стабильный item_id и версия исходного описания. Название товара не годится на роль ключа: оно меняется и повторяется. Зафиксируйте набор полей, допустимые значения и правило для отсутствующего признака. Если материал не указан, ответ unknown предпочтительнее догадки по фотографии или похожему названию.
Для каждого извлечённого поля попросите сохранить фрагмент исходного описания. Редактору проще проверить «алюминиевый корпус» рядом со значением «алюминий», чем читать весь текст. При этом наличие похожей строки не доказывает, что признак относится именно к изделию: описание может сравнивать его с другим товаром.
Разделите получение ответа и принятие данных
Ответ модели проходит проверку схемы, допустимых значений и связи с исходной карточкой. Приложение должно знать, какая версия текста обработана. Если редактор уже изменил описание, старый результат не следует автоматически применять к новой версии. Сохраните его для разбора и назначьте повторную обработку актуального текста.
Удобные статусы строки: ожидает обработки, готово к проверке, принято, требует уточнения и ошибка выполнения. Ошибка сети и отсутствие материала в описании требуют разных действий. Повторять запрос для строки без нужного факта бессмысленно, пока не обновлён источник.
Подготовьте очередь редакторской проверки
В примере модель уже вернула значения для трёх товаров. Скрипт сопоставляет ID и проверяет допустимость материала. Строки с известным значением готовы к редакторской проверке, строки unknown требуют уточнения. Фактическая верность материала здесь ещё не проверяется: редактор сверяет его с описанием. Порядок ответов не имеет значения, связь строится по item_id.
items = {"a": "Корпус из стали", "b": "Настенный держатель", "c": "Деталь из алюминия"}
answers = [{"item_id": "c", "material": "aluminium"},
{"item_id": "a", "material": "steel"},
{"item_id": "b", "material": "unknown"}]
allowed = {"steel", "aluminium"}
ready_for_review, needs_details = {}, []
for row in answers:
key = row["item_id"]
if key not in items or row["material"] not in allowed:
needs_details.append(key)
else:
ready_for_review[key] = row["material"]
assert set(ready_for_review) == {"a", "c"} and needs_details == ["b"]
print({"ready_for_review": ready_for_review, "needs_details": needs_details})
Управляйте частичной готовностью
Перед запуском сохраните список ожидаемых item_id. После обработки сравните его с полученными результатами: пропущенная строка не должна исчезнуть из знаменателя отчёта. Повторяйте только технически неудачные задания, сохраняя уже принятые результаты. Для одного товара храните историю попыток и одно явно выбранное принятое значение.
На пилоте возьмите карточки разных типов: полное описание, короткое, противоречивое, с рекламным сравнением и без нужного признака. Измерьте качество по каждому полю. Материал и способ крепления могут иметь совсем разную долю ошибок, хотя извлекаются одним запросом.
Первые результаты проверяйте целиком. Затем можно выбирать объём ручной проверки по риску и измеренному качеству отдельного поля. Цену, артикул и совместимость оборудования нельзя автоматически принимать по правилу, выбранному для цвета упаковки.
Редакторские решения сохраняйте как примеры для следующего запуска. Запись «поле отсутствует в источнике» помогает не только оценивать модель, но и планировать улучшение карточек у поставщика. Проект завершён, когда обновлённый каталог проходит приёмку и спорные строки имеют ответственного, а не когда закончилась очередь запросов.
Продолжить проект на практике
Когда карточки обрабатываются пачками, важны состояние задания и понятная работа со сбоями. В платном курсе AI Agents PRO вы спроектируете граф состояния и разберёте ретраи, идемпотентность и DLQ. Эти навыки помогают собрать устойчивую обработку, а предметные правила проверки каталога вы зададите под свои поля.
Откройте программу курса и выберите следующий этап своего проекта.
По теме: План AI-агента и исполнение: какие проверки ставить между ними.
Продолжить на практике
- AI Agents PRO: LangGraph, AutoGen и LLMOps в продакшне ↗
Практический курс по AI-агентам. Соберёте продакшн RAG-сервис: от индекса и графа состояний до API, Docker, метрик качества и контроля стоимости. Плюс профессиональные блоки: LangGraph/AutoGen, Qdrant/FAISS+rerank, eval (RAGAS/custom), quality-гейты, OpenTelemetry+Prometheus/Grafana, CI/CD, ретраи/DLQ/идемпотентность, PII/RBAC.
