Библиотека восстановления пайплайнов LLM с сохранением схемы | AiManual
AiManual Logo Ai / Manual.
16 Июн 2026 Инструмент

Как избежать сломанных пайплайнов при сбое LLM: библиотека восстановления с сохранением схемы

RescueSchema автоматически обнаруживает ошибки схемы JSON, повторяет запросы и переключает модели, предотвращая падение пайплайнов. Примеры, сравнение, код.

Реклама
cliv2

Почему ваш пайплайн падает?

Агентные пайплайны на LLM — штука хрупкая. Вы пишете красивую цепочку: LLM парсит документ, извлекает сущности, генерирует JSON. И вдруг — бац! — модель возвращает невалидный JSON, или поле не соответствует схеме, или галлюцинация подсовывает лишний ключ. Пайплайн падает, прод в стрессе, вы ищете баг в логи. Знакомо? Microsoft подсчитала: каждый четвёртый документ при делегировании моделям содержит ошибки. А если ваш ETL-пайплайн обрабатывает миллионы записей, один сбой может стоить часов перезапуска.

Выход есть — RescueSchema (v2.1.0, июнь 2026). Это библиотека, которая ловит ошибки схемы JSON, автоматически повторяет запрос с контекстной подсказкой и, если модель упорствует, переключается на fallback. Никаких ручных try-except, никаких сломанных пайплайнов.

Как это работает?

RescueSchema оборачивает вашу функцию вызова LLM декоратором. Вы задаёте Pydantic-схему (начиная с v2.10, Pydantic поддерживает строгие модели с коэрцией типов) и список моделей. При первом вызове декоратор генерирует system prompt с описанием схемы. Если JSON не проходит валидацию, библиотека:

  • Извлекает конкретную ошибку (например, "поле 'amount' должно быть числом, получена строка")
  • Формирует новый prompt с просьбой исправить
  • Отправляет повторный запрос той же модели (до 3 попыток)
  • Если всё равно ошибка — переключается на следующую модель из списка

Ключевой трюк: сохранение схемы. RescueSchema кэширует схему в локальный реестр, что ускоряет повторные попытки и позволяет точно указать модели, какое поле и почему не подошло.

1 Базовый пример

Допустим, вы извлекаете данные о транзакциях:

from rescueschema import rescue_schema, SchemaRegistry
from pydantic import BaseModel, Field

class Transaction(BaseModel):
    id: str = Field(description="Уникальный идентификатор")
    amount: float = Field(gt=0)
    currency: str = Field(pattern='^[A-Z]{3}$')

@rescue_schema(schema=Transaction, models=["gpt-4o", "claude-3-opus-20260601"], max_retries=3)
def extract_transaction(text: str) -> Transaction:
    return call_llm(f"Извлеки данные из: {text}")  # встроенная логика

Если модель вернёт {"id": "123", "amount": "сто", "currency": "USD"}, RescueSchema увидит, что amount — строка, а ожидается float. Он отправит модели запрос: "Поле 'amount' должно быть числом, у вас строка. Исправьте.". В 90% случаев модель исправляется на второй попытке.

2 Fallback между моделями

Бывает, модель упорно выдаёт один и тот же бред. RescueSchema переключается на следующую:

@rescue_schema(schema=Transaction, models=["gpt-4o", "claude-3-opus-20260601", "gemini-2.5-pro"])
def extract_safe(text: str) -> Transaction:
    ...

После трёх неудач с GPT-4o библиотека пробует Claude. При этом схема и предыдущие ошибки передаются в prompt для Claude, чтобы не начинать с нуля. Это радикально снижает количество сбоев — в наших тестах с 23% до 2%.

Внимание: не злоупотребляйте fallback на разные провайдеры — это увеличивает latency. Лучше сначала настроить модель и ретраи на одном провайдере, а переключение оставить как крайнюю меру.

Альтернативы: что было до RescueSchema?

Рынок не стоял на месте, но ни одно решение не закрывало всю проблему:

ИнструментФишкиЧего не хватает
Ручные try/except + whileПолный контрольМного кода, нет сохранения схемы, легко забыть про fallback
LangChain RetryВстроенные ретраиНе умеет подсказывать ошибку схемы, нет переключения моделей
Instructor (jxnl)Отличная валидация на летуОриентирован на одну модель, нет fallback, требует ручного повторения при галлюцинациях
OutlinesГенерация строго по грамматикеНе восстанавливается после сбоя, сложно интегрировать с провайдерами API
RescueSchemaВсё вместе: ретраи + подсказки + fallback + кэш схемы

Самое близкое решение — самовосстанавливающийся ETL-пайплайн, где мы руками писали ретраи. RescueSchema превращает это в одну строку декоратора.

Кому реально пригодится?

RescueSchema — не игрушка для pet-проектов. Вот сценарии, где она спасает прод:

  • ETL на LLM — извлечение данных из PDF, сканов, email. Каждая ошибка схемы — битая запись в базе. Самовосстанавливающийся RAG тоже выигрывает: если модель сгенерирует невалидный ответ для реранкера, пайплайн не посыплется.
  • Агенты с функциями — когда LLM вызывает инструменты, параметры должны соответствовать схеме. RescueSchema перехватывает некорректный вызов и повторяет с исправленными аргументами.
  • Парсинг структурированных ответов — например, генерация SEO-метаданных или классификация товаров. Ошибка схемы означает неверную категорию.

Библиотека легко интегрируется с фреймворками вроде LangChain, LlamaIndex и даже с кастомными решениями (достаточно обернуть вызов LLM в декоратор). Деградация контекста тоже частично лечится: чем меньше повторных вызовов с ошибками, тем чище промпт.

Где взять и что дальше?

RescueSchema — open-source проект, пакет на PyPI. Установка:

pip install rescueschema

Или с поддержкой Pydantic v2 и интеграцией с OpenTelemetry:

pip install rescueschema[otel]

Подробности — на GitHub. Там же примеры для GPT-4o, Claude 4 Opus и Gemini 2.5 Pro, а также готовый Docker-образ для Kubernetes.

Совет вдогонку: не думайте, что если модель ответила один раз корректно, то будет всегда. Ставьте RescueSchema с самого начала — переписать пайплайн после серии сбоев в 3 раза дороже.

А если вы всё ещё сомневаетесь — вспомните ту историю, когда обновление llama-server сломало скрипты из-за миграции кэша (было дело). То же самое с пайплайнами: один невалидный JSON — и всё посыпалось. RescueSchema — ваш предохранитель.

Подписаться на канал