3,583 papers
arXiv:2511.07223 65 10 нояб. 2025 г. FREE

NoteEx: интерактивная визуальная манипуляция контекстом для ассистированного LLM исследовательского анализа данных в вычислительных ноутбуках

КЛЮЧЕВАЯ СУТЬ
С помощью интерактивной flowchart-визуализации зависимостей между ячейками можно превратить LLM-ассистента в Jupyter из “угадывателя контекста” в точный инструмент, который понимает вашу логику анализа данных
Адаптировать под запрос

0. TL;DR

📌

Ключевой результат

С помощью интерактивной flowchart-визуализации зависимостей между ячейками можно превратить LLM-ассистента в Jupyter из “угадывателя контекста” в точный инструмент, который понимает вашу логику анализа данных.

📌

Для кого и какую боль решает

Для аналитиков данных и исследователей, которые работают с длинными Jupyter-ноутбуками (50+ ячеек) и тратят 30-40% времени на объяснение LLM контекста через копипаст кода и переписывание промптов, потому что автоматический выбор контекста промахивается мимо их логики.

🔬

Суть метода

Проблема: LLM в ноутбуках (как Copilot) выбирает контекст только по code dependencies — какие переменные технически используются. Но аналитик думает mental-model dependencies — “этот график связан с той фильтрацией данных, потому что я проверяю гипотезу X”. Это разные вещи.

Метод превращает невидимую ментальную модель в видимую структуру. Вместо линейного списка ячеек — граф с узлами (ячейки) и связями (ваша логика). Вы рисуете связь “эта визуализация продолжает ту обработку данных” — и LLM получает правильный контекст автоматически.

Механика: LLM плохо угадывает намерения из линейной последовательности кода. Но если вы явно показали “ячейка B логически следует из A” — система предлагает A как контекст для промпта в B. Вы добавляете связи только там, где автоматика ошибается (5-10% случаев), а не каждый раз вручную копируете код.

Метафора: Вместо того чтобы каждый раз объяснять LLM “возьми данные из ячейки 12, учти фильтр из 34, игнорируй 35” — вы один раз нарисовали карту своих мыслей, и система сама предлагает нужное.

🔬

Ключевые элементы метода

  1. Flowchart-визуализация (Canvas View): Показывает все ячейки как узлы графа с превью кода, статусом выполнения и выводом. Пример: Узел с зелёной полоской = выполнен успешно, красная = ошибка, оранжевая = не выполнен или изменён.

  2. Ручное указание mental-model dependencies: Вы рисуете стрелки между ячейками, чтобы показать логические связи (не code dependencies). Пример: Соединяете две ячейки загрузки данных с ячейкой их объединения — показываете fork-and-join паттерн.

  3. Автоматическое предложение контекста на основе графа: Система предлагает все ячейки, связанные с текущей, как контекст для LLM. Пример: Открываете LLM-ассистента в ячейке визуализации → система предлагает связанные ячейки обработки данных и переменные.

  4. Data Information View: Список всех переменных с указанием, где они определены/используются, с превью структуры данных. Пример: Наводите на переменную data3 → подсвечиваются ячейки, где она создана (синяя метка “defined") и использована (фиолетовая “used").

  5. Интерактивное редактирование контекста: Перед отправкой промпта видите предложенный контекст и можете добавить/убрать ячейки и переменные. Пример: Система предложила 2 ячейки, вы добавили переменную labels из Data Information View для уточнения.

📋

Готовый промпт для старта

⚠️ Готового промпта нет — это не промпт-техника, а расширение для JupyterLab (NoteEx). Требует установки плагина.

Что нужно для применения:

  • Установить расширение NoteEx для JupyterLab (TypeScript + React)
  • Доступ к LLM API (в исследовании использовали GPT-4o-mini)
  • Базовые навыки работы с Jupyter Notebooks

Как использовать после установки:

  1. Откройте .ipynb файл — автоматически появится вкладка NoteEx с Canvas View
  2. Создавайте ячейки и рисуйте связи между ними (drag-and-drop стрелки)
  3. Нажмите “ASK AI” в нужной ячейке → система предложит контекст на основе графа
  4. Отредактируйте контекст (добавьте/уберите ячейки или переменные) → отправьте промпт

📌

1. Суть исследования

Исследователи из University of Waterloo и Hong Kong University of Science and Technology изучали, почему LLM-ассистенты в Jupyter-ноутбуках (типа Copilot) часто дают неточные ответы при анализе данных. Проблема в выборе контекста: автоматика выбирает ячейки по code dependencies (какие переменные технически связаны), но аналитик думает mental-model dependencies (какие ячейки логически связаны по смыслу анализа).

Они провели формативное исследование (n=6) и выявили 4 ключевые проблемы: (1) ментальная модель эволюционирует по ходу анализа, (2) метаданные ячеек (статус выполнения, ошибки, выводы) важны, но их невозможно удержать в голове, (3) переменные данных неявные — сложно найти и использовать, (4) ручной выбор контекста утомителен, а автоматический часто ошибается.

На основе этого создали NoteEx — расширение для JupyterLab с тремя компонентами:

  • Canvas View: flowchart-визуализация ячеек как узлов графа с превью кода, статусами, выводами
  • Data Information View: список переменных с указанием, где определены/используются
  • LLM-Assistant View: интерфейс для промптов с автоматическим предложением контекста на основе нарисованного графа зависимостей

Пользовательское исследование (n=12) показало: NoteEx значительно улучшил удержание ментальной модели и выбор контекста, что привело к более точным и релевантным ответам LLM. Участники в 2 раза больше взаимодействовали с интерфейсом, сократили длину промптов с 1569 до 44 символов (контекст передаётся отдельно), увеличили количество промптов с 6.33 до 11.42 за сессию при меньшем времени на взаимодействие с LLM (1.99 → 1.31 минуты).

Почему это важно: Это первый инструмент, который позволяет аналитикам явно экстернализировать свою логику анализа для LLM, вместо того чтобы каждый раз вручную объяснять контекст или полагаться на неточную автоматику.


📌

2. Объяснение почему этот подход работает

Суть метода в разделении двух типов зависимостей:

Code dependencies (что видит автоматика): Ячейка B использует переменную из ячейки A → A автоматически попадает в контекст для B.

Mental-model dependencies (что думает аналитик): “Я создал две версии загрузки данных с разными фильтрами (ячейки A и A’), обе используют переменную data1. Сейчас работаю с версией A, но автоматика может выбрать A’, потому что там та же переменная.”

Слабость LLM, которую обходит метод: LLM не может угадать намерения аналитика из линейной последовательности кода. Когда в ноутбуке 50+ ячеек с экспериментами, альтернативными путями, версиями — автоматический выбор по code dependencies промахивается, потому что не знает “какую версию я сейчас развиваю”.

Сильная сторона LLM, которую использует метод: LLM отлично работает, когда получает правильный контекст. Проблема не в качестве генерации, а в качестве входных данных.

Как метод превращает сложную задачу в простую: Вместо того чтобы LLM угадывал контекст из 50 ячеек, аналитик один раз рисует 10-15 связей (только там, где логика неочевидна), и система автоматически предлагает правильные ячейки. Аналитик тратит 30 секунд на рисование связи вместо 2 минут на копипаст кода и объяснение контекста в каждом промпте.

Ключевой инсайт из исследования: Участники создали в среднем 15 ячеек и 14.17 связей. Это значит, что не каждая ячейка требует явной связи — только те, где mental-model отличается от code dependencies. Система работает как “гибрид": автоматика + минимальные ручные подсказки.


📌

3. Чего избегать

Антипаттерн Почему вредит Что делать вместо
Рисовать связи между всеми ячейками подряд Превращает граф в спагетти, теряется смысл. Участники создали 14 связей на 15 ячеек — не 1:1 Рисуйте связи только там, где логика неочевидна: альтернативные пути, fork-and-join, документация к коду
Полагаться только на автоматический выбор контекста Промахивается в 30-40% случаев, когда есть альтернативные версии кода с теми же переменными Используйте Canvas View для уточнения логики в сложных местах
Игнорировать Data Information View Тратите время на поиск переменных в коде, открываете CSV файлы для проверки структуры Наводите на переменные в Data Information View — видите где определены/используются + структуру данных
Отправлять промпт без проверки предложенного контекста LLM может получить лишние ячейки или пропустить нужные переменные Всегда проверяйте editable preview перед отправкой — добавьте/уберите что нужно

📋

4. Промпты

⚠️ Готового промпта нет — это расширение для JupyterLab, а не промпт-техника.

Однако, исследование показывает паттерн взаимодействия с LLM через NoteEx:

📌

Рабочий процесс с NoteEx

text
[ШАГ 1: Экстернализация ментальной модели]
1. Создаёте ячейки в Jupyter как обычно
2. В Canvas View рисуете связи между ячейками, где логика неочевидна:
   - Альтернативные пути (две версии обработки данных)
   - Fork-and-join (объединение двух источников данных)
   - Документация (текстовая ячейка объясняет код)
   - Последовательные этапы (визуализация следует из обработки)

[ШАГ 2: Подготовка контекста для LLM]
1. Выбираете ячейку, где нужна помощь LLM
2. Нажимаете "ASK AI"
3. Система автоматически предлагает:
   - Все ячейки, связанные с текущей через нарисованные связи
   - Переменные, определённые в этих ячейках
   - Ошибки выполнения (если есть)
   - Выводы ячеек (если нужно для задачи)

[ШАГ 3: Уточнение контекста]
1. Проверяете предложенный контекст в editable preview
2. Добавляете недостающее:
   - Кликаете на узлы в Canvas View → добавляются ячейки
   - Кликаете на переменные в Data Information View → добавляются переменные
3. Убираете лишнее (снимаете галочки)

[ШАГ 4: Промпт]
Пишете короткий промпт (в среднем 44 символа):
   - "combine data as data3"
   - "fix the error"
   - "interesting insights into the plot"
   - "median income by age groups"

Контекст передаётся автоматически, не нужно копипастить код.
📌

Пример из исследования (сценарий Sarah)

Задача: Объединить два датасета (демография + доходы)

Без NoteEx (Baseline):

text
Промпт в Copilot:
"Combine these two dataframes:

[копипаст кода из ячейки 1 - загрузка демографии]
data1 = pd.read_csv('demographics.csv')

[копипаст кода из ячейки 2 - загрузка доходов]  
data2 = pd.read_csv('income.csv')

Merge them on customer_id and save as data3"

Длина промпта: ~200+ символов + код

С NoteEx:

text
[В Canvas View]
1. Рисует связь: Node 1 (загрузка демографии) → Node 3 (пустая ячейка)
2. Рисует связь: Node 2 (загрузка доходов) → Node 3

[В LLM-Assistant View]
Система предлагает контекст:
✓ Node 1 (код загрузки демографии)
✓ Node 2 (код загрузки доходов)
✓ Переменная data1
✓ Переменная data2

Промпт: "combine data as data3"

Длина промпта: 21 символ (контекст передаётся автоматически)


📌

5. Оригинальные материалы из исследования

📌

Пример задачи из пользовательского исследования

Task #1 (pre-created notebook): Участникам дали готовый ноутбук с анализом датасета миллиардеров [26], содержащий 20+ ячеек. Задача: продолжить анализ, найти интересные паттерны.

Результат с Baseline:

  • Участники тратили 10-15 минут на понимание чужого workflow
  • Скроллили ноутбук туда-сюда, чтобы найти нужные ячейки
  • Копипастили код в промпты вручную
  • Средняя длина промпта: 1569 символов

Результат с NoteEx:

  • Участники поняли workflow “мгновенно” через Canvas View
  • Не скроллили — кликали на узлы графа для навигации
  • Промпты: 44 символа в среднем
  • Цитата P4: "The mind map (Canvas View) made it much easier to understand your workflow and intent quickly. Without it [in Baseline], I would’ve spent 10-15 minutes just figuring out your approach, but with the cell structure, I understood it instantly."
📌

Ключевые метрики из исследования

User Engagement (UES-SF):

  • Focused Attention: NoteEx значительно выше (F(1,22)=17.888, p<0.005)
  • Aesthetic Appeal: NoteEx значительно выше (F(1,22)=45.195, p<0.005)
  • Reward Factor: NoteEx значительно выше (W=3, p<0.005)

Context Selection - Ease of Use:

  • NoteEx значительно выше по всем 5 вопросам (F(1,22)=36.217, p<0.005)
  • Цитата P2: "It (NoteEx) really understood my intentions really well without me having to type everything."

Objective Metrics:

  • Количество взаимодействий с Notebook View: 66.25 (Baseline) → 16.33 (NoteEx)
  • Количество взаимодействий с Canvas View: 0 (Baseline) → 87.50 (NoteEx)
  • Время на User-LLM interaction: 1.99 мин (Baseline) → 1.31 мин (NoteEx)
  • Количество промптов: 6.33 (Baseline) → 11.42 (NoteEx)
  • Длина промпта (без контекста): 1568.75 символов (Baseline) → 44.26 символов (NoteEx)

⚠️

6. Ограничения

На чём тестировалось:

  • 12 участников (опытные пользователи Jupyter + LLM)
  • 2 задачи EDA: (1) продолжение готового ноутбука с 20+ ячейками, (2) анализ с нуля
  • Датасеты: миллиардеры, бронирования отелей
  • LLM: GPT-4o-mini
  • Время на задачу: 15 минут

Когда метод может не работать:

  • Для очень коротких ноутбуков (< 10 ячеек) — overhead от рисования графа не окупается
  • Для линейных анализов без альтернативных путей — автоматический выбор контекста и так работает хорошо
  • Требует привыкания: 2 участника из 12 поставили низкие оценки прогрессу (outliers), возможно из-за открытости задач

Важные оговорки авторов:

  • Data Information View показывает только схему данных, не сами данные — участники просили добавить превью
  • Path-based execution (выполнение только нужных ячеек по графу) — полезная фича, но не тестировалась отдельно
  • Исследование не сравнивало с другими 2D-подходами (B2, VisFlow) — только с линейным Baseline

📌

7. Барьер входа

Высокий барьер — требует установки расширения для JupyterLab.

Что нужно:

  • Установить NoteEx extension (TypeScript + React код)
  • JupyterLab environment
  • Доступ к LLM API (GPT-4o-mini или аналог)
  • Базовые навыки работы с Jupyter Notebooks

Не нужно:

  • Обучение модели
  • GPU
  • Доступ к весам модели
  • Написание кода (расширение готовое)

Статус доступности: Исследование не указывает, опубликован ли код расширения. Скорее всего, это прототип для исследования.


📌

8. Оценка

Критерий Макс. Баллы Обоснование
Новизна 35 30 Первый инструмент для явной экстернализации mental-model dependencies в ноутбуках для LLM-контекста
Практичность 35 25 Решает реальную боль (выбор контекста), но требует установки расширения
Воспроизводимость 25 18 Детальное описание UI/UX, но код расширения не опубликован
Доказательства 20 17 Сильное user study (n=12), статистически значимые результаты, но только 2 задачи
Штраф за барьер -25 Высокий: установка расширения JupyterLab, нет публичного кода

ИТОГО: 65/100

📌

Интерпретация

Категория: Полезное

Главная ценность: Первый инструмент, который позволяет аналитикам явно показать LLM свою логику анализа через визуальный граф зависимостей, вместо того чтобы каждый раз вручную объяснять контекст.

Кому полезно:

  • Аналитикам данных с длинными ноутбуками (50+ ячеек)
  • Исследователям, которые экспериментируют с альтернативными путями анализа
  • Командам, которые передают ноутбуки друг другу (Canvas View помогает быстро понять чужую логику)
  • Тем, кто готов установить расширение для JupyterLab

Кому НЕ полезно:

  • Тем, кто работает с короткими ноутбуками (< 10 ячеек) — overhead не окупается
  • Тем, кто использует другие IDE (VS Code, Google Colab) — расширение только для JupyterLab
  • Тем, кто не готов устанавливать расширения или ждёт публикации кода

🔗

Ресурсы

Название работы: NoteEx: Interactive Visual Context Manipulation for LLM-Assisted Exploratory Data Analysis in Computational Notebooks

Авторы:

  • Mohammad Hasan Payandeh (University of Waterloo, School of Computer Science)
  • Lin-Ping Yuan (The Hong Kong University of Science and Technology)
  • Jian Zhao (University of Waterloo, School of Computer Science)

Датасеты из исследования:

  • [26] Billionaires dataset
  • [27] Hotel bookings dataset

Связанные инструменты (упомянутые в статье):

  • GitHub Copilot [61] — baseline для сравнения
  • B2 [63] — 2D canvas для ноутбуков без визуализации зависимостей
  • VisFlow [66], VisComposer [36] — flowchart-визуализации для data analysis workflows

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

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

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