Практика: CoT для сложных задач

Практика: CoT для сложных задач

В этом уроке применим обе техники — zero-shot CoT и few-shot CoT — к реальной сложной задаче. Сравним результаты и поймём, когда few-shot необходим.

Задача: проверка условий трудового договора

Модель должна проверить, соответствует ли трудовой договор трём критериям:

  1. Указана ли должность.
  2. Указана ли зарплата (числом).
  3. Указан ли испытательный срок (и не превышает ли он 3 месяца — максимально разрешённый по закону).

Модель должна вернуть вердикт: «соответствует» или «не соответствует» с объяснением.

Тестовые примеры

Договор A: «Принять Иванова И.И. на должность инженера с окладом 80 000 руб. Испытательный срок — 2 месяца.»

Договор B: «Принять Петрова П.П. на должность менеджера. Оклад устанавливается штатным расписанием. Испытательный срок — 4 месяца.»

Договор C: «Принять Сидорову А.А. на должность дизайнера с окладом 60 000 руб.»

Попытка 1: Zero-shot (без CoT)

Вход:

Проверь трудовой договор по трём критериям:
1. Указана должность.
2. Указана зарплата (числом).
3. Указан испытательный срок (не более 3 месяцев).

Верни JSON: {"verdict": "соответствует/не соответствует",
"violations": [список нарушений]}

Договор: "Принять Петрова П.П. на должность менеджера. Оклад
устанавливается штатным расписанием. Испытательный срок — 4 месяца."

Выход (типичная ошибка zero-shot):

{
  "verdict": "не соответствует",
  "violations": ["испытательный срок превышает 3 месяца"]
}

Модель заметила превышение срока, но пропустила, что зарплата не указана числом («устанавливается штатным расписанием»). Zero-shot без рассуждения — неполная проверка.

Попытка 2: Zero-shot CoT

Вход:

Проверь трудовой договор по трём критериям:
1. Указана ли должность.
2. Указана ли зарплата числом (не ссылкой на документ).
3. Указан ли испытательный срок. Если да — не превышает ли 3 месяца.

Давай подумаем шаг за шагом. После рассуждения верни JSON с полями
"verdict" и "violations".

Договор: "Принять Петрова П.П. на должность менеджера. Оклад
устанавливается штатным расписанием. Испытательный срок — 4 месяца."

Выход:

Шаг 1 — Должность: в тексте указано «на должность менеджера».
Критерий 1 выполнен.

Шаг 2 — Зарплата: в тексте указано «оклад устанавливается штатным
расписанием». Это не конкретное число, а ссылка на другой документ.
Критерий 2 НЕ выполнен.

Шаг 3 — Испытательный срок: указан «4 месяца». Это превышает
максимально допустимые 3 месяца. Критерий 3 НЕ выполнен.

```json
{
  "verdict": "не соответствует",
  "violations": [
    "зарплата не указана конкретным числом",
    "испытательный срок (4 месяца) превышает максимум в 3 месяца"
  ]
}

Теперь модель проверила ВСЕ три критерия и не пропустила нарушение по зарплате. CoT заставило её пройтись по каждому пункту.

Попытка 3: Few-shot CoT

Для сложной проверки, где критерии могут быть неочевидны, добавим примеры:

Проверяй договор по трём критериям:
1. Указана ли должность.
2. Указана ли зарплата конкретным числом.
3. Указан ли испытательный срок. Если да — не превышает ли 3 месяца.

Рассуждай по шагам как в примерах, затем верни JSON.

Пример 1:
Договор: "Принять Иванова И.И. на должность инженера с окладом
80 000 руб. Испытательный срок — 2 месяца."
Рассуждение:
- Должность: «инженера» — указана явно. Критерий 1: ДА.
- Зарплата: «80 000 руб.» — конкретное число. Критерий 2: ДА.
- Испытательный срок: «2 месяца» — не превышает 3. Критерий 3: ДА.
Вердикт: соответствует. Нарушений нет.

Пример 2:
Договор: "Принять Сидорову А.А. на должность дизайнера с окладом
60 000 руб."
Рассуждение:
- Должность: «дизайнера» — указана. Критерий 1: ДА.
- Зарплата: «60 000 руб.» — конкретное число. Критерий 2: ДА.
- Испытательный срок: не указан в тексте. Но критерий требует
  ПРОВЕРИТЬ наличие срока. Если срок не указан — это не нарушение
  критерия, так как испытательный срок не обязателен. Критерий 3: ДА
  (срок не указан, превышения нет).
Вердикт: соответствует. Нарушений нет.

Теперь проверь договор:
"Принять Петрова П.П. на должность менеджера. Оклад устанавливается
штатным расписанием. Испытательный срок — 4 месяца."

Пример 2 особенно важен — он показывает, как обрабатывать ОТСУТСТВИЕ испытательного срока (это не нарушение). Без этого примера модель могла бы отметить отсутствие срока как нарушение.

Сравнение подходов

ПодходДоговор A (всё верно)Договор B (2 нарушения)Договор C (нет срока)
Zero-shotВерноПропущена зарплатаМожет отметить отсутствие срока как нарушение
Zero-shot CoTВерноВерно (оба нарушения)Может отметить отсутствие срока
Few-shot CoTВерноВерно (оба нарушения)Верно (отсутствие срока = ОК)

Few-shot CoT выигрывает на краевых случаях, because примеры показали модели, как обрабатывать неоднозначности.

Проверь себя

Возьми задачу «Определи, является ли текст новостью или мнением» и напиши промпт с few-shot CoT. Включи 2 примера с рассуждениями.

Итог

  • Zero-shot без CoT — быстрый, но пропускает нарушения в многосоставных проверках.
  • Zero-shot CoT — значительно точнее: модель проверяет каждый критерий.
  • Few-shot CoT — самый точный: примеры показывают, как обрабатывать краевые случаи.
  • Начинай с zero-shot CoT. Если модель ошибается на краевых случаях — добавь few-shot.
  • CoT не только улучшает точность, но и делает ответ ПРОЗРАЧНЫМ — ты видишь, ПОЧЕМУ модель приняла решение.

Что дальше

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

Попробуйте интерактивную версию

Практические задачи, квизы и AI-наставник — бесплатный старт без карты

Перейти к практике