Мое понимание LLM с точки зрения пользователя очень простое: есть сетка с весами (обученные параметры), токенизатор и декодер (преобразователи текста во входные и выходные токены), и трансформер (слои внимания), который перерабатывает входные токены и шаг за шагом предсказывает новые.

Я пробовал разные Модели (GPT, Gemini, Deepseek, Grok) — все они, на мой взгляд, работают примерно одинаково. На один и тот же запрос они дают очень похожие, а иногда и идентичные ответы. Это ожидаемо, ведь все современные LLM построены на одной и той же архитектуре — трансформерах.

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

Текст - это основа

Я как‑то попробовал прицепить картинку к вопросу для Deepseek'а и получил в ответ что‑то типа «не могу извлечь текст из изображения». LLM — это прежде всего про текст. Все знания, которые у них есть — из текста. Видео и аудио для дальнейшей обработки превращаются в текст. Результат — текстовый. Да, Модели могут создавать другие медиа на основе текста (изображения, видео, аудио), но это вне моих интересов.

Поэтому в основе ADSM (Agent Driven Software Management) лежит обработка текстов — тексты на входе и тексты на выходе.

Архитектура LLM

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

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

Первая попавшаяся схема из интернетов
Первая попавшаяся схема из интернетов

В целом архитектуру сети можно разложить по трём направлениям:

  • Ширина — количество условных «нейронов» в одном слое сети. Это размерность вектора, в котором модель хранит представление («смысл») каждого токена. Чем шире вектор, тем больше признаков и оттенков значений способна различать модель. Но вместе с этим растут и вычислительные затраты.

  • Глубина — количество слоёв сети. Каждый слой последовательно преобразует вектор токена, добавляя новые взаимосвязи и уровни абстракции. Чем глубже сеть, тем сложнее закономерности она способна улавливать и тем более связные ответы может строить. Но вместе с этим растут и вычислительные затраты.

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

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

Контекстное окно

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

Вообще, в диалоге с Моделью каждый ответ Модели на ваш вопрос на следующем шаге становится входными данными в том же контекстном окне:

А это я уже сам рисовал.
А это я уже сам рисовал.

Каждая Модель имеет ограничения как на размер самого контекстного окона, так и на размер генерируемого результата (данные GPT‑чатика):

Модель

Общее окно

Макс. выход

Claude 3.7 Sonnet

200k

~128k

GPT-4o

128k

~64k

GPT-4.1

1M

32k

Gemini 1.5 Pro

1M (до 2M)

~60–65k

Gemini 2.5 Pro

1M

н/д

Grok 3

1M (заявлено)

~128k

Grok 4

128k–256k

н/д

Важно очень чётко понимать два момента:

  1. Какой максимальной размерности текстовый файл ваша Модель в принципе способна сгенерировать в результате.

  2. Какой максимальной размерности текстовый файл ваша Модель в принципе способна принять в качестве входного контекста.

Разработчики различных Моделей заявляют о больших контекстных окнах, но нужно помнить об их архитектуре: вычислительные затраты растут с шириной и глубиной сети и особенно быстро — с увеличением числа связей, а также напрямую зависят от объёма входных и выходных данных. Понятно, что на больших заявленных контекстах Модели в целях экономии будут так или иначе оптимизировать свои вычисления. А это значит, что чем меньше заявленное контекстное окно, тем с меньшим количеством «оптимизаций» относительно базового уровня будет работать Модель.

Расширение и сужение контекста

В общем случае возможны две стратегии создания результата:

  1. Расширение входного контекста.

  2. Сужение входного контекста.

Пример первой стратегии:

Напиши сочинение на тему "Как я провёл лето" объёмом не менее 1К токенов.

В это случае у нас в общем контекстном окне входные данные занимают меньшую часть, а выходные — большую.

Пример второй стратегии:

Вычисли значение выражения: (12+4)*2. Ответь одним числом.

В этом случае наоборот — выходные данные занимают меньшую часть по сравнению со входными.

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

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

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

Создай минимальный файл package.json для npm-пакета со следующими характеристиками:

- имя пакета: ...
- описание: ...
- ...

Для себя в ADSM я использую промпты второго типа — с сужением контекста. Когда для генерации фрагмента кода может использоваться контекст в разы превышающий по объёму результат. У «кожаных» такой контекст часто называется coding conventions.

Размывание контекста

Однако не всегда большой входной контекст будет давать повторяющийся результат при повторных прогонах. Если входной контекст неоднородный, содержит слишком много несвязанных, а то и противоречивых вводных, то результат может отличаться от генерации к генерации даже на одной Модели. В этом случае в игру вступает «творческая» составляющая Моделей — ГСЧ (генератор случайных чисел).

Понятно, что для сужения контекста входные данные должны быть подобраны таким образом, чтобы максимально нивелировать действие ГСЧ. Другими словами, для эффективного взаимодействия Человека и Модели в рамках ADSM их диалог должен строится по принципу one-shot: один вопрос — один ответ.

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

Если же Человек находится в режиме «разведки» и исследует предметную область, то тут, конечно же, в диалоге (в контекстном окне) будет гораздо больше вопросов‑ответов. Но даже в таком случае нужно держать в фокусе основную тему беседы и прерывать текущий диалог и начинать новый, если фокус начал смещаться, а тема — расплываться (начали про рыбалку на поплавочную удочку, а потом перешли к основам металлообработки).

Заключение

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

  • Входные и выходные данные — это текст или приведение к тексту в подавляющем большинстве случаев.

  • Входные данные должны быть достаточно объёмны, непротиворечивы и связны, чтобы дать возможность Модели воспроизводимо генерировать желаемый результат.

  • Результат генерации не может быть большим по размеру в силу того, что Модель использует общее контекстное окно для входных и выходных данных. Чем больше разница в объёмах, тем сложнее обеспечить повторяемость результата (сильнее «творческая» составляющая Модели — ГСЧ).

  • Общение Человека и Модели в рабочем режиме (не «разведка») должно состоять из одного вопроса и одного ответа (one‑shot).

  • Язык общения особой роли не играет. Можно давать запрос на русском, а результат генерировать на JavaScript.

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


  1. emulio
    10.09.2025 19:48

    На один и тот же запрос они дают очень похожие, а иногда и идентичные ответы. Это ожидаемо, ведь все современные LLM построены на одной и той же архитектуре - трансформерах.

    не совсем верное утверждение. Ответы часто одинаковые из-за того, что для разных моделей дата-сеты, используемые для обучения пересекаются с другими моделями. И ChatGPT, и Gemini и DeepSeek частично были обучены на одних и тех же общедоступных данных. Поэтому часто ответы совпадают.

    Проблема хорошо разобрана в статье https://arxiv.org/html/2410.08385v1


    1. flancer Автор
      10.09.2025 19:48

      Я тут пытался донести мысль, что Модели, как и Люди, устроены похоже друг на друга. Как один человек похож на другого, так и одна модель-трансформер похожа на другую. Мы все обучаемся на каких-то общих данных и у нас у каждого есть свой персональный опыт.

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

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