Всем привет! В первой части мы разобрали теорию: почему LLM «забывают» информацию в середине промпта, как на это влияет архитектура внимания и при чём здесь ротационные кодирования (RoPE). Мы выяснили, что эффект Lost in the Middle — это закономерное следствие того, как устроены современные трансформеры и как они обучаются.

Но насколько всё плохо на практике? Если разработчик модели заявляет контекстное окно в 128k или даже 1M токенов — можем ли мы на него рассчитывать в реальном продакшене?

Во второй части мы переходим от теории к цифрам на бенчмарках. Мы разберём, почему стандартные тесты "иголка в стоге сена" (NIAH) безнадёжно устарели и как новые метрики вроде RULER и NoLiMa показывают реальное «рабочее» окно моделей, которое иногда в 60 раз меньше заявленного.

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

Каково состояние на текущий момент?

Ну хорошо, эффект lost in the middle обнаружили, позиционное смещение показали, даже наметили его основные причины. А дальше что? Кажется, что за прошедшие несколько лет уже должны были найти решение этой проблемы, но на практике всё гораздо менее однозначно.

Во‑первых, если говорить о мейнстримных авторегрессионных LLM, от каузального внимания сейчас никуда не уйти.

Практически все современные большие языковые модели обучаются на задаче предсказания следующего токена по предыдущим: каждый токен на каждом слое может смотреть только назад. Это базовый механизм трансформеров‑декодеров, обеспечивающий генерацию текста слева направо. Работы про attention sink и стриминговым моделям [1,2] показывают, что именно каузальная организация внимания и процесса обучения приводят к систематическому завышению вкладов первых токенов. Эти токены начинают получать непропорционально высокие веса внимания от последующих токенов, даже когда они почти не несут семантики. В итоге они превращаются в «раковины/поглотители внимания» (attention sinks), куда стекается значительная часть внимания, а остальным токенам остаётся лишь малая его доля.

Теоретически, можно уйти в совсем другие архитектуры (RetNet, Mamba, Hyena и так далее), где нет классического self‑attention, но это уже другие семейства моделей, которые пока в основном находятся в исследовательской фазе [3-5].

Во‑вторых, от RoPE сейчас тоже никто массово не отказывается.

Роторное позиционное кодирование (RoPE), предложенное в RoFormer [6], стало де‑факто стандартом: LLaMA, LLaMA-2/3, Mistral, Mixtral, Gemma, многие Qwen‑семейства и другие открытые SOTA‑модели используют именно RoPE или его модификации [7].

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

По сути, исследования ведутся в двух основных направлениях:

  • Выравнивание внимания без дообучения моделей и изменения механизма внимания или позиционного кодирования: либо переинтерпретируют/калибруют уже вычисленные attention‑веса, либо управляют контекстом и позициями на этапе инференса [1, 8-10].

  • Изменение механизма позиционного кодирования, в основном модификация RoPE для более сглаженного распределения весов по позициям токенов. Тут целью является изменить саму форму позиционного кодирования, чтобы ослабить long‑term decay (долгосрочный распад) для дальних токенов и сделать чувствительность по позициям более гладкой, без «провалов» в середине [11-14].

Таким образом, разработчики моделей всячески стараются справиться с этим ограничением LLM, но подтверждений о преодолении эффекта «потерянного в середине» и снижении влияния позиционного смещения нет. Каждый поставщик моделей всякий раз заявляет о расширении окна, о невероятных метриках работы с контекстом и все более успешном решении как теоретических, так и прикладных задач. Но на деле — мы до сих пор видим ухудшение качества работы моделей на длинных контекстах.

А сколько текста модель учитывает эффективно?

Предложены бенчмарки, которые помогают оценить возможности моделей извлекать полезную информацию из контекста. Один из первых и наиболее популярных — «иголка в стоге сена» (Needle‑in‑a-Haystack, NIAH). Это тест, ориентированный на проверку возможностей модели вытащить из длинного текста заранее вставленный туда «секретный» фрагмент. На сегодняшний день, современные модели практически идеально справляются с такой задачей.

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

RULER: как модель извлекает несколько фактов из контекста

Бенчмарк RULER [15] приближает задачу работы LLM к более прикладному использованию: модель должна извлекать несколько фактов или выбирать правильную «иглу» среди нескольких вставок релевантной информации в зашумлённый контекст.

Описание бенчмарка RULER

Бенчмарк состоит из нескольких блоков задач:

  • В задачах в духе NIAH («игла в стоге сена») модель должна найти число, спрятанное в большом тексте: например, в десятке абзацев встречается фраза «magic number for long‑context is 12345», а вопрос: «Какое magic number для long‑context?»; в варианте Multi‑values таких чисел несколько, и нужно перечислить все.

  • В задаче Variable Tracking модель читает цепочку присваиваний вида VAR X1 = 12345; VAR X2 = X1; VAR X3 = X2 и должна ответить: «Какие переменные равны 12345?» → X1, X2, X3.

  • В задачах Common/Frequent Words Extraction в длинной «каше» слов нужно назвать самые частые, например из списка с повторениями выделить aaa, ccc, iii.

  • В блоке задач QA по нескольким коротким документам в большом контексте модель должна выбрать тот, который содержит ответ на вопрос.

Конфигурация и результаты эксперимента

В эксперименте авторы тестируют 17 длинноконтекстных LLM (15 open‑source и 2 закрытые: Gemini-1.5-Pro и GPT-4) разных размеров от 7B до 8×22B (MoE), с заявленным окном от 32k до 1M токенов. Все модели запускают в одинаковых условиях при длинах контекста от 4k до 128k. Ответ засчитывается, если правильный вывод присутствует в сгенерированном тексте.

В качестве порогового значения берут качество Llama2-7B на длине 4k (85.6%) и определяют эффективную длину контекста как максимальную длину, на которой средняя точность модели по всем задачам выше этого порога.

Таблица результатов демонстрирует явное расхождение между заявленным окном контекста и окном, в котором модель эффективно решает задачи извлечения информации:

Модели

Заявленное окно

Эффективное окно

Llama2 (7B)

4K

-

Gemini-1.5-Pro

1M

>128K

GPT-4

128K

64K

Llama31 (70B)

128K

64K

Qwen2 (72B)

128K

32K

Command‑R‑plus (104B)

128K

32K

GLM4 (9B)

1M

64K

Llama3.1 (8B)

128K

32K

GradientAI/Llama3 (70B)

1M

16K

Mixtral-8×22B (39B/141B)

64K

32K

Полная таблица результатов эксперимента RULER

В таблице результатов: по строкам — модели, по столбцам — длины контекста, цифры — средняя accuracy по всем задачам; значения, превышающие порог 85.6%, подчёркнуты. Дополнительно для каждой модели указаны её заявленное и эффективное окно, а также два взвешенных средних (wAvg (inc) и wAvg (dec)), которые агрегируют качество по всем длинам, присваивая больший вес либо длинным контекстам (wAvg inc), либо коротким (wAvg dec). Это имитирует сценарии, где в реальном использовании чаще встречаются либо длинные, либо короткие последовательности. По этим взвешенным средним модели ранжируются (ранг указан индексом у значения).

Таблица: Результаты тестирования моделей на бенчмарке RULER (из статьи RULER [15])

Models

Claimed Length

Effective Length

4K

8K

16K

32K

64K

128K

Avg.

wAvg. (inc)

wAvg. (dec)

Llama2 (7B)

4K

-

85.6

Gemini-1.5-Pro

1M

>128K

96.7

95.8

96.0

95.9

95.9

94.4

95.8

95.5(1st)

96.1(1st)

GPT-4

128K

64K

96.6

96.3

95.2

93.2

87.0

81.2

91.6

89.0(2nd)

94.1(2nd)

Llama3.1 (70B)

128K

64K

96.5

95.8

95.4

94.8

88.4

66.6

89.6

85.5(4th)

93.7(3rd)

Qwen2 (72B)

128K

32K

96.9

96.1

94.9

94.1

79.8

53.7

85.9

79.6(9th)

92.3(4th)

Command‑R-plus (104B)

128K

32K

95.6

95.2

94.2

92.0

84.3

63.1

87.4

82.7(7th)

92.1(5th)

GLM4 (9B)

1M

64K

94.7

92.8

92.1

89.9

86.7

83.1

89.9

88.0(3rd)

91.7(6th)

Llama3.1 (8B)

128K

32K

95.5

93.8

91.6

87.4

84.7

77.0

88.3

85.4(5th)

91.3(7th)

GradientAI/Llama3 (70B)

1M

16K

95.1

94.4

90.8

85.4

80.9

72.1

86.5

82.6(8th)

90.3(8th)

Mixtral-8×22B (39B/141B)

64K

32K

95.6

94.9

93.4

90.9

84.7

31.7

81.9

73.5(11th)

90.3(9th)

Yi (34B)

200K

32K

93.3

92.2

91.3

87.5

83.2

77.3

87.5

84.8(6th)

90.1(10th)

Phi3-medium (14B)

128K

32K

93.3

93.2

91.1

86.8

78.6

46.1

81.5

74.8(10th)

88.3(11th)

Mistral‑v0.2 (7B)

32K

16K

93.6

91.2

87.2

75.4

49.0

13.8

68.4

55.6(13th)

81.2(12th)

LWM (7B)

1M

<4K

82.3

78.4

73.7

69.1

68.1

65.0

72.8

69.9(12th)

75.7(13th)

DBRX (36B/132B)

32K

8K

95.1

93.8

83.6

63.1

2.4

0.0

56.3

38.0(14th)

74.7(14th)

Together (7B)

32K

4K

88.2

81.1

69.4

63.0

0.0

0.0

50.3

33.8(15th)

66.7(15th)

LongChat (7B)

32K

<4K

84.7

79.9

70.8

59.3

0.0

0.0

49.1

33.1(16th)

65.2(16th)

LongAlpaca (13B)

32K

<4K

60.6

57.0

56.6

43.6

0.0

0.0

36.3

24.7(17th)

47.9(17th)

Для контраста, можно посмотреть результаты моделей на стандартном наборе задач NIAH, где большинство моделей дают почти 100% точности даже на очень длинных контекстах, что подчёркивает: «найди дословную фразу» не является хорошим индикатором реальных способностей модели к работе с длинным контекстом.

Результаты стандартного бенчмарка NIAH (из статьи RULER)

Models

Claimed Length

4K

8K

16K

32K

64K

128K

Avg.

Gemini-1.5

1M

100.0

100.0

100.0

98.0

100.0

100.0

99.7

GPT-4

128K

100.0

100.0

100.0

100.0

100.0

100.0

100.0

Llama3.1 (70B)

128K

100.0

100.0

100.0

100.0

100.0

99.6

99.9

Llama3.1 (8B)

128K

100.0

100.0

100.0

100.0

100.0

99.6

99.9

Qwen2 (72B)

128K

100.0

100.0

100.0

100.0

99.8

56.4

92.7

Command‑R‑plus (35B)

128K

100.0

100.0

100.0

100.0

99.8

86.0

97.6

GLM4 (9B)

128K

100.0

100.0

100.0

100.0

100.0

100.0

100.0

GradientAI/Llama3 (70B)

1M

100.0

100.0

100.0

99.6

99.2

97.8

99.4

Mixtral-8×22B (39B/141B)

64K

100.0

100.0

100.0

100.0

99.6

24.2

87.3

Yi (34B)

200K

100.0

100.0

100.0

100.0

100.0

100.0

100.0

Phi3-medium (14B)

128K

100.0

99.8

100.0

99.8

99.8

73.8

95.5

Mistral‑v0.2 (7B)

32K

100.0

100.0

100.0

97.0

70.0

7.4

79.1

LWM (7B)

1M

100.0

100.0

100.0

100.0

100.0

100.0

100.0

DBRX (36B/132B)

32K

100.0

100.0

90.0

93.2

0.8

0.0

64.0

Together (7B)

32K

100.0

100.0

100.0

99.8

0.0

0.0

66.6

LongChat (7B)

32K

100.0

100.0

97.6

98.4

0.0

0.0

66.0

LongAlpaca (13B)

32K

90.2

90.2

88.4

83.4

0.0

0.0

58.7

Mixtral‑base (8×7B)

32K

100.0

100.0

100.0

100.0

85.2

34.8

86.7

Mistral‑base (7B)

32K

100.0

100.0

100.0

100.0

94.8

0.4

82.5

Jamba‑base (52B)

256K

100.0

100.0

98.8

99.8

99.8

86.4

97.5

LWM‑base (7B)

1M

100.0

99.4

97.8

98.6

98.2

98.6

98.8

LongLoRA‑base (7B)

100K

99.8

100.0

100.0

99.8

100.0

0.0

83.3

Yarn‑base (7B)

128K

97.4

97.8

91.4

85.4

86.6

20.0

79.8

Together‑base (7B)

32K

100.0

100.0

100.0

99.8

0.0

0.0

66.6

Вывод по RULER

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

Это позволяет эмпирически оценить эффективную длину контекста: для топовых моделей она оказывается меньше половины заявленного окна, а для нишевых моделей – иногда на порядок ниже. Уже на этом этапе видно, что поддержка окна 128k–1M токенов не является гарантией способности надёжно извлекать и комбинировать факты на всей этой длине.

NoLiMa: как модель извлекает ассоциативную информацию из контекста

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

Этот пробел пытаются закрыть в работе NoLiMa: Long‑Context Evaluation Beyond Literal Matching [16]. Авторы формируют бенчмарк, в котором вопросы и «иглы» содержат ключевые слова, связанные ассоциативно (через знания о мире или здравый смысл), а прямых лексических совпадений почти нет.

Описание бенчмарка NoLiMa

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

«На самом деле, Юки живёт рядом с оперным театром Semperoper»

Вопрос при этом звучит иначе:

Какой персонаж бывал в Дрездене?

слово «Дрезден» в игле не встречается, и модель должна знать, что Semperoper находится в Дрездене, и вернуть — Yuki.

В других шаблонах ассоциация строится на здравом смысле: игла говорит, что герой много лет веган, а вопрос — «Кто не может есть блюда из рыбы?». Есть и более сложные двухшаговые случаи, где нужно сначала связать Дрезден с землёй Саксония, а уже потом найти персонажа.

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

В NoLiMa эксперимент устроен аналогично RULER. Оценивают 12 популярных моделей с заявленным окном ≥128k токенов на длинах 250 - 32k.

В отличие от RULER, где порог качества фиксирован, здесь для каждой модели отдельно считают base score — среднюю максимальную точность на коротких длинах (250/500/1k). Эффективная длина определяют как максимальную длину контекста, на которой средняя точность остаётся ≥85% от этого base score.

Таблица результатов демонстрирует еще более драматичные цифры:

Модели

Заявленное окно

Эффективное окно

GPT-4o

128K

8K

Llama 3.3 70B

128K

2K

Llama 3.1 405B

128K

2K

Gemini 1.5 Pro

2M

2K

Mistral Large 2

128K

2K

Claude 3.5 Sonnet

200K

4K

Gemini 1.5 Flash

1M

<1K

GPT-4o mini

128K

<1K

Полная таблица результатов тестирования моделей на бенчмарке NoLiMa (из статьи NoLiMa)

Models

Claimed Length

Effective Length

Base Score (×0.85: Thr.)

1K

2K

4K

8K

16K

32K

GPT-4o

128K

8K

99.3 (84.4)

98.1

98.0

95.7

89.2

81.6

69.7

Llama 3.3 70B

128K

2K

97.3 (82.7)

94.2

87.4

81.5

72.1

59.5

42.7

Llama 3.1 405B

128K

2K

94.7 (80.5)

89.0

85.0

74.5

60.1

48.4

38.0

Llama 3.1 70B

128K

2K

94.5 (80.3)

91.0

81.8

71.2

62.7

51.8

43.2

Gemini 1.5 Pro

2M

2K

92.6 (78.7)

86.4

82.7

75.4

63.9

55.5

48.2

Jamba 1.5 Mini

256K

<1K

92.4 (78.6)

76.3

74.1

70.8

62.2

52.7

43.6

Command R+

128K

<1K

90.9 (77.3)

77.0

73.5

66.3

39.5

21.3

7.4

Mistral Large 2

128K

2K

87.9 (74.7)

86.1

85.5

73.3

51.5

32.6

18.7

Claude 3.5 Sonnet

200K

4K

87.6 (74.4)

85.4

84.0

77.6

61.7

45.7

29.8

Gemini 1.5 Flash

1M

<1K

84.7 (72.0)

68.6

61.6

51.0

44.4

35.5

28.6

GPT-4o mini

128K

<1K

84.9 (72.2)

67.7

58.2

44.1

32.6

20.6

13.7

Llama 3.1 8B

128K

1K

76.7 (65.2)

65.7

54.4

44.1

31.9

22.6

14.2

Lost in the middle и общий провал качества

В работе NoLiMa также исследуется эффект lost in the middle. В анализе глубины вставки иглы авторы двигают факт по всему окну (до 32k токенов) и получают классическую картинку: для простых «одношаговых» задач (one‑hop) качество заметно проваливается, когда нужный фрагмент оказывается в середине контекста, тогда как начало и конец держатся лучше.

Для более сложных двухшаговых ассоциаций (two‑hop) картина другая: при увеличении длины контекста просаживается уже вся кривая, включая края, то есть проблема выходит за рамки чисто позиционного эффекта. Чтобы разделить влияние позиции и общей нагрузки на внимание, авторы вводят режим «Last 2K», где игла всегда лежит в последних 2k токенов, а общий размер контекста растёт. В этом режиме относительная позиция факта и вопроса фиксирована, и становится видно, что для сложных задач деградация качества связана не только с «потерей середины», а с тем, что модели в принципе тяжело надёжно извлекать ассоциативную информацию на фоне очень длинного нерелевантного контекста.

Вывод по NoLiMa

Тест NoLiMa даёт гораздо менее оптимистичную картину работы моделей с длинными контекстами в сценариях, похожих на реальные задачи извлечения знаний. Эффективная длина окна здесь уже не превышает 8k токенов (для GPT-4o, при заявленных 128k), то есть примерно в 16 раз меньше обещанного, а для большинства моделей — всего порядка 2k токенов, что уже в 60+ раз меньше заявленного окна.

Таким образом, оба бенчмарка показывают схожую картину: несмотря на большие заявленные окна и успехи на «ванильном» NIAH, эффект lost in the middle и общая перегрузка внимания при росте контекста до сих пор не преодолены. Расширение контекстного окна означает, что модель способна технически принять на вход сотни тысяч токенов, но это не гарантирует, что она сможет надёжно проанализировать этот объём и сделать сложные (и даже не слишком сложные) аналитические выводы по всей длине контекста.

Основные рекомендации по архитектурным решениям LLM‑приложений для эффективного учёта контекста

С учётом обсуждённых выше эффектов потери в середине, позиционного смещения, долгосрочного распада (lost in the middle, positional bias, long‑term decay) и общей сложности ассоциативного связывания в длинных контекстах, архитектурные решения LLM‑приложений имеет смысл планировать с опорой на следующие принципы:

  • Держите контекст минимальным и целевым. Включайте только те фрагменты, без которых модель точно не сможет ответить; каждый абзац «на всякий случай» забивает окно и выталкивает важное в ту самую «слепую» середину.

  • Разделяйте «долгую память» и «рабочую память». Историю диалога, факты и прошлые ответы храните во внешнем хранилище (БД, векторное хранилище), а в промпт поднимайте короткую аннотацию (summary) и несколько действительно релевантных кусочков, вместо того чтобы каждый раз тащить всё.

  • Используйте ретривер и ранжирование, а не «сырой слив» документов. Сначала отберите топ‑N кандидатов (BM25/векторный поиск), затем сузьте их до k самых полезных (re‑ranking отдельной моделью или самой LLM) — и только их подавайте в промпт.

  • Структурируйте промпт с учётом позиции. В начало ставьте цель и ключевые правила, в середину — сырой контекст (документы, выдержки), в конец — краткое резюме важных фактов и сам вопрос. Дублируйте критичные вещи ближе к хвосту, где внимание модели статистически сильнее.

  • Используйте шаблоны и сигнатуры вместо «простыни» правил. Задайте 2–3 режима работы и формат ответа (JSON‑схема, пара примеров), вместо десятков частных «если/то», которые раздувают промпт и мешают модели увидеть нужный текст.

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

  • Не дублируйте в промпте то, что модель и так знает. Общие знания (география, базовые определения, школьная математика) лучше оставить на совести LLM, а окно тратить на доменные, свежие и локальные факты.

  • Контролируйте рост системного промпта и проверяйте «короткую версию». Если инструкции превратились в целую повесть, это сигнал к рефакторингу: вынесите часть логики в код/конфиг и обязательно сравните качество на коротком и длинном варианте промпта. Короткий промпт на практике часто работает не хуже длинного, а с учётом контекста даже лучше.

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

Если тема кажется вам интересной, я продолжаю разбирать подобные вещи у себя в Telegram короткими постами, экспериментами и примерами из практики: «надо разобраться | заставляем LLM работать».

Литература:

  1. Efficient Streaming Language Models with Attention Sinks

  2. When Attention Sink Emerges in Language Models: An Empirical View

  3. Retentive Network: A Successor to Transformer for Large Language Models

  4. Mamba: Linear‑Time Sequence Modeling with Selective State Spaces

  5. Hyena Hierarchy: Towards Larger Convolutional Language Models

  6. RoFormer: Enhanced Transformer with Rotary Position Embedding

  7. RoPE: Rotary Positional Embedding

  8. Found in the Middle: Calibrating Positional Attention Bias Improves Long Context Utilization

  9. YaRN: Efficient Context Window Extension of Large Language Models

  10. LongRoPE2: Near‑Lossless LLM Context Window Scaling

  11. Found in the Middle: How Language Models Use Long Contexts Better via Plug‑and‑Play Positional Encoding

  12. Understanding the RoPE Extensions of Long‑Context LLMs: An Attention Perspective

  13. VRoPE: Rotary Position Embedding for Video Large Language Models

  14. 3D‑RPE: Enhancing Long‑Context Modeling Through 3D Rotary Position Encoding

  15. RULER: What's the Real Context Size of Your Long‑Context Language Models?

  16. NoLiMa: Long-Context Evaluation Beyond Literal Matching

Комментарии (4)


  1. iliaP
    06.01.2026 09:44

    Благодарствую, очень позновательно!

    Вопрос по поводу передачи "summary" - какими средствами этот саммари должен формулироваться, чтобы он был по существу ?