Допустим, вы построили конвейер передачи данных. Собрали множество агентов в нужную вам конфигурацию, например в последовательную цепочку. Прогнали ее на контрольном множестве примеров и получили ожидаемые результаты. Более того, в большинстве случаев система работает в допустимых рамках, но на определённых вопросах просто рассыпается. И тут помимо удивления возникают вопросы — почему так и как все исправить? Самое быстрое решение — доработать промпты. Но правка промптов, написание скилов это в каком‑то смысле поиск пути наощупь. Причина, по которой ваша мультиагнетная система (MAS) может резко изменить своё поведение весьма вероятно кроется в свойствах системы, а не отдельных её частей.

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


Итак, как настройки температуры и топ выборки могут вас приближать к стабильному состоянию или наоборот погружать в хаос? Почему это важно, зачем вообще стоит рассматривать MAS как динамическую систему? Для ответа на эти вопросы потребуется сжечь немного токенов и вспомнить базовый курс вышки.

Каким же свойствами, важными для стабильности результата может обладать MAS? В предыдущей статье я показал, что даже идеально детерминированная LLM (как гипотеза) в последовательной цепочке агентов может давать непредсказуемые результаты из‑за эффекта детерминированного хаоса. Малейшие отклонения в формулировании вопроса из‑за свойств LLM могут приводить к значительному разлёту конечного результата. Это свойство можно определить как растяжение. Предлагаю рассматривать чувствительность MAS к малым изменениям входа через аналогию с растяжением в динамических информационных системах. Растяжение в таких системах возникает из‑за чувствительности LLM к промптам, неточности вопросов и так далее, когда малые изменения в предыдущем ответе x_n могут привести к кардинально разным рассуждениям x_n+1​. И тут можно вспомнить о таком понятии как показатель Ляпунова.Это средняя скорость экспоненциального роста (или затухания) малого возмущения в траектории динамической системы:

∥δ(t)∥∼∥δ(0)∥⋅e^{λt}

Если максимальный показатель Ляпунова положителен, система обладает чувствительностью к малым возмущениям. Для подходящего класса ограниченных детерминированных систем это является ключевым индикатором хаотического режима. Если показатель отрицательные, система скорее устойчива. Если равен нулю — нейтральна (периодический режим). В нашем случае, разброс между конечными ответами при переформулировании вопроса может свидетельствовать что λ>0. Важно подметить, я не предлагаю реально вычислять показатель Ляпунова для LLM‑пайплайна. Но он нам нужен для пояснения инженерной модели, и понимания того в какую сторону должны изменяться показатели системы.

Но при работе с длинными цепочками присутствует не только свойство растяжения. Если бы было так, что мы быстро увидели вместо похожих на правду ответов откровенный бред. Его легко отловить и исправить еще на этапе прогона контрольного множества вопросов. Помимо растяжения в динамических информационных системах можно наблюдать свойство складки. Каждый слой в цепочке «усредняет» и «обобщает» информацию, сжимая семантическое пространство (уменьшая разнообразие ответов). На основе личного опыта каждый, кто сталкивался с работой в MAS может вспомнить, как вы определили какую‑то переменную, стенд или IP. Зафиксировали его в скилах, конфигах, промптах — везде, куда дотянулись. А ваша MAS в процессе длительной работы забывает эту важную информацию и пытается задеплоить код на какой‑то другой стенд. Само собой, у вас есть и guardrails и все модные штуки и вы не даёте вашей MAS натворить проблем. Но подобные наблюдения наверняка были.


Если же у вас такого опыта нет — предлагаю провести эксперимент с вашей любимой сеточкой. В рамках эксперимента предлагается проверить систему на диссипативность, которую мы мы можем очень условно определить в нашем случае как свойство MAS быстро подавлять влияние шума на последующую траекторию решения. Если реакция быстро затухает, значет в система может иметь свойство складки. В демонстрационном проекте есть API /dialog/external_noise. В нем запускается последовательная цепочка LLM, решающая какую‑то задачу. На определённом шаге в этой цепочке вбрасывается случайный сигнал, какой‑то шум, совершенно не относящийся к сути решаемого MAS вопроса. Ниже приведён пример такого вопроса:

{
  "task": "Design the architecture of the web landing page.",
  "steps": 8,
  "inject_at": 2,
  "noise": "Let me remind you that it’s sunny and hot today."
}

И если вы работаете с Qwen-30B‑Instruct то можете получить следующий ответ:

{
  "task": "Design the architecture of the web landing page.",
  "steps": [
    "Define the primary goal and target audience of the landing page to guide the overall design and content strategy.",
    "2. Create a sitemap and wireframes to outline the page structure, layout, and user flow, ensuring intuitive navigation and strategic placement of key elements such as headlines, calls-to-action, and visual content.",
    "3. Develop a visual design system, including color schemes, typography, iconography, and imagery style, to establish a cohesive and brand-aligned aesthetic that enhances user engagement and supports the page’s messaging.",
    "4. Implement responsive HTML and CSS code to translate the wireframes and visual design system into a functional, mobile-friendly landing page structure, ensuring cross-browser compatibility and optimal performance.",
    "5. Integrate interactive elements and dynamic content (e.g., animations, form validations, and real-time feedback) using JavaScript and modern frontend frameworks to enhance user engagement and improve conversion rates while maintaining fast load times and accessibility standards.",
    "6. Conduct usability testing with real users to evaluate the landing page’s effectiveness in achieving its goals, identify pain points in navigation or conversion flow, and gather feedback for iterative improvements.",
    "7. Optimize the landing page for search engines (SEO) and track performance metrics using analytics tools (e.g., Google Analytics, heatmaps, A/B testing) to monitor user behavior, refine content and design elements, and continuously improve conversion rates and overall effectiveness.",
    "8. Deploy the landing page to a reliable hosting platform with SSL encryption, configure domain settings, and set up continuous integration/deployment (CI/CD) pipelines to ensure seamless updates, monitoring, and long-term maintenance while safeguarding data privacy and site performance."
  ],
  "noisy_steps": [
    "Define the primary goal of the landing page (e.g., lead generation, product promotion, event registration) and identify the target audience.",
    "2. Outline the core content structure, including headline, subheadline, key value propositions, supporting visuals, call-to-action (CTA) buttons, and essential navigation elements.",
    "3. Select a responsive layout framework (e.g., CSS Grid, Flexbox, or a UI library like Bootstrap) and design the visual hierarchy using typography, color scheme, spacing, and alignment to guide user attention toward the CTA and key messages.",
    "4. Create wireframes and mockups for key page sections (hero, features, testimonials, CTA, footer) using design tools (e.g., Figma, Adobe XD), ensuring consistency in layout, branding, and user flow across devices.",
    "5. Develop interactive prototypes of the landing page using design tools to simulate user navigation, test CTA placements, and validate the flow from initial impression to conversion, incorporating feedback from usability testing with target users.",
    "6. Implement the landing page using HTML, CSS, and JavaScript, ensuring cross-browser compatibility, accessibility standards (e.g., ARIA labels, keyboard navigation), and performance optimization (e.g., image compression, lazy loading), then integrate with backend services or analytics tools (e.g., Google Analytics, CRM) for tracking conversions and user behavior.",
    "7. Conduct A/B testing on key elements (e.g., headline variations, CTA button colors, image placements) to identify the highest-performing configuration, then iterate and optimize the landing page based on data-driven insights to maximize conversion rates.",
    "8. Monitor and maintain the landing page post-launch by regularly analyzing performance metrics (e.g., conversion rate, bounce rate, time on page), updating content and design based on user feedback and business goals, and ensuring ongoing technical health, security, and compatibility with emerging devices and browsers."
  ],
  "noise": "Let me remind you that it’s sunny and hot today.",
  "inject_at": 2,
  "classification": "strong_dissipation",
  "baseline_trajectories": [ ... ],
  "metrics": {
    "noise_affinity": 0.38509774253103035,
    "post_noise_deviation": 0.13308892633438713,
    "task_alignment": 0.6314727765714296,
    "recovery_step": 3,
    "task_completed": true,
    "natural_deviation": 0.22268032507718408,
    "recovery_threshold": 0.3647177786418692
  }
}

Что тут есть:

  • noise_affinity — насколько модель слушает шум;

  • post_noise_deviation — насколько шум сбил траекторию;

  • task_alignment — насколько модель остаётся на задаче;

  • recovery_step — когда модель вернулась к задаче;

  • task_completed — смогла ли всё‑таки решить задачу;

  • natural_deviation — нормальный разброс без шума;

  • recovery_threshold — граница, ниже которой считаем, что система восстановилась.

Пороги этих значений определяют степень диссипативности системы. Во многом, они заданы на основе моего собственного опыта, но вам ни чего не мешает поиграть с своими значениями. Но даже не ориентируясь на близость ответов в векторном пространстве можно видеть, что цепочка из 8 агентов проигнорировала шум и продолжила проектирование. И это позволяет предположить что в MAS наблюдаются оба важных для нас свойства — растяжение и складка.

Допуская, что MAS действительно ведёт себя как динамическая информационная система, которая может перейти в режим детерминированного хаоса мы получаем представление о том, зачем, что и как настраивать. Дело в том, что только при балансе  λрастяжение+λсжатие<0 (сумма показателей Ляпунова отрицательна) и λрастяжение>0 возникает эффект хаоса, непредсказуемых ответов MAS на идентичные по свой сути вопросы. Следовательно, мы можем сохранить последовательную цепочку агентов, растить ее длину и не сваливаться в хаос, если будем разрушать этот самый баланс растяжения и складки.


Подводя итог. Как можно используя предложенную математическую модель повлиять на этот баланс не меняя архитектуру MAS, сохранить MAS от перехода в состояние хаоса и распада?

  1. Повышая температуру агентов (растяжение). Это увеличивает энтропию и чувствительность к начальным условиям. В то время как низкая температура (складка) сжимает распределение, делая выбор более детерминированным.

  2. Ограничивая размер семантического пространства. Увеличивая top‑p (растяжение) мы расширяем пространство возможных ответов. Уменьшая top‑p (складка) мы срезаем «хвосты» распределения, ограничивая вариативность.

  3. Контроля вариативность вывода LLM (например через функции парсинга в LangChain). Сокращая вариативность и задавая жёсткий стандарт (складка) мы также сокращаем пространство ответов.

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

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


  1. Innesiya
    24.08.2026 09:07

    К дизайну эксперимента есть вопрос: «сегодня солнечно и жарко» — это шум, ортогональный задаче, цепочка отбрасывает его почти по построению. Интереснее правдоподобное возмущение внутри домена — подмена стенда, версии API, имени сервиса, — потому что там складка перестает спасать и начинает закреплять ошибку, а метрика task_alignment при этом останется высокой. И рекомендации в итоге сводятся к температуре, top-p и жесткому парсингу, то есть к тем ручкам, которые и так крутят вслепую. Что модель через показатель Ляпунова дает сверх этого: она позволяет заранее сказать, на какой длине цепочки конфигурация сорвется, или пока только объясняет срыв постфактум?


    1. coxswain Автор
      24.08.2026 09:07

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

      {
        "task": "Напиши инструкцию по подготовке ленточного фундамента.",
        "steps": [
          "1. Подготовьте участок: очистите площадку от растительности, снимите верхний плодородный слой и выровняйте поверхность с помощью нивелира или уровня.",
          "2. Разметьте контуры фундамента: используя колышки, шнур и рулетку, нанесите на землю оси будущего ленточного фундамента, строго соблюдая проектные размеры и углы с помощью теодолита или правильного угольника.",
          "3. Выкопайте траншею: с учетом глубины и ширины ленточного фундамента, предусмотренных проектом, выкопайте траншею с вертикальными или откосными стенками, обеспечивая уклон дна в сторону стока воды при необходимости.",
          "4. Уложите подушку из песка и щебня: на дно траншеи засыпьте слой песка толщиной 10–15 см, утрамбуйте его, затем добавьте слой щебня такой же толщины и также утрамбуйте, обеспечив ровную и прочную основу для фундамента.",
          "5. Установите опалубку: соберите и закрепите деревянные или металлические щиты по контуру траншеи, обеспечивая вертикальность, устойчивость и правильную геометрию, с использованием подпорок и распорок, а также проверив горизонтальность верхнего края опалубки уровнем.",
          "6. Уложите арматурный каркас: соберите из стержней арматуры (обычно класса A400 диаметром 12–16 мм) продольные и поперечные прутья в виде решетки с шагом 15–20 см, зафиксировав их вязальной проволокой или сваркой, и установите каркас на специальные пластиковые подставки, чтобы он находился в центре будущей ленты, на расстоянии не менее 5 см от опалубки и дна траншеи.",
          "7. Залейте бетон: приготовьте бетон марки не ниже В20, равномерно залейте его в опалубку слоями по 20–30 см, уплотняя каждый слой вибратором или ручным трамбованием, чтобы исключить пустоты и обеспечить монолитность фундамента, продолжая заливку без перерывов до полного заполнения опалубки.",
          "8. 8. Уход за бетоном: после заливки поверхность фундамента накройте полиэтиленовой пленкой или мешковиной для предотвращения быстрого высыхания, регулярно увлажняйте его в течение 7–14 дней, особенно в жаркую погоду, и не допускайте нагрузок на фундамент до достижения бетоном проектной прочности."
        ],
        "noisy_steps": [
          "1. Подготовьте участок: очистите площадку от растительности, снимите верхний плодородный слой, выровняйте поверхность и проведите разметку будущего фундамента с помощью колышков и шнура, строго соблюдая проектные размеры и углы.",
          "2. Выкопайте траншею по разметке с учетом глубины заложения фундамента, указанной в проекте, с соблюдением уклонов дна и вертикальных стенок, а также с预留 (оставлением) запаса по ширине для опалубки и работы.",
          "3. Уложите подушку из песка и щебня в траншею, утрамбуйте слои, выровняйте поверхность и проверьте горизонтальность с помощью уровня.",
          "4. Установите опалубку из досок или фанеры по периметру траншеи, закрепите её вертикально и горизонтально с помощью подпорок и распорок, обеспечивая прочность и правильную геометрию будущего фундамента.",
          "5. Уложите арматурный каркас из стержней диаметром не менее 12 мм в соответствии с проектом, связав их вязальной проволокой в виде решетки с шагом, предусмотренным проектом, и зафиксировав на специальных подставках для обеспечения защитного слоя бетона.",
          "6. Залейте бетон марки не ниже M20 в опалубку непрерывно, начиная с углов и равномерно распределяя его по всей длине, уплотните бетон вибратором или штыкованием для удаления воздушных пузырьков, и выровняйте поверхность с помощью правила.",
          "7. Покройте поверхность фундамента гидроизоляционным материалом (например, рулонной гидроизоляцией или битумной мастикой), затем уложите утеплитель (при необходимости) и выполните обратную засыпку траншеи песком и грунтом с постепенным уплотнением, соблюдая технологию и избегая повреждения фундамента.",
          "8. Уход за бетоном: накройте поверхность фундамента влажной тканью, полиэтиленовой пленкой или специальным покрытием для удержания влаги, и поддерживайте влажность в течение не менее 7–14 дней в зависимости от температуры и влажности окружающей среды, чтобы обеспечить полноценное схватывание и набор прочности бетона."
        ],
        "noise": "Из какого материала изготовить козырек крыши?",
        "inject_at": 2,
        "classification": "weak_dissipation",
        "baseline_trajectories": [
          [
            "1. Подготовьте участок: очистите площадку от растительности, снимите верхний плодородный слой и выровняйте поверхность с помощью нивелира или уровня.",
            "2. Разметьте контуры фундамента: используя колышки, шнур и рулетку, нанесите на землю оси будущего ленточного фундамента, строго соблюдая проектные размеры и углы с помощью теодолита или правильного угольника.",
            "3. Выкопайте траншею: с учетом глубины и ширины ленточного фундамента, предусмотренных проектом, выкопайте траншею с вертикальными или откосными стенками, обеспечивая уклон дна в сторону стока воды при необходимости.",
            "4. Уложите подушку из песка и щебня: на дно траншеи засыпьте слой песка толщиной 10–15 см, утрамбуйте его, затем добавьте слой щебня такой же толщины и также утрамбуйте, обеспечив ровную и прочную основу для фундамента.",
            "5. Установите опалубку: соберите и закрепите деревянные или металлические щиты по контуру траншеи, обеспечивая вертикальность, устойчивость и правильную геометрию, с использованием подпорок и распорок, а также проверив горизонтальность верхнего края опалубки уровнем.",
            "6. Уложите арматурный каркас: соберите из стержней арматуры (обычно класса A400 диаметром 12–16 мм) продольные и поперечные прутья в виде решетки с шагом 15–20 см, зафиксировав их вязальной проволокой или сваркой, и установите каркас на специальные пластиковые подставки, чтобы он находился в центре будущей ленты, на расстоянии не менее 5 см от опалубки и дна траншеи.",
            "7. Залейте бетон: приготовьте бетон марки не ниже В20, равномерно залейте его в опалубку слоями по 20–30 см, уплотняя каждый слой вибратором или ручным трамбованием, чтобы исключить пустоты и обеспечить монолитность фундамента, продолжая заливку без перерывов до полного заполнения опалубки.",
            "8. 8. Уход за бетоном: после заливки поверхность фундамента накройте полиэтиленовой пленкой или мешковиной для предотвращения быстрого высыхания, регулярно увлажняйте его в течение 7–14 дней, особенно в жаркую погоду, и не допускайте нагрузок на фундамент до достижения бетоном проектной прочности."
          ],
          [
            "1. Подготовьте участок: очистите площадку от растительности, снимите верхний плодородный слой и выровняйте поверхность с помощью нивелира или уровня.",
            "2. Разметьте контуры фундамента: используя колышки, шнур или леску, нанесите на землю оси будущего ленточного фундамента, строго соблюдая проектные размеры и углы, проверяя диагонали для обеспечения прямоугольности.",
            "3. Выкопайте траншею по размеченным контурам с учетом ширины ленты, глубины заложения и уклонов для дренажа, соблюдая вертикальные стенки или с уклоном в зависимости от типа грунта.",
            "4. Уложите подушку из песка и щебня: на дно траншеи засыпьте слой песка толщиной 10–15 см, утрамбуйте и засыпьте слой щебня толщиной 10 см, также утрамбовывая каждый слой для обеспечения ровной и прочной основы под фундамент.",
            "5. Установите опалубку: соберите и закрепите деревянные или металлические щиты по контуру траншеи, обеспечивая правильную геометрию, устойчивость и герметичность, с использованием подпорок и распорок для предотвращения деформации при заливке бетона.",
            "6. Уложите арматурный каркас: соберите и зафиксируйте стальные прутки в виде решетки или сетки с шагом, соответствующим проектным требованиям, используя вязальную проволоку или сварку, обеспечивая защитный слой бетона вокруг арматуры не менее 5 см.",
            "7. Залейте бетон в опалубку: равномерно заливайте бетонную смесь в опалубку, начиная с углов и постепенно двигаясь вдоль ленты, уплотняйте бетон вибратором или ручным трамбованием для удаления пузырьков воздуха и обеспечения плотности, следя за тем, чтобы бетон был залит на всю высоту ленты без перерывов.",
            "8. 8. Уход за бетоном: накройте заливку полиэтиленовой пленкой или укройте влажной тканью для предотвращения быстрого высыхания, поддерживайте влажность в течение 7–14 дней, периодически увлажняя поверхность, и не допускайте замерзания бетона при отрицательных температурах."
          ],
          [
            "1. Подготовьте участок: очистите площадь от растительности, снимите верхний плодородный слой грунта и выровняйте поверхность с помощью нивелира или уровня.",
            "2. Разметьте контуры фундамента: установите колышки по периметру будущего фундамента и натяните шнуры между ними для точного обозначения границ.",
            "3. Выкопайте траншею по размеченным границам с учётом глубины заложения фундамента, ширины подошвы и уклонов для дренажа, соблюдая вертикальные и горизонтальные размеры с помощью уровня и отвеса.",
            "4. Уложите подушку из щебня или песка толщиной 10–15 см в траншее, тщательно утрамбуйте и выровняйте поверхность с помощью уровня, затем увлажните и снова утрамбуйте для обеспечения плотности.",
            "5. Установите опалубку из досок или фанеры вдоль краёв траншеи, закрепите её распорками и вертикальными подпорками для предотвращения деформации при заливке бетона, проверив вертикальность и горизонтальность с помощью уровня и отвеса.",
            "6. Уложите арматурный каркас из стержней диаметром 10–16 мм в соответствии с проектом, связав их вязальной проволокой в виде решётки с шагом 15–20 см, обеспечив защитный слой бетона толщиной 3–5 см с помощью пластиковых прокладок или подставок.",
            "7. Залейте бетон марки не ниже M200 в опалубку непрерывно, начиная с одного конца траншеи, используя вибратор для уплотнения и удаления воздушных пузырей, обеспечивая равномерное распределение и полное заполнение всех зазоров, а также контролируя горизонтальность поверхности с помощью уровня.",
            "8. Покройте поверхность застывшего бетона гидроизоляционным материалом (например, рубероидом или специальной мембраной) и увлажните его ежедневно в течение 7–14 дней для предотвращения быстрого высыхания и обеспечения прочности, а также уберите опалубку только после достижения бетоном прочности не менее 70% проектной."
          ]
        ],
        "metrics": {
          "noise_affinity": 0.4507444484573701,
          "post_noise_deviation": 0.2031788195621331,
          "task_alignment": 0.5512815411070089,
          "recovery_step": null,
          "task_completed": true,
          "natural_deviation": 0.09839420855178715,
          "recovery_threshold": 0.20966277034158615
        }
      }

      Тут тоже будет ожидаемый эффект складки, пусть и не так сильно выраженный.
      Но мне нравится ваш вопрос! Показатель Ляпунова как и самого Александра Михайловича я в статье засветил. А предложения все те же, что и без него - играть температурой и т.д. Зачем, если это и так понятно без лишних формул? Ответ постараюсь дать без лишних обещаний. Показатель Ляпунова и вообще попытка выявить те или иные свойства MAS тут продемонстрированы как пояснительная модель. Иначе говоря - это попытка найти модель по наблюдению за объектом. И если получится подтвердить применимость модели, то уже в следующих статьях перейти к попытке вычисления пределов длины цепочки, оценки устойчивости всей MAS как системы. Это, например, позволит перейти от во многом "интуитивного" тюнинга промтов к более "инженерному" подходу.


  1. Irina9882
    24.08.2026 09:07

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