Практика: CoT для сложных задач
Практика: CoT для сложных задач
В этом уроке применим обе техники — zero-shot CoT и few-shot CoT — к реальной сложной задаче. Сравним результаты и поймём, когда few-shot необходим.
Задача: проверка условий трудового договора
Модель должна проверить, соответствует ли трудовой договор трём критериям:
- Указана ли должность.
- Указана ли зарплата (числом).
- Указан ли испытательный срок (и не превышает ли он 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. В следующем модуле разберём декомпозицию — искусство разбивать сложную задачу на цепочку промптов, каждый из которых решает свою подзадачу.