Темный лес ИИ

18.07.25

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

Современный ИИ ассоциируется с языковыми моделями, но в мире СУБД «искусственный интеллект» давно существует в виде планировщика запросов. В статье разберем, как Postgres использует AQO и Replan для машинного обучения в планировании запросов, и как переход от роли «кибераватара», вручную исправляющего EXPLAIN, к роли «тренера модели» экономит время и повышает эффективность. Узнаем, какие эффекты ждать от самообучающейся СУБД: от сокращения времени отклика до снижения нагрузки на администраторов. И подумаем, стоит ли овчинка выделки — обсудим плюсы и подводные камни адаптивного планирования.

Искусственный интеллект (ИИ) – одна из самых популярных тем не только в IT-сообществе, но и среди обычных людей. При этом в ИИ мало кто разбирается. Многим страшно, многим непонятно, многим очень интересно. Самым ярким представителем ИИ сейчас являются большие лингвистические модели (LLM). Их отношение к «настоящему» ИИ примерно как у ежика к балерине, но удобнее использовать термин «искусственный интеллект», чем постоянно объяснять, что такое LLM.

Вокруг ИИ сформировалось несколько лагерей.

Одни утверждают, что ИИ – это лишь «Т9 на стероидах», способный только подставить следующее слово, нарисовать что-то псевдоновое на основе существующего или написать текст в стиле Гоголя. Создать нечто принципиально новое он не способен.

Другой лагерь обещает нам, что через год-два люди гуманитарных профессий – дизайнеры, писатели, художники, музыканты, составители ТЗ, а также программисты – останутся без работы, так как ИИ все сделает за них.

Серьезные исследователи ИИ сравнивают его текущее состояние со студентом, у которого «офигенно подвешен язык»: говорит красиво и убедительно, но по сути – «сплошная вода», пусть и очень качественно поданная.

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

В свете этого живое, «ламповое» общение человека с человеком без цифровых посредников становится особенно ценным. При подготовке и написании данной статьи не использовался ни один ИИ.

Меня зовут Антон Дорошкевич и в этой статье я проведу вас по «темному лесу» ИИ. Мы пройдем по тропинкам, где увидим чудеса, которые уже используются в СУБД.

В статье речь пойдет исключительно о СУБД PostgreSQL, как о самой «православной» и бурно развивающейся системе управления базами данных в экосистеме 1С. Прямого искусственного интеллекта внутри СУБД, конечно, нет. Так же, как нет больших языковых моделей (LLM). Но свой «черный ящик» в СУБД существует давно – это планировщик запросов.

Сейчас мы выступаем в роли операторов кибераватаров планировщика. Мы задаем ему вопрос – наш запрос из 1С, который интерпретатор 1С превращает в SQL. Мы отправляем этот запрос в «черный ящик» (планировщик) и ждем на выходе ответ в виде плана запроса. Точно так же мы взаимодействуем с большими лингвистическими моделями типа ChatGPT – задаем вопрос и получаем ответ.

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

 

Планировщик запросов: эволюция и проблема ошибок

 

Планировщик существует с первого дня появления СУБД – примерно 30 лет. Длительное время математических функций и достаточно понятных алгоритмов хватало, чтобы планировщик выдавал качественный ответ. Но потом появилась 1С со сложными запросами на тысячи строк и огромными объемами данных. Из-за чего планировщик перестал справляться за счет математики и статистики – начался рост ошибок.

Пару лет назад началось развитие машинного обучения (ML) внутри СУБД для помощи планировщику. Один из видов такого ML называется Adaptive Query Optimizer, или AQO (адаптивный планировщик).

 

Устройство AQO

 

Как работает AQO?

Вы выполняете запрос -> AQO запоминает все узлы плана этого запроса. Самое главное – он запоминает, сколько строк планировалось получить на каждом узле плана и сколько в результате получил. Если разница между предполагаемым и фактическим количеством строк значительна (например, в 5 раз), то при следующем выполнении похожего запроса вместо изначально сгенерированного плана (предполагаемый план) будет использован фактический план предыдущего выполнения. Это помогает планировщику строить более качественные планы в будущем.

 

Режимы работы AQO

 

AQO может работать в таких режимах, как:

  1. Обучение (learn). AQO собирает статистику по всем выполненным запросам, обучается и делает предсказания на основе этой статистики. На данный момент нельзя ограничить сбор по длительности запросов или другим параметрам – собирается все. Это самый «легкий» режим.

  2. Контроль (controlled). AQO использует накопленную статистику для построения планов только для тех запросов, которые уже «видел» (обучился на них). На новых запросах он не обучается и никак на них не влияет, но по уже известным собирает статистику.

  3. Заморозка (frozen). AQO поправляет планы только для тех запросов, на которых уже обучился. Новым запросам он не обучается и на них никак не влияет. Самый «жесткий» режим.

 

Особенности работы с AQO в экосистеме 1С

 

AQO может работать только в одном режиме в конкретный момент времени. В экосистеме 1С, к сожалению (а может, и к счастью), данные постоянно меняются в бешеных объемах. Закрылся месяц – данные за предыдущий месяц стали другими. Например, в январе пользователи запрашивают отчеты за прошлый год, а в феврале – за прошлый месяц (за январь). Такие сценарии использования уникальны и «сносят голову» системам машинного обучения СУБД.

Что же делать? Предлагаю свой алгоритм работы с AQO:

  1. После закрытия месяца и пересчета итогов включаем режим обучения (learn) AQO. Это нужно, чтобы планировщик знал о наличии итоговых данных.

  2. Обучаем AQO на релевантном периоде: день, неделя – тот период, где собирается максимум типичных пользовательских запросов.

  3. Переводим AQO в режим заморозки (frozen). Он будет работать на этих накопленных данных до следующего закрытия месяца, так как распределение и объем данных сильно не меняется.

Режим контроля (controlled) можно использовать, только если вы уверены, что данные в системе меняются постоянно, и нет статичных участков. Это очень ресурсоемкий режим (потребляет много оперативной памяти и ресурсов процессора), требующий значительной мощности сервера.

 

Пример эффективности AQO: ускорение запроса в 140 раз

 

Что мы можем получить в итоге? Рассмотрим пример плана запроса:

Изначальный план

Nested Loop (cost=0.43..558722.77 rows=1 width=189) (actual time=0.067..420179.702 rows=2868472 loops=1)

-> Seq Scan on tt831 t2 (cost=0.00..976.85 rows=311 width=122) (actual time=0.011..15.130 rows=33385 loops=1)

-> Index Scan using tt834__q_000_f_002_type__q_000_f_002_rtref__q_000_f_002_rrr_idx on tt834 t1 (cost=0.43..16.70 rows=1 width=182) (actual time=5.623..12.570 rows=86 loops=33385)

Index Cond: ((_q_000_f_002_type = t2._q_001_f_006_type) AND (_q_000_f_002_rtref = t2._q_001_f_006_rtref) AND (_q_000_f_002_rrref = t2._q_001_f_006_rrref))

Filter: ((t2._q_001_f_007_type = _q_000_f_003_type) AND …AND (t2._q_001_f_010 = _q_000_f_011))

Rows Removed by Filter: 20823

Planning Time: 0.665 ms

Execution Time: 420262.190 ms

Ключевой момент – метод соединения таблиц в левом верхнем углу: Nested Loop. Любимый метод, из-за которого часто тормозит расчет себестоимости на PostgreSQL. PostgreSQL часто выбирает Nested Loop там, где этого делать не стоит. Почему же он это делает?

В нашем примере планировщик по статистике предположил, что для соединения поступит всего 311 строк (rows). Исходя из этого, он выбрал Nested Loop – очень дешевый способ для такого объема (доли секунды). Фактически поступило 33 385 строк. Запрос выполнялся 420 секунд. AQO увидел разницу в более чем 100 раз (311 против 33 385).

План после AQO

Hash Join (cost=186952.07..483886.96 rows=1 width=189) (actual time=1491.950..2993.426 rows=2868472 loops=1)

Hash Cond: ((t2._q_001_f_006_type = t1._q_000_f_002_type) AND (t2._q_001_f_006_rtref = t1._q_000_f_002_rtref) AND … AND (t2._q_001_f_010 = t1._q_000_f_011))

-> Seq Scan on tt831 t2 (cost=0.00..976.85 rows=33385 width=122) (actual time=0.012..2.999 rows=33385 loops=1)

-> Hash (cost=106640.65..106640.65 rows=2868265 width=182) (actual time=1490.148..1490.150 rows=2868472 loops=1)

Buckets: 4194304 Batches: 1 Memory Usage: 642749kB

-> Seq Scan on tt834 t1 (cost=0.00..106640.65 rows=2868265 width=182) (actual time=0.012..238.793 rows=2868472 loops=1)

Planning Time: 0.383 ms

Execution Time: 3070.432 ms

В следующий раз, когда прилетел похожий запрос, AQO подсказал планировщику предполагаемое количество строк – 33 385. СУБД действительно получила такое количество строк и планировщик сам выбрал метод соединения Hash Join. Скорость выполнения запроса составила 3 секунды против 420 секунд ранее!

Важно. Мы не меняли код 1С, не добавляли индексы, не вмешивались в структуру базы или текст SQL-запроса. Изменился только план выполнения. Планировщику хватило корректной информации о количестве строк во временной таблице, чтобы построить оптимальный план.

 

Ограничения AQO

 

Что будет, если включить AQO на проде?

Сделаю небольшую провокацию: не верьте никаким графикам! Никакая нагрузка, показанная на чужих графиках, не повторится точно также на вашей базе. Достижения на других системах – это правда только для этих систем. Единственный способ узнать, поможет ли AQO вам – это прогнать нагрузочный тест на вашей системе.

Разберем преимущества и недостатки применения AQO на 1С.

Преимущества. Использование AQO на больших запросах, которые «нечеловекочитаемы», часто спасает в безвыходных ситуациях. Особенно на запросах из ERP – динамически собираемых текстах запроса, уникальных каждый раз.

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

Недостатки. Время выполнения запросов увеличилось. Это ловится на маленьких запросах. AQO может подсунуть им неоптимальный план. Например, он использует Hash Join вместо более быстрого метода для малого объема данных – Nested Loop.

Главные минусы AQO:

  1. Помогает только тогда, когда планировщик ошибался в оценке количества строк. Если оценка была верна, AQO не поможет.

  2. Нужно как минимум один раз «перетерпеть» долгий запрос. На практике – 3-4 раза: первый раз накапливается статистика и подсовывается планировщику; второй раз может прилететь другая статистика, опять запоминается; и так далее. Лишь на 3-4 итерации достигается стабильно хороший результат. Это неизбежный минус работы AQO.

В том числе и из-за этого минуса появился другой механизм машинного обучения: Replan.

 

Replan

 

Важная ремарка: и AQO, и Replan работают только в Enterprise версии PostgreSQL (от Postgres Pro). AQO доступен и в бесплатной версии Postgres Pro для 1С. Replan – только в Enterprise.

Replan – это подправка плана запроса на лету согласно определенным триггерам.

 

 

Как устроено планирование? Поступает план запроса, он проходит парсер, анализатор – это неизменно. Затем поступает в оптимизатор (планировщик/Optimizer). После оптимизатора запрос идет в исполнитель (Query Executor) – движок, выполняющий запрос по полученному плану.

У Replan есть триггеры.

Допустим, мы установили, что в нашей системе любой запрос к СУБД длительнее 10 секунд считается плохим и требует попытки перепланирования. Что делает Replan? Когда запрос поступает в исполнитель, Replan начинает отсчет времени. Как только срабатывает тайм-аут (10 секунд), Replan останавливает выполнение запроса и делает подтранзакцию. На этот момент он уже знает фактический план, который «набежал» за эти 10 секунд.

Обратимся к предыдущему примеру из раздела «Пример эффективности AQO: ускорение запроса в 140 раз». За 10 секунд обработано 3 000 строк из фактических 33 000. Replan снимает этот частичный фактический план и отдает его обратно планировщику (Optimizer), подсовывая ему фактические данные (3 000 строк вместо предполагаемых 311). Планировщик, видя новые данные, может построить другой план (например, Hash Join). Если повезет, новый план выполнит запрос быстрее.

А если план не поменялся или не улучшился? Replan смотрит, отличается ли новый план от предыдущего. Если не отличается или за установленное количество попыток (например, 5 или 10) улучшения не достигнуто, Replan сдается и пропускает запрос на выполнение.

Чтобы не войти в бесконечный цикл, когда Replan постоянно подсовывает новые планы планировщику, существует настройка – количество перепланирований.

Важно подобрать баланс настроек:

  • replan_query_execution_time

Триггер по времени. Не ставьте слишком низкое значение. Например, один и тот же запрос всегда выполняется 1 секунду и вы решили сократить время до 0,7 секунд. Ваш запрос выполнялся установленное время, а затем пошел на репланирование. Его план никак не изменился и он снова пошел выполняться. Replan понимает, что в этой ситуации он бессилен и пропускает этот запрос выполняться дальше без остановки.

  • replan_overrun_limit

Триггер по коэффициенту ошибки в количестве предполагаемых и фактически полученных строк в узле плана.

  • replan_memory_limit

Триггер по использованию памяти. Используется, когда потребление памяти рабочим процессом превышает заданное значение. Останавливает запрос и идет на перепланирование, если он может «положить» сервер.

  • replan_max_attempts

Максимальное количество попыток перепланирования.

Главный минус Replan – как и AQO, он помогает только тогда, когда планировщик ошибался в оценке количества строк.

Несмотря на то, что машинное обучение шагает по миру, помните, что человек с головой гораздо круче любого ИИ. Желаю всем подходить к своим системам именно с умом, а не только с надеждой на ИИ.

P.S. С момента выступления до публикации прошло много времени, и сейчас replan уже называется AQE, намного поумнел напару с планировщиком, и расчет себестоимости в ERP практически приравнялся к скорости MS SQL.

 

*************

Статья написана по итогам доклада (видео), прочитанного на конференции INFOSTART TECH EVENT.

Вайб-кодинг — ИИ пишет за вас в 1С

Решение «Вайб-кодинг» внедряет искусственный интеллект прямо в 1С: пишет корректный код, анализирует метаданные и помогает автоматизировать проектные задачи. Поддерживает GPT-4, Llama, Claude и Gemini.

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

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

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

См. также

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

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

15250 руб.

25.08.2025    54962    111    29    

123

Нейросети Пользователь 1С:Предприятие 8 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 Оптовая торговля, дистрибуция, логистика Россия Управленческий учет Платные (руб)

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

6100 руб.

03.04.2024    15402    8    0    

12

Работа с интерфейсом Нейросети Системный администратор Программист Руководитель проекта 1С:Предприятие 8 Бесплатно (free)

Эту статью породила моя случайная встреча в московском метро с женщиной, которой я помог донести торшер. Оказалось, что это театральный реквизит, она сама - режиссёр, а её муж - 1С-ник и мой старый друг. В очередной раз я поразился, как тесен мир, и как, порою, неслучайны случайные встречи! Мы созвонились с другом, и он мне рассказал о своих экспериментах с искусственным интеллектом на проектах "снеговика" с интерфейсом на обычных формах, купирующих проблемы предприятий, у которых за многие годы накопилось столько доработок, что поддержка конфигурации стала огромной болью, особенно, в связи с регуляторными изменениями последних лет. И не поддерживать морально устаревшие конфигурации тоже нельзя, т.к. апгрейд до последних версий на управляемых формах обойдётся кратно дороже. Я ему предложил написать статью на Инфостарте, но он наотрез отказался публиковаться под своим именем, и мне с трудом удалось уговорить его опубликоваться от моего имени, что я и делаю.

вчера в 14:56    772    RayCon    9    

17

Логистика, склад и ТМЦ Нейросети Программист Пользователь 1С 8.3 1С:Управление нашей фирмой 3.0 1С:УНФ Управленческий учет Абонемент ($m)

Внешняя система аналитики закупок для 1С на базе FastAPI + PostgreSQL + Docker с поддержкой локального AI через Ollama. Возможности: — рекомендации по закупке; — ABC / XYZ анализ; — поиск неликвидов; — поиск излишков; — анализ сезонности; — риск дефицита; — AI-пояснения рекомендаций. Решение работает через HTTP API и может использоваться как внешний аналитический сервис для 1С. Поддерживается локальный AI без облачных сервисов и без передачи данных наружу.

10 стартмани

14.05.2026    435    2    aldar    1    

6

Нейросети Программист Бесплатно (free)

Современные LLM-агенты страдают от одной архитектурной болезни: они обязаны ответить всегда. Даже когда контекст пуст, даже когда данных нет, даже когда любой ответ будет галлюцинацией. Это порождает шум, эрозию памяти и ложную уверенность. В нашей архитектуре агент не имеет права генерировать ответ, если недостаточно света. Перед любой попыткой срабатывает L8 — pre-execution constitutional gate. Он измеряет покрытие контекста (context_coverage), прогнозирует уровень шума (noise_estimate) и выносит вердикт: разрешить, ограничить, верифицировать или заблокировать.

14.05.2026    375    ksnik    19    

6

Нейросети 1С 8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Данная публикация представляет расширения для конфигураций 1С: УТ 11, ЗУП 3.1, ЕРП 2.5. Расширения позволяют выгружать любые данные из всех типовых отчетов (в них добавляется кнопка DeepSeek (см. скрин)), а также через встроенный конструктор запроса; хранить промты для нейросети с параметрами из 1С; отправлять запросы в DeepSeek, получать и обрабатывать ответ. Реализована автоматическая обработка результата: поиск таблицы в ответе нейросети и вывод её в табличный документ. Предусмотрена возможность перехватить ответ и написать свою обработку — полученную таблицу значений можно использовать для загрузки в табличную часть, создания документов или заполнения регистров. В публикации — описание возможностей, настройки, примеры промтов и шаблон обработки-перехватчика.

4 стартмани

13.05.2026    383    0    German4739    1    

7

Нейросети Программист 1С 8.3 Абонемент ($m)

В релизе ИИ Агент 0.8.5 агент стал ближе к полноценному рабочему инструменту аналитика: появился более устойчивый графовый цикл выполнения, улучшена работа с файлами и вложениями, а режим «Запрос 1С» теперь поддерживает follow-up уточнения. В статье показываем сценарий: пользователь просит вывести контрагентов, затем добавляет поля ИНН и код, а потом фильтрует только покупателей — агент перестраивает запрос и показывает результат в табличном документе.

1 стартмани

12.05.2026    3127    Aleksandr    4    

5

Нейросети Распознавание документов и образов Программист Бесплатно (free)

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

08.05.2026    1128    user1415700    18    

24
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. axelerleo 325 18.07.25 11:36 Сейчас в теме
Я человек простой. Вижу фамилию Дорошкевич - жму лайк, потом уже читаю.
Как всегда, пища для размышлений и полезности! Благодарю!
MamakovTA; user1270271; FSerg; -_ABC; +4 Ответить
7. anosin 29 20.07.25 20:36 Сейчас в теме
(1) все же в живую послушать этот доклад было интереснее
2. axelerleo 325 18.07.25 12:11 Сейчас в теме
Пришла в голову идея, чтобы что-то похожее срабатывало для подключения GEQO. А то столкнулись с тем, что изменение параметров fr om collapse limit, join collapse lim it, geqo threshold для одних запросов дало сильное ускорение, но другие так же сильно замедлило (за счет безумно выросшего до нескольких минут Planning Time).
3. Tantor 184 18.07.25 14:55 Сейчас в теме
(2) А параметр geqo_threshold для этого не подходит?)
4. axelerleo 325 18.07.25 14:59 Сейчас в теме
(3) Так я ж и говорю - что "geqo threshold для одних запросов дало сильное ускорение, но другие так же сильно замедлило". Т.е. условно говоря, для одних запросов хорошо geqo threshold - 8, для других - 20. В случае когда 8 - тормозят одни запросы, когда 20 - другие. Но по разным причинам :)
а было бы круто, если бы geqo включался как-нить более по-умному. ну например, если построение плана запроса занимает сколько-то процентов от его предполагаемого времени выполнения (по статистике), ну или что-то типа такого.
5. PerlAmutor 161 19.07.25 06:20 Сейчас в теме
Было бы неплохо иметь механизм платформы, который принимал на вход текст запроса - внутри прогонял его через ИИ оптимизатора запросов, тестировал результаты с замером времени, а на выходе выдавал коллекцию оптимизированных текстов запросов.
6. bulpi 218 19.07.25 09:57 Сейчас в теме
"большие лингвистические модели (LLM). Их отношение к «настоящему» ИИ примерно как у ежика к балерине"
А почему ??? Чем это не "настоящий" ИИ ? Если что-то выглядит как утка, плавает как утка, крякает как утка...
8. comptr 57 21.07.25 08:47 Сейчас в теме
(6)
Чем это не "настоящий" ИИ

По своей сути. LLM буквально сделаны как Т9, чтобы прогнозировать текст на основании обучающих данных.
Например, LLM не могут в абстрактную математику. Даже сложение чисел происходит, упрощенно, путём поиска текста, где встречаются эти числа, хотя если попросить объяснить, как это делается - нейросеть с умным видом расскажет о правилах сложения, хотя фактически сама ими не пользуется. Этот пример взят из вот этого видео https://youtu.be/-wzOetb-D3w, которое основано на вот этом исследовании https://transformer-circuits.pub/2025/attribution-graphs/biology.html
Для отправки сообщения требуется регистрация/авторизация