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

от автора

Допустим, вы построили конвейер передачи данных. Собрали множество агентов в нужную вам конфигурацию, например в последовательную цепочку. Прогнали ее на контрольном множестве примеров и получили ожидаемые результаты. Более того, в большинстве случаев система работает в допустимых рамках, но на определённых вопросах просто рассыпается. И тут помимо удивления возникают вопросы — почему так и как все исправить? Самое быстрое решение — доработать промпты. Но правка промптов, написание скилов это в каком-то смысле поиск пути наощупь. Причина, по которой ваша мультиагнетная система (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, изменяя влияние предыдущего состояния на последующие шаги.

ссылка на оригинал статьи https://habr.com/ru/articles/1073530/