Автономный ИИ-агент "NOPik" для платформы 1С:Предприятие - Паттерны рассуждений и мультиагентная оркестрация enterprise-процессов

22.09.26

Интеграция - Нейросети

В первой статье цикла граф состояний NOPik был намеренно упрощен до линейной цепочки: analyze_intent -> plan_executor -> deliver_to_1c. Такая цепочка наглядно демонстрирует переход от одного гигантского промпта к формальному FSM, но у нее есть системный недостаток: один узел plan_executor отвечает сразу за все прикладные сценарии - и построение отчета, и диагностику ошибки, и общий ответ. По мере роста числа сценариев этот узел неизбежно превращается в новую версию того самого «монолитного промпта», от которого мы уходили. Решение - декомпозиция по ролям с явным супервайзером, а не наращивание ветвлений внутри одного узла: та же логика, что в микросервисной архитектуре - каждая роль отвечает за одну зону ответственности и не обязана знать о существовании соседних ролей.

Паттерны рассуждений и мультиагентная оркестрация enterprise-процессов 1С

Вторая статья цикла NOPik: почему линейный граф состояний не масштабируется на сложные сценарии, и как декомпозиция на роли (Супервайзер, Аналитик метаданных, Сборщик СКД) с паттернами ReAct и Tree-of-Thoughts решает эту проблему.

Целевая аудитория: Архитекторы решений 1С, ведущие разработчики, специалисты по интеграции ИИ.
Применимость: Внешний оркестратор NOPik (Python / LangGraph); контур 1С:Предприятие 8.3 не меняется относительно статьи 1.
Серия: NOPik - автономный ИИ-агент для 1С:Предприятие 8 (статья 2 из 7).

Репозиторий: https://github.com/NickScherbakov/nopik-articles-public

🔍 Диагностика: от линейного графа к ролям

В статье 1 цикла граф состояний NOPik был намеренно упрощен до линейной цепочки analyze_intent → plan_executor → deliver_to_1c. Такая цепочка наглядно демонстрирует переход от одного гигантского промпта к формальному FSM, но у нее есть системный недостаток: один узел plan_executor отвечает сразу за все прикладные сценарии - и построение отчета, и диагностику ошибки, и общий ответ. По мере роста числа сценариев этот узел неизбежно превращается в новую версию того самого «монолитного промпта», от которого мы уходили.

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

📂 Структура: три роли NOPik

Начиная с этой статьи оркестратор NOPik построен вокруг трех ролей:

  • Супервайзер (Supervisor) - единственный узел, которому разрешено видеть весь маршрут целиком. Классифицирует намерение пользователя и решает, какая роль обработает запрос дальше. Не выполняет прикладной работы сам.
  • Аналитик метаданных (Metadata Analyst) - находит объекты метаданных 1С (справочники, регистры, реквизиты), релевантные запросу, работая по паттерну ReAct.
  • Сборщик СКД (SKD Collector) - строит и «исполняет» отчет через Систему компоновки данных, работая по паттерну Tree-of-Thoughts.

Такое разделение прямо соответствует терминологии HSM из статьи 1: три роли образуют суперсостояние WORKING, а супервайзер реализует функцию переходов δ этого суперсостояния.

💻 Паттерн ReAct: Аналитик метаданных

ReAct (Reasoning + Acting) - паттерн, в котором рассуждение модели (Thought) перемежается с вызовом инструмента (Action) и анализом его результата (Observation), и цикл повторяется, пока не будет собрано достаточно информации.

Наивная реализация зашивает цикл while внутрь одной функции на Python - и тогда граф состояний перестает быть графом состояний, превращаясь обратно в скрытый монолитный скрипт с ИИ внутри. В NOPik цикл ReAct вынесен на уровень графа: каждый вызов узла metadata_analyst_node выполняет ровно один шаг Thought → Action → Observation, а решение «повторить, эскалировать или закончить» принимает conditional edge графа - route_from_metadata_analyst.

Python - graph/agents/metadata_analyst.py UTF-8 Открыть файл
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def metadata_analyst_node(state: AgentState) -> dict:
    iteration = state["react_iteration"] + 1
    thought = f"Нужно найти объекты метаданных, релевантные запросу: '{state['user_query']}'."
    found = discover_metadata_tool(state["user_query"])

    if found:
        observation = f"Найдено {len(found)} объектов: {', '.join(found)}."
    else:
        observation = "Наблюдение неполно: по запросу не найдено ни одного объекта метаданных."

    step = {"thought": thought, "action": "discover_metadata_tool(query)", "observation": observation}

    return {
        "react_steps": state["react_steps"] + [step],
        "react_iteration": iteration,
        "discovered_metadata": state["discovered_metadata"] + found,
    }

Guard, ограничивающий число итераций (MAX_REACT_STEPS = 3), - это тот самый Global Guard из теории HSM: лимит вешается один раз на уровне суперсостояния и защищает от бесконечного цикла «модель не нашла ответ - модель пробует снова с тем же результатом».

Python - graph/agents/supervisor.py UTF-8 Открыть файл
1
2
3
4
5
6
7
8
9
def route_from_metadata_analyst(state: AgentState) -> str:
    last_step = state["react_steps"][-1] if state["react_steps"] else None
    need_more_info = last_step is not None and "неполно" in last_step["observation"]

    if need_more_info and state["react_iteration"] < MAX_REACT_STEPS:
        return "metadata_analyst"
    if state["role"] == "SKD_COLLECTOR":
        return "skd_collector"
    return "deliver_to_1c"

В боевой системе discover_metadata_tool обращается к MCP-серверу 1С за реальным списком объектов метаданных (протокол MCP - тема статьи 3 этого цикла); в текущей версии репозитория это детерминированный мок, чтобы граф переходов оставался полностью воспроизводимым в модульных тестах.

💻 Паттерн Tree-of-Thoughts: Сборщик СКД

Tree-of-Thoughts (ToT) - паттерн, в котором вместо последовательного уточнения одной гипотезы (как в ReAct) модель за один шаг порождает несколько альтернативных планов решения задачи, оценивает каждый и исполняет только план-победитель. Для построения отчета СКД это особенно оправдано: неверно угаданный макет компоновки данных нельзя «доуточнить» маленькими шагами - его нужно сравнивать с альтернативами целиком.

Python — graph/agents/skd_collector.py (генерация и оценка планов) UTF-8 Открыть файл
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def generate_candidate_plans(query: str, discovered_metadata: list[str]) -> list[dict]:
    base_objects = discovered_metadata or ["РегистрНакопления.ТоварыНаСкладах"]

    candidates = [
        {
            "description": f"Простой отчет по остаткам: группировка по номенклатуре ({base_objects[0]}).",
            "score": 0.6,
        },
        {
            "description": f"Детализированный отчет: группировка по складу и номенклатуре ({', '.join(base_objects)}).",
            "score": 0.9 if len(base_objects) > 1 else 0.7,
        },
        {
            "description": "Сводный отчет без детализации (только итоговая сумма).",
            "score": 0.3,
        },
    ]
    return sorted(candidates, key=lambda c: c["score"], reverse=True)

Если запрос перед этим прошел через Аналитика метаданных и тот нашел несколько объектов, оценка «детализированного» плана растет автоматически (0.9 против 0.7) - число найденных объектов метаданных напрямую влияет на выбор ветки дерева гипотез. Узел skd_collector_node берет план с максимальной оценкой и передает его в execute_skd_report_tool (в боевой системе - реальный вызов СКД через MCP-сервер).

💻 Сборка графа: супервайзер и conditional edges

LangGraph выражает ветвление не через if внутри узла, а через add_conditional_edges: узел меняет состояние, а отдельная чистая функция-маршрутизатор его читает и решает, куда идти дальше. Это разделение - ключевое отличие управляемого графа состояний от произвольного агентного скрипта.

Python - graph/build.py UTF-8 Открыть файл
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
workflow.add_edge(START, "supervisor")

workflow.add_conditional_edges(
    "supervisor",
    route_from_supervisor,
    {
        "metadata_analyst": "metadata_analyst",
        "skd_collector": "skd_collector",
        "general_answer": "general_answer",
    },
)

workflow.add_conditional_edges(
    "metadata_analyst",
    route_from_metadata_analyst,
    {
        "metadata_analyst": "metadata_analyst",
        "skd_collector": "skd_collector",
        "deliver_to_1c": "deliver_to_1c",
    },
)

workflow.add_edge("skd_collector", "deliver_to_1c")
workflow.add_edge("general_answer", "deliver_to_1c")
workflow.add_edge("deliver_to_1c", END)

Обратите внимание: узел skd_collector достижим двумя путями - напрямую от супервайзера (если намерение сразу однозначно про отчет) и через metadata_analyst (если сначала потребовалось найти объекты метаданных). Обе ветки сходятся в единственном терминальном узле deliver_to_1c, что сохраняет свойство FSM из статьи 1: терминальные состояния (F ⊆ S) должны быть предсказуемым и небольшим множеством, а не размазаны по графу.

🔍 Тестирование: маршрутизация графа

Поскольку узлы и маршрутизаторы - обычные чистые функции Python, весь граф проверяется модульными тестами pytest без обращения к реальному LLM или MCP-серверу: достаточно собрать AgentState и провалидировать, в какую роль ушел запрос и сколько шагов ReAct потребовалось.

Python - tests/test_metadata_analyst.py UTF-8 Открыть файл
1
2
3
4
5
6
7
8
def test_metadata_analyst_route_stops_after_max_react_steps_on_unknown_query():
    app = build_agent_app()
    config = {"configurable": {"thread_id": "conv-test-3"}}
    result = app.invoke(_base_state("покажи метаданные для чего-то незнакомого"), config=config)

    assert result["role"] == "METADATA_ANALYST"
    assert len(result["react_steps"]) == MAX_REACT_STEPS
    assert result["discovered_metadata"] == []

Такой тест фиксирует именно то поведение, которое обещает Guard из теории HSM: агент не зависает в цикле ReAct навсегда, а после трех безуспешных попыток детерминированно передает управление дальше по графу.

🤝 Итоги: что дальше

Оба инструмента этой статьи - discover_metadata_tool и execute_skd_report_tool - сегодня являются моками. В статье 3 цикла они станут настоящими вызовами к MCP-серверу 1С: разберем протокол Model Context Protocol, валидацию ответов через Instructor/Pydantic, борьбу с нечувствительностью LLM к регистру имен объектов метаданных и генерацию кликабельных навигационных ссылок вида e1cib/data/... прямо в ответе агента.

Полный код ролей - в NOPik/orchestrator/graph/agents/ репозитория проекта.


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

Теги: LangGraph, Мультиагентные системы, ReAct, Tree-of-Thoughts, Граф состояний, Супервайзер, Оркестрация агентов, СКД, MCP, LLM, Enterprise AI, 1С:Предприятие 8.3, Python, NOPik, Автоматизация 1С, Иерархический автомат, HSM, FSM

Вступайте в нашу телеграмм-группу Инфостарт

LangGraph Мультиагентные системы ReAct Tree-of-Thoughts Граф состояний Супервайзер Оркестрация агентов СКД MCP LLM Enterprise AI 1С:Предприятие 8.3 Python NOPik Автоматизация 1С Иерархический автомат HSM FSM

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Нейросети Системный администратор Разработчик Аналитик Бухгалтер Пользователь Руководитель проекта 1С 8.3 1С:Документооборот 1С:Бухгалтерия 3.0 1С:Зарплата и Управление Персоналом 3.x Россия Платные (руб)

Подключите ИИ к 1С и решайте рабочие задачи обычными словами. От работы с данными до доработки конфигурации через расширения, всё в привычном чате с ИИ-помощником. Теперь с поддержкой DeepSeek Harness, Kimi Code и Kimi Work, доступных в России без VPN.

15990 руб.

30.07.2026    19740    44    4    

39

SALE! %

Банковские операции Обмен с интернет-банком Мастера заполнения Нейросети Разработчик Бухгалтер Пользователь 1С:Предприятие 8 1C:ERP 1С:Бухгалтерия 3.0 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:ERP. Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 1С:Розница 3.0 Платные (руб)

Корректируйте банковские документы быстро и легко! Создайте правило обработки — и оно автоматически применится при загрузке выписки (отбор по любому реквизиту или регулярному выражению). Решение заполняет расшифровку платежа, комиссию эквайринга, подбирает ведомости на выплату зарплаты, помечает дубли из банка на удаление и многое другое. Доплачивать за алгоритмы не нужно — они включены в решение. Обработка работает при загрузке из файлов клиент-банка и через DirectBank. Новое — искусственный интеллект: модель приводит нестандартные назначения платежа к виду, понятному алгоритмам, а ИИ-ассистент прямо в 1С консультирует по решению и разбирает код правил и алгоритмов. Поддерживаются локальные и облачные OpenAI-совместимые модели — данные могут не покидать ваш контур.

17500 руб.

20.12.2024    21690    105    32    

90

Инструментарий разработчика Нейросети Платные (руб)

Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше. Далее в публикации: MCP для поиска по метаданным 1С, справке синтакс-помощника и проверки синтаксиса.

15250 руб.

25.08.2025    77223    147    41    

154

SALE! 30%

Нейросети 1С 8.3 1С:Документооборот 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Расширение добавляет в 1С чат с ИИ-агентом. Пользователь пишет вопрос обычными словами: «какие УПД не подписаны?», «какой НДС к уплате за квартал?», «что висит на согласовании дольше недели?», а агент сам строит запросы к базе с правами этого пользователя и отвечает цифрами, таблицей, диаграммой или файлом Excel. Плитки «Аналитик», «Бухгалтер» и «Руководитель» дают сводку по базе одной кнопкой. Агент разбирает ошибки по скриншоту, сверяет прайсы поставщиков и проверяет коды маркировки. С версии 1.0.21 спрашивать можно и с телефона: QR-код в окне агента, без установки приложения. Работает в УТ 11, КА 2, ERP 2, БП 3.0, УНФ 3.0, Документооборот 3.0 и Альфа-Авто 6, ставится одним расширением.

18300 руб.

05.10.2026    3911    12    9    

13

Инструментарий разработчика Нейросети Системный администратор Разработчик Руководитель проекта 1С 8.3 Платные (руб)

Обработка заменяет ФИО, организации, ИНН, ИИН, БИН, ОГРН, КПП, БИК, счета и IBAN, паспорта, СНИЛС, адреса, телефоны, почту и суммы на правдоподобные выдуманные перед отправкой данных в ChatGPT, Claude или YandexGPT, а потом расшифровывает ответ модели обратно, подставляя настоящие имена и настоящие числа. Возвращаются и те итоги, которые модель посчитала сама: суммы масштабируются одним коэффициентом, поэтому пропорции и доли переживают обезличивание. Словарь замен хранится в самой базе и подхватывается автоматически, даже если обработку закрывали. Реквизиты России и Казахстана, любая конфигурация от 8.3.24, без единой зависимости.

14640 руб.

07.08.2026    2229    3    0    

3

Распознавание документов и образов Нейросети 1С:Предприятие 8 1С 8.3 1С 8.5 1C:Бухгалтерия 1С:Зарплата и Управление Персоналом 3.x Беларусь Россия Казахстан Армения Платные (руб)

ИИ-сканер документов с REST API для интеграции с 1С и корпоративными системами. Извлекайте данные из счетов, паспортов, дипломов, патентов и трудовых книжек за секунды. Точность человека - скорость машины. Приложение поддерживает восемь типов документов, четырех провайдеров ИИ (имеется возможность использования локальных ИИ), локальный REST API и экспорт в JSON. Важно! модель должна поддерживать функцию Vision (распознавание файлов и картинок). Запускайте используя локальные ИИ, без подписок и ограничений

6100 руб.

24.08.2026    1496    2    0    

2

Нейросети Разработчик Бесплатно (free)

Как автоматически создавать маркетинговые ролики для собственных IT-продуктов, используя ИИ? В предыдущей статье я рассказывал о Zapis — приложении для работы с речью и текстом. Теперь расширил его возможности: добавил конвейер создания видео, в котором ИИ-агент изучает материалы проекта, готовит сценарий, подбирает реальные скриншоты и пишет текст диктора. Zapis отвечает за озвучку, а Remotion — за анимацию и сборку. На примере обмена ПУТ на OneBase -> 1С:Бухгалтерия 3.0 покажу готовый 83-секундный ролик из восьми сцен. Разберём, как устроен процесс, зачем нужны настоящие скриншоты интерфейса, как синхронизируются речь и изображение и что сохраняется для повторной сборки после изменений в продукте. Исходный код и инструкции доступны в открытом репозитории Zapis.

06.11.2026    556    Ibrogim    2    

11

Нейросети Разработчик 1С 8.3 Бесплатно (free)

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

05.11.2026    7843    Iliaelagin    8    

16
Для отправки сообщения требуется регистрация/авторизация