ГлавнаяБлогCOSP: как LLM сам создает примеры без разметки
AI / Нейросети

COSP: как LLM сам создает примеры без разметки

Разбираем Consistency-based Self-adaptive Prompting (COSP): LLM сам генерирует примеры для few-shot, используя собственную уверенность. Узнайте, как повысить точность без ручной работы. Читайте и применяйте!

Al
Редакция Algolitalgolit.ru
7 мин чтения18 августа 2026 г.

Что такое COSP и почему это важно для промптинга

Хотите заставить большую языковую модель рассуждать лучше, но устали выбирать между ручным подбором примеров и низкой точностью? Метод COSP (Consistency-based Self-adaptive Prompting) предлагает третий путь: модель сама создаёт примеры для few-shot, используя собственную уверенность. Разбираем, как это работает и как применить в своих проектах.

Проблема: few-shot требует труда, zero-shot теряет точность

Когда вы пытаетесь улучшить рассуждения LLM, вы обычно сталкиваетесь с двумя кошмарами. Первый — полный few-shot: вы вручную создаёте красивые примеры, вставляете их в промпт, и модель становится умной. Но это нужно делать для каждой задачи, и точность пляшет, если примеры чуть-чуть другие. Второй — zero-shot с трюком «давай подумаем шаг за шагом»: без примеров, чисто и быстро, но модель иногда уходит в уверенное и совершенно неверное рассуждение. Один путь требует усилий, другой — жертвует точностью. COSP говорит: «почему бы не выбрать ни то, ни другое?»

Основная идея: модель уже генерирует отличные примеры

Ключевое прозрение COSP: когда вы задаёте модели вопрос несколько раз, ответы не всегда одинаковы. Иногда 4 из 5 раз ответ совпадает, иногда все 5 разные. Этот разброс — не шум, а информация. Если модель стабильно даёт один и тот же ответ, она как бы говорит: «Я в этом уверена». Если ответы разбросаны — «Я гадаю». COSP использует этот сигнал, чтобы отобрать собственные ответы модели, достойные стать примерами для второго прохода. Модель производит сырой материал, а согласованность (consistency) выступает фильтром качества. Это лучший из двух миров: нулевая работа zero-shot и направляющая точность few-shot.

Как работает COSP: два этапа и финальное голосование

COSP работает в два этапа, затем завершается голосованием. На первом этапе для каждого вопроса модель генерирует несколько цепочек рассуждений. Затем COSP оценивает их по трём критериям: согласованность (насколько ответы совпадают), повторяемость (штраф за зацикливание) и разнообразие (чтобы примеры не были клонами). Отобранные примеры добавляются к исходным вопросам, модель запускается снова, и ответ выбирается большинством голосов.

Критерий 1: Согласованность

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

Критерий 2: Повторяемость

Иногда модель застревает в цикле и повторяет одну фразу, как заезженная пластинка. Такой вырожденный вывод коррелирует с плохим рассуждением. COSP штрафует такие ответы, чтобы они не проскочили в набор примеров только потому, что «согласованы» сами с собой.

Критерий 3: Разнообразие

Если все выбранные примеры — по сути один и тот же вопрос, они мало чему учат. COSP поощряет разнообразие, чтобы итоговый промпт покрывал разные аспекты задачи, а не четыре клона.

Согласованность как измеритель уверенности: пример

Рассмотрим классический вопрос: «У Генри было 11 долларов, он получил ещё 18, потратил 10 на игру. Сколько у него осталось?» Сэмплируем модель несколько раз и получаем разброс ответов. Три из четырёх попыток дают 19. Этот плотный кластер — низкая энтропия, что читается как высокая уверенность, и такой ответ можно использовать как пример. Одинокий 27 проигрывает голосование и не сбивает с толку. Согласованность выполнила контроль качества, который обычно требует ручной разметки.

Важное предостережение

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

Числа: насколько это помогает

Честный ответ: помогает существенно и почти бесплатно. На бенчмарках рассуждений COSP стабильно превосходит обычный zero-shot chain-of-thought и часто сравнивается или превосходит few-shot без ручных примеров. Авторы сообщают об улучшении до 15% по сравнению с zero-shot на трёх разных LLM. Вот примерные результаты на задачах рассуждения:

  • MultiArith: zero-shot CoT ~67%, few-shot CoT ~81%, COSP ~85%
  • AddSub: ~69%, ~72%, ~79%
  • GSM8K: ~21%, ~30%, ~30%
  • StrategyQA: ~57%, ~68%, ~65%

Заметьте закономерность: на нескольких задачах COSP тихо обгоняет даже few-shot, требующий ручного труда. На более сложных — попадает в ту же зону. В любом случае вы получаете результаты уровня few-shot, платя цену zero-shot.

Практический вывод: как применить COSP в своих проектах

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

import random
from collections import Counter

def generate_answer(question, model):
    # Здесь вызов вашей LLM, возвращающей ответ
    return model.generate(question)

def cosp_prompt(question, model, num_samples=5):
    # Шаг 1: генерируем несколько ответов
    answers = [generate_answer(question, model) for _ in range(num_samples)]
    # Шаг 2: фильтруем по согласованности (простое голосование)
    counter = Counter(answers)
    most_common = counter.most_common(1)[0][0]
    # Шаг 3: используем этот ответ как пример в новом промпте
    prompt = f"Пример: {question} -> {most_common}\nТеперь ответь: {question}"
    return model.generate(prompt)

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

#COSP#промптинг#LLM#самоадаптация#согласованность
Al
Редакция Algolit

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

Хочешь закрепить знания на практике?

Решай задачи на Algolit — интерактивная платформа для обучения

Начать бесплатно →