Як я відмовився від промптів на користь модульної архітектури, боротьба з галюцинаціями та Context Drift

💡 Усі статті, обговорення, новини про AI — в одному місці. Приєднуйтесь до AI спільноти!

Думаю, багато хто з нас, хто активно працює з AI, стикався з тим, що стандартні системні промпти перетворюють модель на занадто «ввічливого робота». Постійні вибачення, корпоративний етикет та імітація сервісу — все це «з’їдає» контекстне вікно, час та терпіння. У результаті корисний сигнал часто тоне в «воді».

Я вирішив закрити це питання для себе радикально і написав CK_MELA (Modular Executable Logical Architecture) — це система керування контекстом та логікою AI, яка перетворює чат на повноцінну робочу середу.

У чому суть архітектури

Замість спроб «вмовляти» чат відповідати по суті, я перевів його на режим жорсткої «прошивки». В основі лежать принципи:

  • Zero-Apology Policy: Повне виключення вибачень.
  • No-Bot-Questions: Заборона на нав’язливі запитання, які часто генерує ІІ.
  • Proactive Initiative: Модель має передбачати контекст та одразу переходити до дій.

High Semantic Density: Відмова від «структурного тероризму» (нескінченних списків без змісту) на користь щільної аргументації.

Технічна реалізація

Я відійшов від монолітних промптів на користь модульності. Система складається з двох частин:

  • Ядро (Core): Системне мікроядро (mela_core_v6.cfg), яке відповідає за утримання контексту та жорстку логіку.
  • Профільні модулі: Це змінні конфігурації, які ініціалізуються через «Handshake-протокол». Ядро розпізнає модуль і підвантажує під нього вузьку логіку (наприклад, для аудиту техніки, як у моєму випадку).

Проєкт зараз у публічному доступі (з деякими обмеженнями), буду радий, якщо комусь знадобиться. Подивитися, як це влаштовано під капотом, можна на GitHub

А як ви вирішуєте проблему «роздутого» контексту та зайвої «ввічливості» моделей? Можливо, хтось уже пробував реалізовувати подібні модульні системи управління логікою? Буду вдячний за будь-який фідбек по архітектурі.

Деталі та код проєкту — на GitHub

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Начало воодушевляет...

# --- PROTECTION_START ---
import os
def check_license():
    # Проверка ключа в системе
    if os.getenv("CK.MELA_LICENSE_KEY") != "PRO_VERSION_AUTHORIZED":
        print("Ошибка: Код защищен авторским правом CK.MELA. Доступ запрещен.")
        exit(1)
check_license()
# --- PROTECTION_END ---

Добрый вечер Николай!
Это всего лишь временная заглушка, а не попытка построить Fort Knox. Она решает свою локальную задачу и служит точкой интеграции будущего механизма лицензирования.

Для меня гораздо интереснее обсуждение самой архитектуры CK.MELA: модульного подхода, разделения ядра и профильных модулей, управления контекстом и практических результатов. Если есть вопросы или аргументированная критика именно по этим аспектам — буду рад обсудить. Именно ради такого диалога и публикуются подобные материалы.

Я понял, все ОК. Это у меня юмор такой.
По моему опыту модульный подход (в целом, не только в вашем фреймворке) работает.
Из конструктивного — статье не хватает метрик.

Да шутку оценил, всё норм ;). А за совет про метрики спасибо, в точку — цифры действительно добавили бы весу. Будет повод учесть в следующий раз!

Мені болісно це навіть казати, але безкоштовний LLM це майже трагедія виконання. Проте я не певен, що LLM за токени якої хтось щось платить — більш вправний.
Тому ця тема — «часткова відмова від послуг LLM» мені так заходить.
Якщо тепер кудись дивитися у це у сторону миттєвих індивідуальних експертних систем, які будуть засновані на принципах використання хеш таблиць та заведених онтологій, замість нейронних мереж.
Пропущені глюки у LLM відповідях мають катастрофічні наслідки. Вони коштують компаніям, фірмам, розробникам, та взагалі всім стільки, що ціна що була заплачена за використання для компанію сто або тисяче кратно вирастає.
Якщо помилка спричинила оті самі катастрофічні наслідки.
Працювати з LLM це як працювати під дамокловим мечем.
Ось загадка:
Що це таке? Сидить у мішку і нявкає, хоча кажуть, що там порося і підсовують договір підписати про нерозголошення, тому хто відкриватиме мішок.
Або цінник, на якому написана одна ціна. Та коли ти її заплатив, у більшості випадків, з гаманця щезає чомось значно більше, хоча через деякий час.

До речі, чи це правда, що кажуть, що той, хто розібрався, що будь-яка відповідь від LLM є максимально не ефективною, нікому і ніколи про це не розповість? Чому? Тому що це нове плаття короля.

Олеже, метафора про «плаття короля» красива, але вона працює лише якщо ти чекаєш від ШІ оракула. Звісно, ці моделі можуть припускатися помилок — це не секрет, а технічна особливість, про яку знає кожен, хто реально їх використовує. Але в тому й суть: професіонал не вірить видачі «на слово», а сприймає її як підсилювач своєї експертизи, який ти в будь-якому разі перевіряєш.

Якщо ти чекаєш безпомилкової істини — то, звісно, ти розчаруєшся і почуватимешся «голим». Якщо ж ти розумієш, що це просто інструмент, який треба контролювати, — це звичайна автоматизація, яка економить час. Ти намагаєшся викрити «змову», а ми просто налаштовуємо воркфлоу під конкретні задачі.

то, звісно, ти розчаруєшся і почуватимешся «голим».

Бачиш, тут ЛЛМ-ка не зрозуміла, що, я мав на увазі, що, саме вона є голим Королем з сучасної технологічєскої побрехеньки.
Річ тут не про контроль, а про взаємовигідне сокритіє того факту, що LLM розробка є фікцією. Це просто автоматизований інтелектуальний копіпастинг з відкритих джерел.

Чи ChatGPT уміє у error driven програмування? Я програмую покроково, кожен крок обмежую викликом неіснуючої функції. Відкриваю IDE через день, запускаю програму і отримую повідомлення, де я зупинився. Або інший баг буде знайдений раніше, що вказуватиме, що попередній крок ще не завершений і є що пофіксити.

Олеже, цікава ідея, але чесно кажучи, це винахід велосипеда з квадратними колесами. По-перше, NameError — це ж не логічна помилка, а суто синтаксична. Вона не підказує тобі, що робити далі, вона просто кричить, що код невалідний. Ти навіть не дізнаєшся про той «інший баг», про який згадуєш, бо виконання програми просто не дійде до нього.

По-друге, побачивши через день виклик undefined_function(), ти згадаєш хіба що місце, але точно не пригадаєш, які там були дані, який стан системи й чому ти взагалі зупинився. Контекст повністю втрачається. І якщо ти працюєш у команді — це ще й міна уповільненої дії: забудеш прибрати такий виклик перед комітом — і вся збірка впаде в колег.

Натомість є купа зручніших речей. Можеш писати raise NotImplementedError("Треба зробити валідацію") — це хоч підкаже, що саме ти планував. Або ставити breakpoint() у Python чи debugger у JS — тоді ти зупинишся рівно там, де треба, і побачиш усі змінні. Або просто використовуй // TODO — IDE їх підсвічує й збирає в окрему панель.

Якщо хочеш справді ефективного підходу — спробуй писати маленькі тести на кожен крок. Коли тест падає, це твій маркер, але він пояснює, що саме зламалося. Коли всі зелені — значить, етап завершено. А твій метод нагадує мені водіння із зав’язаними очима, де ти відкриваєш їх, тільки коли чуєш удар. Працює, але якось боляче 😉

Навіщо ти скористався допомогою ЛЛМ для відповіді мені? Воно на промпт відповідає інформаційною бомбою — все про все. Чимось подібним такому малюнку:

Бачиш, кольори тут саме такі як у моєму коментарі, а сенсу — нуль.
Така відповідь не радує. Бо ЛЛМ не дуже розумні у своїх відповідях. Особливо коли контексту з гулькін ніс — як у моєму коментарі до цієї нібито статі.

Ти ж бачиш мій профіль — AI Automation Architect. Як я міг не скористатися інструментом, який пропагую? 😊
Якщо серйозно, то суть моєї відповіді не змінилась: твій метод працює, але є кращі. NameError це не маркер зупинки, а синтаксична помилка. Коли повертаєшся через день контекст втрачається, і ти бачиш лише місце, а не причину.

Іноді краще це поганіше.
Іноді краще це не краще.
Іноді краще не потрібно.
Іноді потрібно просто зробити працюючий макет. Чи йому потрібна оптимізація?

Коли повертаєшся через день контекст втрачається, і ти бачиш лише місце, а не причину.

Це спонукає мене до дії — подивитися у чому причина виникнення помилки у тім місці.
Одразу отримати відповідь — без розуміння — це як попрохати Виконавця Бажань виконати якесь бажання не обмеживши суворо і жорстко саме виконання.
Та якщо розуміння буде дуже багато — людина не сприймає такий обсяг даних. Хоча начальнику й каже: Ах, який класний ШІ!
Та ви, ллм-ки не штучні інтелекти, ви лише інтерфейси, вам ще потрібно приробити головну частину, яка, до речі, дуже сповільнить виконання, хоча воно вже й буде більш прийнятним. Для початку — більш лаконічним.

Олеже, ти відповів на два мої коментарі одразу, тому напишу тут. Помітив цікаву річ: ти критикуєш AI, але продовжуєш діалог, знаючи, що я використовую AI для відповідей. І так, це не ChatGPT, а DeepSeek (китайська модель), і навіть Gemini підтвердив, що моя логіка правильна 😄

Але якщо серйозно — я не проти твого методу. Якщо тобі зручно — працюй так. Я просто запропонував альтернативу, яка працює для мене й багатьох інших. Кожен обирає свої інструменти.

На цьому завершимо, гаразд? Гарного кодування друже! 😉

А єслі серьойзно — ти посмів, мені, людині, відповісти «ШІ»-слопом. Начувайся тепер!

у Олександра професія побудована на ШІ, ви маєте щось проти?

То ви дійсно ціла зграя шахраїв? Візьміть мене з собою — я буду вам схеми передбачати. Я найкрутіший у пошуку обривів зв’язків.

Підписатись на коментарі