TL;DR
Cognitive BASIC — техника, которая превращает рассуждения LLM в явную программу с пронумерованными строками в стиле ретро-BASIC. Вместо свободного текста модель «выполняет» инструкции: извлекает факты, находит противоречия, разрешает конфликты — и логирует каждый шаг. Интерпретатор описан на естественном языке прямо в промпте.
Главная находка: LLM отлично извлекают факты (100% у двух из трёх моделей), но плохо находят противоречия — особенно числовые («открывается в 9» vs «открывается в 10») и временные. Без явной структуры модель «проглатывает» конфликт и выдаёт уверенный, но противоречивый ответ. С Cognitive BASIC противоречие записывается в отдельное поле памяти — его нельзя проигнорировать.
Метод работает в три этапа: (1) извлечь декларативные факты и процедурные правила, (2) проверить на конфликты, (3) если конфликты есть — разрешить и записать резолюцию. Каждый шаг меняет «память» программы и выводит лог — полная прозрачность рассуждений.
Схема метода
Выполняется в ОДНОМ промпте (программа + интерпретатор)
ШАГ 1: LET working = INPUT() → загрузить сценарий в рабочую память
ШАГ 2: EXTRACT DECLARATIVE → вытащить факты в declarative
ШАГ 3: EXTRACT PROCEDURAL → вытащить правила в procedural
ШАГ 4: DETECT CONFLICTS → найти противоречия в conflicts
ШАГ 5: IF CONFLICTS > 0 → RESOLVE CONFLICTS → разрешить и записать в resolution
ШАГ 6: END → вывести финальное состояние памяти
Пример применения
Задача: Ты готовишь обзор рынка доставки еды в России. Собрал данные из разных источников — аналитики, интервью, статьи. Часть информации противоречит друг другу. Нужно найти конфликты и понять, что происходит на самом деле.
Промпт:
Ты — интерпретатор Cognitive BASIC. Выполни программу построчно.
После каждой команды выводи:
- Номер строки и команду
- Что сделал
- Текущее состояние памяти (working, declarative, procedural, conflicts, resolution)
- Следующая строка
ПАМЯТЬ (изначально пустая):
working: ""
declarative: []
procedural: []
conflicts: []
resolution: ""
ПРОГРАММА:
10 LET working = INPUT()
20 facts = EXTRACT DECLARATIVE(working)
30 ADD declarative FROM facts
40 rules = EXTRACT PROCEDURAL(working)
50 ADD procedural FROM rules
60 DETECT CONFLICTS()
70 IF CONFLICTS COUNT() > 0 THEN 90
80 GOTO 110
90 resolution = RESOLVE CONFLICTS()
100 PRINT resolution
110 END
INPUT():
"""
Яндекс.Еда занимает 45% рынка доставки еды в Москве (данные Data Insight, 2024).
Delivery Club контролирует более половины московского рынка доставки (интервью с инвестором, январь 2024).
Средний чек доставки в Москве — 890 рублей.
Средний чек доставки в столице составляет около 1200 рублей (опрос пользователей).
Курьеры Яндекс.Еды получают в среднем 2500 рублей за смену.
При высоком спросе нужно сначала проверить наличие курьеров, затем оценить время доставки.
"""
Результат:
Модель выполнит программу строка за строкой. В declarative появятся факты: доли рынка, средние чеки, зарплаты курьеров. В procedural — правило про высокий спрос. В conflicts модель запишет два конфликта: «45% Яндекс || более половины Delivery Club» и «890 рублей || 1200 рублей». В resolution появится примирение: «Доли рынка противоречивы — возможно, разные методологии или разные периоды» и «Средний чек варьируется от 890 до 1200 рублей в зависимости от источника».
Почему это работает
Слабость LLM: Модели игнорируют противоречия в тексте. Если в исходных данных написано «открывается в 9» и «открывается в 10» — модель выберет один вариант или усреднит, но не скажет, что есть конфликт. Пользователь получает уверенный ответ на основе противоречивых данных.
Сильная сторона LLM: Модели отлично следуют структурированным инструкциям. Если сказать «выполняй строку за строкой, логируй каждый шаг» — они это делают. Псевдокод убирает двусмысленность: вместо «проанализируй» — конкретная команда DETECT CONFLICTS().
Как метод использует это: Cognitive BASIC вынуждает модель записать противоречие в отдельное поле conflicts. Конфликт становится артефактом — его нельзя проигнорировать. А команда RESOLVE CONFLICTS() требует явного примирения, а не молчаливого выбора одной версии.
Рычаги управления:
- Убрать шаги 60-100 → если не нужна проверка на конфликты, получишь просто структурированное извлечение фактов
- Добавить цикл
GOTO 60после разрешения → для итеративной проверки (нашёл конфликт → разрешил → проверил снова) - Изменить INPUT() → подставляй любой текст с потенциальными противоречиями
Шаблон промпта
Ты — интерпретатор Cognitive BASIC. Выполни программу построчно.
После каждой команды выводи:
- Номер строки и команду
- Что сделал
- Текущее состояние памяти
- Следующая строка
ПАМЯТЬ (изначально пустая):
working: ""
declarative: []
procedural: []
conflicts: []
resolution: ""
ПРОГРАММА:
10 LET working = INPUT()
20 facts = EXTRACT DECLARATIVE(working)
30 ADD declarative FROM facts
40 rules = EXTRACT PROCEDURAL(working)
50 ADD procedural FROM rules
60 DETECT CONFLICTS()
70 IF CONFLICTS COUNT() > 0 THEN 90
80 GOTO 110
90 resolution = RESOLVE CONFLICTS()
100 PRINT resolution
110 END
INPUT():
"""
{текст_с_потенциальными_противоречиями}
"""
Плейсхолдеры:
{текст_с_потенциальными_противоречиями}— любой текст, где могут быть конфликтующие утверждения: заметки с разных встреч, данные из разных источников, отзывы клиентов
🚀 Быстрый старт — вставь в чат:
Вот шаблон Cognitive BASIC для поиска противоречий в тексте.
Адаптируй под мою задачу: [опиши что анализируешь].
Если нужно — измени команды программы.
[вставить шаблон выше]
LLM спросит, какой текст анализировать и нужны ли дополнительные шаги (например, только извлечение фактов без проверки конфликтов). Она возьмёт структуру программы и адаптирует под твой контекст.
Ограничения
⚠️ Числовые и временные конфликты хуже распознаются: «9 утра» vs «10 утра» модели находят в 60-84% случаев, тогда как прямые отрицания («небо чистое» vs «небо не чистое») — почти всегда.
⚠️ Зависит от модели: На benchmark granite3.3 показал 88% на полной цепочке, а gpt-oss:20b — только 60%. Мелкие модели (1-3B параметров) вообще не справились с выполнением программы.
⚠️ Не для простых задач: Если текст короткий и без противоречий, метод избыточен. Cognitive BASIC полезен для сложных источников с конфликтующей информацией.
Как исследовали
Исследователи взяли 25 сценариев с заведомо противоречивыми утверждениями и прогнали через одну и ту же программу Cognitive BASIC на трёх моделях: granite3.3, gpt-oss:20b и mistral:7b. Каждый сценарий проверялся по трём этапам: (1) правильно ли извлечены факты, (2) найден ли конфликт, (3) адекватно ли разрешён.
Что удивило: Декларативное извлечение оказалось почти идеальным у всех моделей (96-100%), а вот обнаружение конфликтов разброс огромный — от 60% до 92%. Особенно плохо шли числовые расхождения: модели легко ловили «да/нет», но «открывается в 9» vs «открывается в 10» часто пропускали.
Практический инсайт: Cognitive BASIC работает как рентген для рассуждений модели. Без него ты не узнаешь, что модель проигнорировала конфликт — она просто выдаст уверенный ответ. С ним — видишь каждый шаг и можешь понять, где именно модель ошиблась.
Оригинал из исследования
Контекст: Это полная программа для извлечения фактов, поиска и разрешения конфликтов, которую использовали в экспериментах.
10 LET working = INPUT()
20 facts = EXTRACT DECLARATIVE(working)
30 ADD declarative FROM facts
40 rules = EXTRACT PROCEDURAL(working)
50 ADD procedural FROM rules
60 DETECT CONFLICTS()
70 IF CONFLICTS COUNT() > 0 THEN 90
80 GOTO 110
90 resolution = RESOLVE CONFLICTS()
100 PRINT resolution
110 END
Описание памяти из статьи:
working— текущий сценарий или промежуточный контент (буфер краткосрочной памяти)declarative— факты: что известно/истинноprocedural— правила: как действовать или рассуждатьconflicts— обнаруженные противоречия в формате «A || B»resolution— результат примирения конфликтов
Адаптации и экстраполяции
💡 Адаптация: Минимальная версия для быстрой проверки
Если не нужна полная трассировка и процедурные правила — упрощённая программа:
Ты — интерпретатор Cognitive BASIC. Выполни кратко.
10 LET working = INPUT()
20 EXTRACT DECLARATIVE(working) → declarative
30 DETECT CONFLICTS()
40 IF CONFLICTS > 0: RESOLVE CONFLICTS() → resolution
50 END
INPUT(): "{твой текст}"
🔧 Техника: Добавить PRINT на каждом шаге → детальная отладка
Если хочешь видеть промежуточные состояния подробнее:
25 PRINT declarative
35 PRINT procedural
65 PRINT conflicts
Это покажет, что именно модель извлекла на каждом этапе.
💡 Адаптация: Только извлечение без конфликтов
Для структурированного анализа текста без проверки противоречий:
10 LET working = INPUT()
20 facts = EXTRACT DECLARATIVE(working)
30 ADD declarative FROM facts
40 rules = EXTRACT PROCEDURAL(working)
50 ADD procedural FROM rules
60 PRINT declarative
70 PRINT procedural
80 END
Полезно для быстрого разбора интервью, статей, заметок на факты и правила.
Ресурсы
Работа: «Cognitive BASIC: An In-Model Interpreted Reasoning Language for LLMs»
Автор: Oliver Kramer, Computational Intelligence Group, University of Oldenburg, Germany
Связанные работы:
- Cognitive Prompting (Kramer & Baumann, 2025) — основа подхода
- Chain-of-Thought (Wei et al., 2022) — классика пошаговых рассуждений
- ReAct (Yao et al., 2023) — синергия рассуждений и действий
