0Pricing
AI Prompt Engineering · Урок

Порядок примеров и их актуальность

Как порядок примеров влияет на результат

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

Порядок — скрытый гиперпараметр

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

Рассматривайте порядок как полноценный гиперпараметр для поиска, а не как второстепенную деталь. Сообщать результаты для режима с несколькими примерами без контроля порядка — научно некорректно.

import itertools

def order_search(demos, eval_set, build, max_perms=24):
    perms = list(itertools.permutations(demos))[:max_perms]
    scored = [(p, evaluate(build(p), eval_set)) for p in perms]
    return max(scored, key=lambda x: x[1])

Объяснение смещения к недавним примерам

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

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

# Position weight intuition (illustrative, not exact)
# influence(example_i) roughly increases with proximity to the query
# => the FINAL demo disproportionately anchors the next generation
weights = [0.1, 0.15, 0.25, 0.5]  # earlier ... latest

Потеря в середине контекста

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

Размещайте самые важные или самые сложные примеры в начале или, с учётом смещения к недавним примерам, ближе к концу; никогда не оставляйте их затерянными в середине длинного блока примеров.

def place_key_demos(key, filler):
    # U-shape aware: key items at the edges, filler in the middle
    head = key[: len(key)//2]
    tail = key[len(key)//2 :]
    return head + filler + tail

Преобладающая метка и последняя позиция

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

Для сбалансированной классификации чередуйте метки и следите, чтобы последний пример не относился к одному и тому же классу во всех вариантах запроса.

def alternate_labels(by_label, k):
    labels = list(by_label)
    out = []
    i = 0
    while len(out) < k:
        lbl = labels[i % len(labels)]
        if by_label[lbl]:
            out.append(by_label[lbl].pop())
        i += 1
    return out  # final element varies by construction

Демонстрации, упорядоченные по сходству (по возрастанию)

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

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

def order_by_similarity(query_emb, retrieved):
    scored = [(d, cos(query_emb, d.emb)) for d in retrieved]
    scored.sort(key=lambda x: x[1])     # ascending
    return [d for d, _ in scored]        # most similar last (near query)

Порядок curriculum

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

Это зависит от задачи; проверяйте такой порядок на случайном порядке и порядке по сходству, а не предполагайте заранее, что он будет полезен.

def curriculum(demos, difficulty_fn):
    return sorted(demos, key=difficulty_fn)  # easiest first, hardest last

Измерение чувствительности к порядку

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

Используйте эту метрику для сравнения конструкций промптов: промпт, устойчивый к изменению порядка, безопаснее, чем немного более точный, но нестабильный вариант.

import random

def order_sensitivity(demos, eval_set, build, trials=20):
    accs = []
    for _ in range(trials):
        perm = random.sample(demos, len(demos))
        accs.append(evaluate(build(perm), eval_set))
    return mean(accs), stdev(accs)  # report both; low stdev = robust

Выбор порядка без пробных запросов

Если у Вас нет меток для оценки вариантов порядка, можно выбрать порядок по энтропии предсказаний модели на наборе для проверки: варианты порядка, дающие уверенные предсказания с низкой энтропией, хорошо распределённые по классам, обычно лучше обобщаются (Lu и др., 2022).

Это позволяет выбрать удачную перестановку без размеченного проверочного набора.

def select_order_by_entropy(perms, probe_inputs, build):
    def score(perm):
        ents = [entropy(model_probs(build(perm), x)) for x in probe_inputs]
        return -mean(ents)        # prefer confident, low-entropy orderings
    return max(perms, key=score)

Стабилизация с помощью калибровки

Чувствительность к порядку и смещение в сторону недавнего контекста одинаково усиливают одни и те же метки. Контекстная калибровка уменьшает этот эффект: она оценивает априорное распределение модели на входе без содержательной информации и корректирует вероятности предсказаний, снижая влияние любого отдельного порядка.

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

p_prior = model_probs(build(perm), content_free='N/A')
def calibrate(probs):
    return normalize(probs / p_prior)  # cancels order-induced label skew

Кэширование и стабильность порядка

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

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

# Stable cached prefix + dynamic tail
prefix = render(FIXED_ORDERED_DEMOS)   # cache_control on this block
tail   = render(order_by_similarity(q_emb, retrieved))
prompt = prefix + tail + query

Контрольный список стратегии упорядочивания

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

Затем зафиксируйте порядок для кэширования и повторно проверяйте его при каждом изменении набора примеров.

def final_order(demos, q_emb):
    demos = alternate_labels(group(demos), len(demos))
    return order_by_similarity(q_emb, demos)  # validated, then cached

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

Определите, где следует разместить критически важную демонстрацию.

Итоги

Основные выводы:

  • Порядок примеров — это гиперпараметр, который может изменить точность на несколько процентных пунктов; выполняйте search и сообщайте дисперсию.
  • Смещение в сторону недавнего контекста делает последнюю демонстрацию наиболее влиятельной, а эффект «потерянного в середине» уменьшает вес центральных примеров.
  • Обеспечивайте баланс меток и чередуйте их, упорядочивайте извлечённые демонстрации по возрастающему сходству и учитывайте порядок curriculum.
  • При нехватке меток выбирайте порядок по энтропии и применяйте контекстную калибровку для ослабления перекоса.
  • Зафиксируйте стабильный порядок для кэширования промпта; переставляйте только динамический извлечённый хвост.

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

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

Да — полный текст урока «Порядок примеров и их актуальность» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 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