3,583 papers
arXiv:2511.16837 78 20 нояб. 2025 г. FREE

Cognitive BASIC: структурированное рассуждение LLM через псевдо-BASIC

КЛЮЧЕВАЯ СУТЬ
LLM игнорирует противоречия в тексте. Видит «открывается в 9» и «открывается в 10» — молча выберет одно или усреднит, но не скажет что данные конфликтуют. Cognitive BASIC превращает рассуждения в явную программу: команды EXTRACT, DETECT CONFLICTS, RESOLVE выполняются построчно. Фишка: конфликт записывается в отдельное поле памяти conflicts — его нельзя проигнорировать. Модель вынуждена явно разрешить противоречие, а не молчать.
Адаптировать под запрос

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) — синергия рассуждений и действий

📋 Дайджест исследования

Ключевая суть

LLM игнорирует противоречия в тексте. Видит «открывается в 9» и «открывается в 10» — молча выберет одно или усреднит, но не скажет что данные конфликтуют. Cognitive BASIC превращает рассуждения в явную программу: команды EXTRACT, DETECT CONFLICTS, RESOLVE выполняются построчно. Фишка: конфликт записывается в отдельное поле памяти conflicts — его нельзя проигнорировать. Модель вынуждена явно разрешить противоречие, а не молчать.

Принцип работы

Не давай свободный текст — структурируй рассуждение как программу в стиле BASIC. Модель получает псевдокод: 10 LET working = INPUT(), 20 EXTRACT DECLARATIVE(), 60 DETECT CONFLICTS(). Каждая команда меняет память (declarative, procedural, conflicts) и логирует шаг. Противоречие становится артефактом данных — модель не может его пропустить, как в обычном тексте.

Почему работает

LLM отлично извлекают факты (100% у двух моделей), но плохо замечают конфликты в свободном тексте — числовые противоречия («9 утра» vs «10 утра») находят только в 60-84% случаев. Причина: в обычном промпте модель генерирует связный текст и сглаживает противоречия для гладкости изложения. Псевдокод меняет режим: вместо генерации текста — исполнение команд. DETECT CONFLICTS() требует явного поиска, а поле conflicts[] требует записи. Результат: противоречие становится видимым, а RESOLVE CONFLICTS() требует обоснованного примирения. На полной цепочке granite3.3 показал 88% точности.

Когда применять

Анализ данных из разных источников → конкретно для заметок с встреч, исследований рынка, отзывов клиентов, экспертных мнений, особенно когда источники могут противоречить друг другу. Подходит для due diligence, конкурентного анализа, синтеза противоречивой информации. НЕ подходит для коротких текстов без противоречий — метод избыточен.

Мини-рецепт

1. Скопируй программу: от 10 LET working = INPUT() до 110 END — это интерпретатор (готовый шаблон из исследования)
2. В INPUT() вставь текст: заметки, данные, отзывы — всё где могут быть противоречия
3. Запусти: модель выполнит программу построчно, выведет состояние памяти после каждого шага
4. Смотри conflicts[]: там найденные противоречия, в resolution — как модель их разрешила

Настройка под задачу: Убери строки 60-100 если нужно только извлечение фактов. Или добавь GOTO 60 после разрешения для повторной проверки конфликтов.

Примеры

[ПЛОХО] : Проанализируй эти отзывы клиентов о доставке и сделай вывод о скорости (Модель выдаст усреднённый вывод, проигнорировав что одни пишут «быстро», другие «медленно»)
[ХОРОШО] : Выполни Cognitive BASIC программу. INPUT(): [5 отзывов где 2 хвалят скорость доставки, 3 ругают]. После DETECT CONFLICTS() покажи что записалось в conflicts[] и как разрешилось в resolution (Модель запишет конфликт «быстро vs медленно», в resolution объяснит что скорость зависит от района или времени суток — противоречие становится видимым)
Источник: Cognitive BASIC: An In-Model Interpreted Reasoning Language for LLMs
ArXiv ID: 2511.16837 | Сгенерировано: 2026-01-11 20:12

Проблемы LLM

ПроблемаСутьКак обойти
Модель не сообщает о противоречиях в данныхДаёшь тексты из разных источников. Один говорит «доля 45%», другой «больше половины». Модель выберет один вариант. Или усреднит. Но не скажет «тут конфликт». Ты получишь уверенный ответ на основе противоречивых данных. Проблема для любой работы с множественными источникамиПринудь модель ЗАПИСАТЬ противоречие. Способ: создай структуру памяти с полем conflicts[] и командой DETECT CONFLICTS(). Модель вынуждена явно заполнить это поле. Конфликт становится артефактом — его нельзя проигнорировать

Методы

МетодСуть
Псевдокод-интерпретатор для рассужденийПревращаешь рассуждение в программу в стиле BASIC: пронумерованные строки, команды, логи. Описываешь в промпте структуру памяти (working, declarative, procedural, conflicts, resolution). Даёшь программу: 10 LET working = INPUT(), 20 facts = EXTRACT DECLARATIVE(working), 60 DETECT CONFLICTS(). Модель выполняет построчно и логирует каждый шаг. Почему работает: Модель отлично следует структурированным инструкциям. Псевдокод убирает двусмысленность. Команда DETECT CONFLICTS() — это конкретное действие, а не размытое "проанализируй". Противоречие записывается в отдельное поле — его невозможно пропустить. Когда применять: сложные тексты с противоречиями (заметки с встреч, данные из разных источников, конфликтующие отзывы). Когда не работает: короткий текст без конфликтов (метод избыточен), мелкие модели 1-3B параметров (не справляются с выполнением программы)
📖 Простыми словами

Cognitive BASIC: структурированное рассуждение LLM через псевдо-BASIC

arXiv: 2511.16837

Суть в том, что обычные нейронки — это патологические болтуны, которые пытаются угадать ответ, вместо того чтобы его вычислить. Когда ты просишь LLM проанализировать кучу данных, она просто «плывет по течению» текста. Если в одном источнике написано, что рынок растет, а в другом — что он рухнул, модель, скорее всего, просто выберет одну сторону или выдаст невнятную кашу. Она не умеет останавливаться и фиксировать ошибку, потому что ее природа — генерировать следующий токен, а не проверять логику. Cognitive BASIC ломает эту привычку, заставляя модель работать не как писатель, а как старый компьютерный процессор.

Это как если бы ты дал гуманитарию-фантазеру строгую должностную инструкцию из 80-х и запретил говорить отсебятину. Вместо того чтобы писать эссе, он теперь обязан выполнять пронумерованные команды: 10 ИЗВЛЕЧЬ ФАКТ, 20 СРАВНИТЬ, 30 ЕСЛИ ЕСТЬ КОНФЛИКТ — СТОП. Модель больше не может просто «проскочить» мимо противоречия, потому что структура кода заставляет её логировать каждый шаг. Формально она всё еще пишет текст, но этот текст теперь — жесткий алгоритм, где каждый шаг проверяет предыдущий.

Внутри одного промпта ты прописываешь и саму программу, и правила её выполнения. Метод заставляет модель использовать явные логические операторы: она ищет конкретные нестыковки в данных, вытаскивает их на поверхность и разрешает конфликты по заданному сценарию. Если в твоем обзоре рынка один эксперт говорит про рост на 20%, а другой — про стагнацию, Cognitive BASIC не даст модели это проигнорировать. Она буквально выведет строку лога: «Обнаружено противоречие в переменной GROWTH», и только потом пойдет дальше. Это превращает «галлюцинирующее облако» в прозрачный инструмент анализа.

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

Короче, хватит надеяться на «интеллект» модели — его там нет, есть только статистика. Чтобы получить адекватный результат, нужно превратить LLM в интерпретатор кода, который сам себя бьет по рукам за логические дыры. Cognitive BASIC доказывает, что структура важнее объема параметров. Либо ты заставляешь нейронку работать по алгоритму, либо продолжаешь получать уверенную фигню вместо аналитики. Кто перейдет на структурированные рассуждения, тот перестанет ловить галлюцинации там, где нужны сухие факты.

Работа с исследованием

Адаптируйте исследование под ваши задачи или создайте готовый промпт на основе техник из исследования.

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с