AI Prompt Engineering · Урок

Проверяющие схемы и правила

Обеспечение соблюдения ограничений

Урок 3 из 413 шагов

«Проверяющие схемы и правила» — бесплатный урок AI Prompt Engineering на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Prompt Engineering, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Prompt Engineering содержит 4 уроков всего.

Валидаторы обеспечивают соблюдение контракта

Валидатор — это защитный механизм, который проверяет вывод на соответствие явной спецификации: схеме JSON, набору бизнес-правил или им обоим. В отличие от классификатора модерации, валидатор детерминирован и полностью поддаётся аудиту: один и тот же вход всегда даёт один и тот же вердикт.

Слой проверки схемы

Первый валидатор проверяет, что вывод соответствует структурному контракту. Собирайте все ошибки, а не только первую, чтобы обратная связь для исправления была полной.

import jsonschema
def schema_errors(obj, schema):
    v = jsonschema.Draft202012Validator(schema)
    return [f"{list(e.path) or 'root'}: {e.message}"
            for e in v.iter_errors(obj)]

За пределами схемы: бизнес-правила

Схемы не могут выразить всё. Схема может указать, что discount — это число, но не то, что оно не должно превышать промежуточную сумму. Валидаторы правил кодируют такие инварианты, связывающие несколько полей и учитывающие предметную область.

RULES = [
  ('discount_le_subtotal', lambda o: o['discount'] <= o['subtotal']),
  ('total_consistent', lambda o: o['total'] == o['subtotal'] - o['discount']),
  ('currency_supported', lambda o: o['currency'] in SUPPORTED)
]
def rule_errors(o):
    return [name for name, fn in RULES if not fn(o)]

Типизированные модели как валидаторы

Библиотека типизированных моделей, например Pydantic, одновременно служит генератором схем и валидатором, поддерживая специальные валидаторы для правил. Ошибка разбора и есть вердикт.

from pydantic import BaseModel, field_validator

class Order(BaseModel):
    subtotal: float
    discount: float
    total: float

    @field_validator('discount')
    @classmethod
    def discount_ok(cls, v, info):
        if v < 0:
            raise ValueError('discount must be non-negative')
        return v

Валидаторы опоры на источники и цитат

Для выводов RAG проверяйте, что утверждения подтверждаются предоставленным контекстом. Требуйте от модели указывать идентификаторы источников, затем проверяйте условие exists для каждого указанного идентификатора и убеждайтесь, что цитируемые фрагменты действительно встречаются в источнике. Отклоняйте ответы, в которых указаны отсутствующие или выдуманные источники.

def citations_valid(answer, sources):
    for cite in answer['citations']:
        if cite['source_id'] not in sources:
            return False
        if cite['quote'] not in sources[cite['source_id']]:
            return False
    return True

Проверки ссылочной целостности и межсистемные проверки

Некоторые правила требуют внешних запросов: существует ли указанный идентификатор заказа, есть ли товар в наличии, попадает ли дата в допустимый интервал? Эти валидаторы обращаются к вашим системам. Поддерживайте их высокую скорость, используя кэширование и пакетную обработку, поскольку они находятся на пути формирования ответа.

def order_exists(o):
    return db.exists('SELECT 1 FROM orders WHERE id = %s', o['order_id'])

Вердикты с указанием уровня критичности

Не все нарушения одинаково важны. Помечайте каждое правило уровнем критичности, чтобы конвейер мог выбрать правильное действие: безусловно блокировать критические нарушения, генерировать ответ заново при проблемах качества и пропускать с предупреждением незначительные нарушения.

RULE_SEVERITY = {
  'discount_le_subtotal': 'critical',
  'total_consistent': 'critical',
  'tone_professional': 'warning'
}

Объединяйте валидаторы в порядке выполнения

Запускайте валидаторы начиная с самых дешёвых и немедленно прекращайте проверку при безусловных сбоях: сначала схема, затем правила в памяти, потом внешние запросы и, наконец, проверки с оценкой моделью. Это снижает затраты на наиболее распространённом пути отклонения.

def validate_all(obj):
    errs = schema_errors(obj, SCHEMA)
    if errs: return Reject(errs, 'critical')
    errs = rule_errors(obj)
    if errs: return Reject(errs, max_severity(errs))
    if not order_exists(obj): return Reject(['order_id'], 'critical')
    return Accept()

Валидаторы формируют обратную связь для исправления

Польза валидатора многократно возрастает, когда его сообщения поступают в цикл исправления. Формируйте ошибки, пригодные для машинной обработки, с указанием пути к полю, нарушенного правила и значения, вызвавшего ошибку, чтобы модель могла точно исправить её за один шаг.

{'errors': [
  {'path': 'discount', 'rule': 'discount_le_subtotal',
   'got': 120, 'limit': 100}
]}

Тестируйте сами валидаторы

Ошибочный валидатор незаметно пропускает плохой вывод или блокирует хороший. Тестируйте каждое правило модульными тестами на положительных и отрицательных наборах данных, а для числовых инвариантов добавляйте тесты на основе свойств. Набор валидаторов — это критически важный для рабочей системы код, а не скрипт.

def test_discount_rule():
    assert rule_errors({'discount':10,'subtotal':100,'total':90}) == []
    assert 'discount_le_subtotal' in rule_errors(
        {'discount':120,'subtotal':100,'total':-20})

Валидаторы и ограниченное декодирование

Ограниченное декодирование предотвращает структурные ошибки во время генерации, но не может обеспечить соблюдение смысловых требований: оно не знает ваших бизнес-правил. Валидаторы выявляют смысловые нарушения постфактум. Используйте оба подхода: декодирование — для формы, валидаторы — для смысла, а цикл исправления — для устранения расхождений.

Быстрая проверка

Схема JSON указывает, что скидка и промежуточная сумма являются числами. Модель возвращает скидку 120 при промежуточной сумме 100. Какой слой должен это обнаружить?

Итоги

Валидаторы схем и правил:

  • Проверка схемы охватывает структуру, а валидаторы правил — смысл.
  • Типизированные модели создают схемы и выполняют проверку в одном месте.
  • Для RAG и потоков данных добавляйте проверки опоры на источники, цитат и ссылочной целостности.
  • Указывайте критичность, выполняйте проверки начиная с самых дешёвых и передавайте точные ошибки для исправления.
  • Тестируйте валидаторы как критически важный для рабочей системы код.

Далее: проверка с помощью самокритики, когда модель проверяет собственный вывод.

Можно начать бесплатно

Изучай AI Prompt Engineering с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
53
Уроки
199

Часто задаваемые вопросы

Урок «Проверяющие схемы и правила» бесплатный?

Да — полный текст урока «Проверяющие схемы и правила» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Prompt Engineering, подпишись на CoddyKit PRO. Курс AI Prompt Engineering содержит 4 уроков всего.

Чему я научусь в уроке «Проверяющие схемы и правила»?

Обеспечение соблюдения ограничений Ты практикуешь AI Prompt Engineering с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать AI Prompt Engineering?

Предыдущий опыт не требуется. AI Prompt Engineering на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Проверяющие схемы и правила»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке AI Prompt Engineering?

Да. Каждый урок AI Prompt Engineering включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Что такое защитные ограничения
  2. Фильтрация входных и выходных данных
  3. Проверяющие схемы и правила
  4. Проверка с помощью самокритики
← Назад к AI Prompt Engineering