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” — вы один раз нарисовали карту своих мыслей, и система сама предлагает нужное.
Ключевые элементы метода
Flowchart-визуализация (Canvas View): Показывает все ячейки как узлы графа с превью кода, статусом выполнения и выводом. Пример: Узел с зелёной полоской = выполнен успешно, красная = ошибка, оранжевая = не выполнен или изменён.
Ручное указание mental-model dependencies: Вы рисуете стрелки между ячейками, чтобы показать логические связи (не code dependencies). Пример: Соединяете две ячейки загрузки данных с ячейкой их объединения — показываете fork-and-join паттерн.
Автоматическое предложение контекста на основе графа: Система предлагает все ячейки, связанные с текущей, как контекст для LLM. Пример: Открываете LLM-ассистента в ячейке визуализации → система предлагает связанные ячейки обработки данных и переменные.
Data Information View: Список всех переменных с указанием, где они определены/используются, с превью структуры данных. Пример: Наводите на переменную
data3→ подсвечиваются ячейки, где она создана (синяя метка “defined") и использована (фиолетовая “used").Интерактивное редактирование контекста: Перед отправкой промпта видите предложенный контекст и можете добавить/убрать ячейки и переменные. Пример: Система предложила 2 ячейки, вы добавили переменную
labelsиз Data Information View для уточнения.
Готовый промпт для старта
⚠️ Готового промпта нет — это не промпт-техника, а расширение для JupyterLab (NoteEx). Требует установки плагина.
Что нужно для применения:
- Установить расширение NoteEx для JupyterLab (TypeScript + React)
- Доступ к LLM API (в исследовании использовали GPT-4o-mini)
- Базовые навыки работы с Jupyter Notebooks
Как использовать после установки:
- Откройте .ipynb файл — автоматически появится вкладка NoteEx с Canvas View
- Создавайте ячейки и рисуйте связи между ними (drag-and-drop стрелки)
- Нажмите “ASK AI” в нужной ячейке → система предложит контекст на основе графа
- Отредактируйте контекст (добавьте/уберите ячейки или переменные) → отправьте промпт
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
[ШАГ 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):
Промпт в 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:
[В 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
