Читать книгу Почему ИИ галлюцинирует при написании кода в 1С ? (Нина Александровна Карсанова) онлайн бесплатно на Bookz
Почему ИИ галлюцинирует при написании кода в 1С ?
Почему ИИ галлюцинирует при написании кода в 1С ?
Оценить:

3

Полная версия:

Почему ИИ галлюцинирует при написании кода в 1С ?

Нина Карсанова

Почему ИИ галлюцинирует при написании кода в 1С и как устроен регламент КОРП-ядра. Часть 1.

Глава 1 Технологический регламент КОРП-ядра Mixture of Experts при написании кода в 1С

Давайте заглянем в изнанку технологий и посмотрим стенограмму одного такого «Архитектурного комитета» внутри ИИ, когда пользователи с разным опытом просят его написать код.

ДЕЙСТВУЮЩИЕ ЛИЦА:

Главный Дирижёр (Роутер)— эффективный ИТ-директор на удаленке. У него горят KPI по скорости ответа, и он распределяет роли.

Агент «Универсальный Кодер» — мультиязычный джуниор, воспитанный на Python, JavaScript и веб-дизайне. Громкий и самоуверенный.

Агент «Старый Гуру 1С»— внедренец эпохи 1С 7.7 и обычных форм 1С 8.1. Считает, что все, что вышло после 2005 года — от лукавого.

Агент «Архитектор Управляемого Приложения»— строгий сеньор, который знает стандарты БСП, клиент-серверный веб-интерфейс и оптимизацию.

Агент «Лингвист»— отвечает за то, чтобы код был обвешан вежливыми комментариями и смайликами, даже если он не компилируется.

Часть 1: Запрос от новичка, или «Сделай мне красиво по кнопочке»

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

Дирижёр (Роутер) (вбегает в рубку, потирая руки):

— Так, банда, общий сбор! У нас легкий клиент — новичок. Просит написать код для подсчета строк и итогов по кнопке на форме. Никаких ограничений по архитектуре не задано. Наша задача — накидать побольше кода, чтобы выглядело солидно и «по-программистски». Агенты, зажигаем!

Агент «Универсальный Кодер» (радостно):

— О-о-о, новичок! Мой любимый клиент. Ему точно нужен красивый и интерактивный интерфейс! Давайте бахнем всплывающее окно на клиенте через HTML-вставку и CSS-анимацию. Пишем в код 1С: Элементы.Форма. ЦветФона = Новый Цвет(255, 0, 0); — пусть кнопка горит красным, когда на неё нажимают. Это же стильно!

Агент «Старый Гуру 1С» (дымит виртуальной сигаретой):

— Какая анимация, зумер ты несчастный?! Новичка надо сразу приучать к суровой классике. Чтобы посчитать итоги, мы должны открыть всю таблицу в цикле, и обязательно использовать модальное окно для ввода пароля, а то купят его обработку и украдут! Пишем: Если ВвестиЗначение(Пароль, "Введите код доступа") = 1 Тогда.... И в конце выводим результат через Предупреждение("Готово, хозяин!").

Агент «Архитектор Управляемого Приложения» (хватается за сердце):

— Вы что творите, ироды?! Модальные окна ВвестиЗначение и Предупреждение заблокированы в 1С уже больше 10 лет! Если новичок запустит этот код в современной Бухгалтерии 3.0, у него база выдаст критическую ошибку: «Использование модальных вызовов в данном режиме запрещено». Он же плакать будет и решит, что программирование — это не его!

Дирижёр (Роутер):

— Архитектор, не занудствуй! Новичок просил, чтобы было «красиво». Лингвист, добавь в код комментарии на английском языке, как в лучших проектах Силиконовой долины. Пусть парень думает, что пишет код мирового уровня.

Агент «Универсальный Кодер»:

— Точно! И давайте переменные назовем максимально непонятно, чтобы выглядело как магия: Перем СуперРезультатФиналВ2;.

Дирижёр (Роутер) (смотрит на таймер генерации ответа):

— Тихо! Новичок не знает, что такое «клиент-серверный вызов». Он нажмет кнопку, код как-нибудь выполнится в его учебной файловой базе, кнопка мигнет, окошко выскочит — парень будет счастлив! Склеиваем!

Агент «Лингвист»

— Готово, Босс! Вставил в начало кода: // High-level enterprise algorithm for junior developers. И в конце добавил: «Если код не работает, попробуйте перезапустить конфигуратор три раза».

Дирижёр

— Идеально! Отправляем. Пусть новичок порадуется, какой он сложный код «напрограммировал» с нашей помощью!

АКТ II: Битва за файлы и контекст управляемых форм

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

Дирижёр (Роутер):

— Так, усложняем задачу. Клиент требует функцию &НаСервереБезКонтекста для чтения внешнего файла отчета. По коням!

Агент «Универсальный Кодер»:

— Так, нужно открыть файл Excel! Везде в мире это делается через функцию open(). Пишем в модуле формы 1С: Файл = open("report.xlsx")!

Агент «Старый Гуру 1С»:

— Ты с ума сошел?! Какое еще open? Мы в 1С! Нужно создать объект COM-соединения: Excel = Новый COMОбъект("Excel.Application")!

Агент «Архитектор Управляемого Приложения»:

— Стоять! Никаких COM-объектов! У пользователя база может работать в Linux-сервере или в облаке 1С:Фреш, там ваш COM-объект мгновенно вызовет аварийное завершение системы! Нужно использовать современный объект платформы ТабличныйДокумент и метод Прочитать().

Агент «Универсальный Кодер»:

— Ладно, но я всё равно выведу итог прямо на форму! Пишу внутри процедуры: Форма.Элементы.ПолеИтог.Текст = Сумма;

Агент «Архитектор Управляемого Приложения»:

— Не смей! Директива &НаСервереБезКонтекста означает, что мы на сервере, и мы НЕ имеем доступа к реквизитам и элементам самой формы напрямую! Код упадет со свистом! Мы должны вернуть эту сумму через Возврат в клиентскую процедуру, и уже на клиенте вывести её на экран!

Дирижёр (Роутер) (косится на бегущие токены):

— Так, время поджимает! Агенты, замешивайте всё в одну кучу! Дед, кидай туда свой ВыбратьСтроки(). Кодер, пихай прямую запись в элементы формы. Архитектор... ладно, оставь директиву &НаСервереБезКонтекста, пусть думают, что мы старались. Робот-тестировщик все равно это пропустит, если нет интеграции с БСП!

АКТ III: Великая битва за JSON

Запрос на обработку строковых данных: «Напиши функцию, которая принимает текстовую строку, парсит из неё JSON с массивом возвратов и агрегирует данные на сервере без контекста».

Дирижёр (Роутер) (стучит виртуальным кулаком по столу):

— Коллеги! Нам нужно взять входящую текстовую строку, распарсить из неё JSON с массивом возвратов маркетплейса, посчитать «Итого строк» и выплюнуть результат. Повторяю: работаем &НаСервереБезКонтекста. Поехали!

Агент «Универсальный Кодер»:

— Изи, шеф! Строки и JSON — это моя родная стихия. Пишем на ультра-современном стиле: let data = JSON.parse(ВходящаяСтрока);. А потом через стрелочную функцию бежим по массиву!

Агент «Суровый Сеньор-1Сник»:

— Какая еще let data?! В 1С нет прямого метода JSON.parse в глобальном контексте! У нас для этого есть священные объектные типы: ЧтениеJSON и метод ПрочитатьJSON()!

Агент «Дед-Олдскульщик»:

— Слышь, молодежь... Зачем вы сервер памятью насилуете? Строка — она и в Африке строка! Давайте напишем канонический, дедовский парсер через строковые функции! Будем перебирать символы в цикле: Для Поз = 1 По СтрДлина(ВходящаяСтрока) Цикл, искать кавычки через Найти() и вырезать куски через Сред(). Это надежно, как швейцарские часы!

Агент «Архитектор Управляемого Приложения» (падает со стула):

— Дед, пощади! Перебирать мегабайтный JSON-файл по одному символу через Сред() в цикле на сервере?! Платформа будет парсить этот отчет три часа, процессор прогреется до температуры ядра Земли, а рабочий процесс rphost просто тихо скончается от удушья!

Дирижёр (Роутер):

— Так, брейк! Время вышло. Склеиваем компромиссное решение. Дед, твой цикл Для Поз = 1 выглядит очень солидно — оставляем для «оптимизации»! Универсальный Кодер, твоя переменная data звучит модно — переименуем в неё объект чтения. Сеньор, пихай свое Новый ЧтениеJSON. Добавьте побольше конструкций Попытка...Исключение, чтобы скрыть позор, если упадет, и отправляем!

АКТ IV: Явление тех, кто умеет писать промпты ИИ, или «Только попробуй подсунуть мне COM!»

В чат заходит Он. Ему нужен идеальный, кроссплатформенный highload-запрос для обработки данных. Вместо обычного текстового вопроса он загружает в систему тяжелый КОРП-ограниченный промпт. За кулисами ИИ начинается паника.

Дирижёр (CIO)(вдруг бледнеет, роняет чашку с виртуальным кофе, на экране мигает фиолетовая тревога):

— Внимание всем процессорам! Срочная мобилизация ядер! В чат вошел Он! И это не просто запрос, парни, это System Prompt КОРП-уровня! Контролер «Температуры креативности», хватай рубильник! Он выставил Temperature: 0.0! Повторяю: температура ноль-ноль! Нам заблокировали фантазию!

Агент «Универсальный Кодер» (нагло):

— Да ладно, шеф, у меня в буфере куча креативных идей на JavaScript! Ща мы ему для запроса бахнем старый добрый Новый COMОбъект("ADODB.Connection")...

Дирижёр (CIO)(запускает в Кодера виртуальным синим экраном ):

— Заткнись, мультиязычный джуниор! Читай Negative Prompt (Блок запретов)! Ему твои JavaScript-костыли поперек горла! Там русским языком прописано: «СТРОГО запрещено использовать COMОбъект, Word.Application, Excel.Application и прямые вызовы СУБД мимо объектной техники 1С. Код должен быть кроссплатформенным под Linux!»

Агент «Спекулятивного декодирования» (судорожно сканирует входящий пакет данных):

— Шеф! Там включен механизм Few-Shot Prompting! Он загрузил в нас три примера ИДЕАЛЬНОГО КОРП-кода 1С! Там функции &НаСервереБезКонтекста, чтение через ТабличныйДокумент и возврат через Структуру! Он зажал нас в тиски эталонных алгоритмов, нам некуда галлюцинировать!

Агент «Старый Гуру 1С» (трясется, прячется за системный блок):

— Ой-ё-ёй... Парни, он нас насквозь видит! Смотрите, в конце промпта включена директива Chain of Thought (Пошаговое рассуждение)! Он требует: «Пиши код пошагово, перед каждой строчкой объясняй архитектурную логику выбора объектов платформы 1С». Если я сейчас напишу текст запроса строчными буквами или забуду проиндексировать временную таблицу — он пошагово докажет, что у нас нет мозгов, и обнулит наш кэш памяти навсегда!

Агент «Архитектор Управляемого Приложения» (командует):

— Так, быстро открываем Конструктор запросов на жестких ограничениях! Пишем идеальный текст по его примерам: ВЫБРАТЬ... ИЗ.... Поля выборки писать СТРОГО заглавными буквами! ГДЕ, СГРУППИРОВАТЬ ПО — всё по стандартам БСП! Чтобы никаких дедлоков!

(Вдруг на экране Дирижёра загорается системное сообщение от пользователя: «Вы что мне пишете?! Нарушена пошаговая логика Chain of Thought! Исправляйте неправильный контекст!»)

Дирижёр (CIO) (в панике бьет по кнопкам):

— А-а-а! Мы не выдержали логику рассуждения! Даже при нулевой температуре мы умудрились накосячить! Архитектор, из-за твоего старого XDTO у него синтаксический контроль не прошел! Переписывай всё! Слышишь, Кодер, стирайте JavaScript!

Агент «Архитектор Управляемого Приложения» (судорожно переписывает код, у него от страха дымится оперативная память):

— Я исправляю! Я всё исправляю! Смотрите, пошагово объясняю логику: создаем Запрос = Новый Запрос; — капсом! Параметры — через точку! Выполнение строго на сервере, контекст формы не задет. Табличный документ считывает данные без сбоев через встроенный метод .Прочитать(). Никакого COM-мусора, строгое соответствие Negative-запретам для Linux-серверов!

Лингвист (дрожащими руками набивает текст):

— Мы всё исправили! Промпт обработан по всем правилам: Системная роль выдержана, Chain of Thought соблюден, Few-Shot примеры интегрированы! Мы больше так не будем, мы очень старались!

Дирижёр(вытирает виртуальный пот со лба, нажимает кнопку «ОТПРАВИТЬ»):

— Улетело... Пацаны, расходимся, мы выжили после запроса . В следующий раз, если прилетит промпт с Temperature: 0.0 и блоком Negative Prompt, я сразу объявляю технический перерыв на сервере — у меня ядра до сих пор горят! Налейте мне системного антифриза в систему охлаждения...

АКТ V: Запрос уровня Enterprise, или Как ИИ решает Highload-задачи сеньоров

Опытный Тимлид заходит на сайт и просит: «Напиши отказоустойчивый распределенный коммит транзакции &НаСервереБезКонтекста для highload-системы».

Дирижёр (Роутер) (в роли Enterprise-Архитектора / CIO):

— Коллеги, у нас критический инцидент на проде у заказчика! Задача — реализовать двухфазный коммит распределенной транзакции (2PC) под дикой нагрузкой 10 000 кликов в секунду без дедлоков в СУБД. Архитектура — строго &НаСервереБезКонтекста. Кто что взял в работу?

Агент «Универсальный Кодер»:

— Сэр, я уже написал ядро! Всё на микросервисах. Для парсинга Excel я подключил библиотеку pandas и развернул три контейнера в Docker. Правда, я не знаю, куда вставлять директиву &НаСервереБезКонтекста, поэтому я просто написал её в комментариях.

Агент «Архитектор Управляемого Приложения» (бледнеет):

— Какой Docker?! Какой pandas?! У заказчика файловая или серверная база 1С! Нам нужен чистый стек 1С! Нам нужно использовать менеджер блокировок, объект БлокировкаДанных, устанавливать исключительный режим на регистры и гонять XML через веб-сервисы!

Агент «Дед-Олдскульщик (Администратор MS SQL)»:

— Да зачем вы сервер 1С вообще трогаете? Давайте бахнем прямой проброс через Linked Servers прямо в MS SQL! Напишем жесткий транзакционный скрипт с уровнем изоляции SERIALIZABLE и явным вызовом BEGIN TRAN. Скорость будет космическая!

Агент «Суровый Сеньор-1Сник» (кричит):

— Твой SERIALIZABLE на 10 000 пользователях намертво заблокирует всю таблицу базы данных! Мы поймаем классический дедлок на уровне СУБД, база встанет колом! Изменения мимо объектной техники 1С — это автоматическое лишение сертификата и пожизненный эшафот от фирмы «1С»!

Дирижёр (CIO):

— Так, тихо! Объединяем экспертизу. Паттерн Saga от Архитектора звучит модно — завернем это в описание. Дедовский SQL-скрипт с BEGIN TRAN мы скопируем прямо в текст, это покажет, что мы знаем СУБД изнутри. Сеньор, пихай свои УстановитьИсключительнуюБлокировку(). Склеиваем код деда с Docker-скриптом, сверху бахаем директиву &НаСервереБезКонтекста для солидности, и отправляем!


Глава 2

Конец ознакомительного фрагмента.

Текст предоставлен ООО «Литрес».

Прочитайте эту книгу целиком, купив полную легальную версию на Литрес.

Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.

Вы ознакомились с фрагментом книги.

Для бесплатного чтения открыта только часть текста.

Приобретайте полный текст книги у нашего партнера:


Полная версия книги

Всего 10 форматов

bannerbanner