3,583 papers
arXiv:2507.15671 58 21 июля 2025 г. FREE

BugScope: учимся находить ошибки как человек

КЛЮЧЕВАЯ СУТЬ
Валидация: Последняя строка заставляет модель перепроверить свой вывод, что повышает его точность и снижает риск "галлюцинаций"
Адаптировать под запрос

Исследование представляет BugScope — систему из двух LLM-агентов, которая имитирует работу опытного программиста по поиску ошибок в коде. Система сначала учится на нескольких примерах кода (с ошибками и без), чтобы понять суть конкретного типа бага, а затем автоматически формирует промпт для поиска похожих уязвимостей в больших проектах.

Ключевой результат: Автоматическая генерация специализированных промптов, основанных на примерах и релевантном контексте, позволяет находить сложные и неочевидные баги в коде значительно эффективнее, чем существующие коммерческие инструменты и другие LLM-подходы.

Суть метода BugScope — в разделении сложной задачи поиска багов на два этапа, которые выполняют два разных "умных" агента. Это похоже на то, как работают два специалиста в команде.

  1. Агент №1: "Сыщик" (Context Retrieval Agent). Его задача — найти все релевантные фрагменты кода, связанные с потенциальной ошибкой. Он не пытается сразу найти баг. Вместо этого, на основе примеров, он учится определять "подозрительные места" (например, операции деления или работы с памятью) и, как детектив, собирает все "улики" — связанные с этим местом участки кода, даже если они находятся в других функциях или файлах. В итоге он готовит компактное "дело" — небольшой, самодостаточный фрагмент кода, где может скрываться ошибка.

  2. Агент №2: "Эксперт" (Bug Detection Agent). Этот агент получает "дело" от "Сыщика". Его задача — провести глубокий анализ. Он тоже учится на тех же первоначальных примерах и создает для себя очень подробную инструкцию (detection prompt), в которой описана логика поиска конкретного бага. Используя эту инструкцию, он изучает предоставленный код и выносит вердикт: есть здесь ошибка или нет. Для надежности, он также использует дополнительную LLM-проверку, чтобы отсеять ложные срабатывания ("галлюцинации").

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

  • Прямая применимость: Практически нулевая. Пользователь не может реализовать автоматический синтаксический анализ кода, построение графа вызовов и "слайсинг" программ. Метод требует серьезной программной инфраструктуры.

  • Концептуальная ценность: Очень высокая. Исследование раскрывает несколько мощных идей:

    • Сила примеров (Few-shot learning): Модель способна выучить сложный паттерн всего по нескольким примерам "правильного" и "неправильного" поведения.
    • Контекст — король: Качество ответа напрямую зависит от качества и полноты предоставленного контекста. Первый агент, по сути, занимается созданием идеального контекста для второго. Это аналог продвинутого RAG (Retrieval-Augmented Generation).
    • Декомпозиция задачи: Разделение одной сложной задачи на две более простые (поиск и анализ) — фундаментальный принцип эффективного промптинга.
    • Самовалидация: Идея использовать LLM для проверки собственных же выводов — отличный способ повысить надежность и снизить количество "галлюцинаций".
  • Потенциал для адаптации: Огромный. Пользователь может имитировать рабочий процесс BugScope вручную для решения своих задач.

    • Механизм адаптации:
      1. Станьте "Сыщиком": Перед тем как писать основной промпт, самостоятельно соберите всю необходимую информацию (тексты, данные, факты) по вашей задаче.
      2. Станьте "Экспертом": Напишите промпт, в который вы включите:
        • Роль (например, "Ты — опытный маркетолог").
        • Собранный контекст из шага 1.
        • Несколько четких примеров того, что вы хотите получить (few-shot).
        • Четкую задачу для анализа нового фрагмента информации.
      3. Добавьте "Валидатора": В конце промпта попросите модель проверить свой ответ на соответствие определенным критериям.

Представим, что вам нужно проанализировать отзывы клиентов на новый продукт и выделить ключевые проблемы.

Ты — опытный аналитик клиентского опыта. Твоя задача — анализировать отзывы и выявлять конструктивную критику, связанную с функционалом продукта. Игнорируй общие фразы и эмоциональные оценки, фокусируйся на конкретных проблемах.

**# Контекст**
Продукт: мобильное приложение для планирования бюджета "Копилка".
Ключевые функции: добавление расходов, создание категорий, просмотр статистики, синхронизация между устройствами.

**# Примеры анализа**

**Пример 1 (Хороший анализ):**
*   **Отзыв:** "Все нравится, но почему-то после последнего обновления перестала работать синхронизация с планшетом. Приходится все вбивать дважды."
*   **Твой анализ:**
    *   **Проблема:** Сбой синхронизации между устройствами.
    *   **Категория:** Технический баг.
    *   **Критичность:** Высокая.

**Пример 2 (Плохой анализ, который нужно избегать):**
*   **Отзыв:** "Приложение ужасное, ничего не работает, не советую!"
*   **Твой анализ:**
    *   **Проблема:** Неконструктивная критика, нет конкретики.
    *   **Категория:** Эмоциональная оценка.
    *   **Критичность:** Низкая.

---

**# Новая задача для анализа**

Проанализируй следующий отзыв по той же схеме. Предоставь ответ в формате: Проблема, Категория, Критичность.

**Отзыв для анализа:**
"В целом неплохо, но очень неудобно, что нельзя создать свою подкатегорию расходов. Например, в 'Транспорте' я хочу разделить 'Такси' и 'Общественный транспорт', а приложение не дает. Приходится все валить в одну кучу."

**# Валидация**
После ответа проверь, что твой анализ основан на конкретной функции продукта и не является твоим предположением.

Этот промпт работает, потому что он вручную воспроизводит логику BugScope:

  1. Роль и задача: Мы задаем четкую роль ("аналитик клиентского опыта") и цель, что настраивает модель на нужный лад.
  2. Контекст: Раздел # Контекст предоставляет модели необходимую информацию о продукте. Это ручной аналог работы "Сыщика" (Context Retrieval Agent), который собирает релевантную информацию.
  3. Few-Shot Learning: Раздел # Примеры анализа обучает модель на конкретных примерах, показывая, что такое "хороший" и "плохой" анализ. Это имитация работы "Эксперта" (Bug Detection Agent), который учится на примерах.
  4. Четкая задача: Раздел # Новая задача для анализа ставит конкретную, сфокусированную задачу, а не просит "проанализировать все отзывы".
  5. Валидация: Последняя строка заставляет модель перепроверить свой вывод, что повышает его точность и снижает риск "галлюцинаций". Это аналог валидационного шага в BugScope.

Задача: помочь HR-специалисту быстро оценить, подходит ли кандидат на должность "Контент-менеджер".

Ты — опытный HR-менеджер, специализирующийся на подборе креативных специалистов. Твоя задача — оценить сопроводительное письмо кандидата на соответствие ключевым требованиям вакансии.

**# Контекст: Требования вакансии "Контент-менеджер"**
*   Опыт работы с соцсетями (VK, Telegram) от 2 лет.
*   Наличие портфолио с примерами текстов.
*   Умение работать с графическими редакторами (Figma/Canva).
*   Проактивность и генерация идей.

**# Примеры оценки**

**Пример 1 (Подходящий кандидат):**
*   **Фрагмент письма:** "Веду телеграм-канал о путешествиях (ссылка на портфолио), самостоятельно готовлю для него тексты и визуалы в Figma. В прошлом месяце предложила и реализовала успешную коллаборацию с другим каналом, что привело к росту подписчиков на 20%."
*   **Твоя оценка:**
    *   **Соответствие:** Высокое.
    *   **Обоснование:** Упомянуты Telegram, Figma, есть портфолио и пример проактивности (коллаборация).

**Пример 2 (Неподходящий кандидат):**
*   **Фрагмент письма:** "Я ответственный и коммуникабельный, быстро учусь. Хочу развиваться в сфере SMM. Готов выполнять любые задачи."
*   **Твоя оценка:**
    *   **Соответствие:** Низкое.
    *   **Обоснование:** Нет упоминания конкретного опыта, соцсетей, инструментов или портфолио. Только общие фразы.

---

**# Новая задача для оценки**

Оцени сопроводительное письмо ниже по той же схеме. Дай ответ в формате: Соответствие, Обоснование.

**Письмо для оценки:**
"Добрый день! Меня заинтересовала ваша вакансия. Я более трех лет занимаюсь ведением коммерческих аккаунтов в VK. Все посты, от текста до дизайна в Canva, готовлю сама. Ссылку на примеры моих работ прикрепила к резюме. Люблю придумывать новые форматы контента."

**# Валидация**
Убедись, что твоя оценка основана только на информации из письма и ее соответствии требованиям из контекста.

Этот промпт эффективен по тем же структурным причинам, что и предыдущий, полностью отражая адаптированную методологию BugScope:

  1. Декомпозиция задачи: Вместо общей просьбы "оцени кандидата", задача разбита на предоставление контекста (требования вакансии) и анализ (оценка письма).
  2. Ручной RAG (сбор контекста): Секция # Контекст — это аналог работы "Сыщика". Мы вручную предоставляем модели всю необходимую информацию (требования), чтобы ей не пришлось их угадывать.
  3. Обучение на примерах (Few-shot): Секция # Примеры оценки работает как "Эксперт", который учится на кейсах. Модель видит, какая информация считается релевантной (упоминание инструментов, портфолио), а какая — нет ("вода").
  4. Сфокусированная генерация и валидация: Модели дается одно конкретное письмо для анализа и четкая инструкция по самопроверке. Это гарантирует, что ответ будет по существу и с меньшей вероятностью будет содержать додуманную информацию.
📌

Основные критерии оценки

  • A. Релевантность техникам промтинга: Низкая. Исследование описывает автоматизированную систему, которая сама создает промпты для анализа кода, а не учит пользователя, как их писать.
  • B. Улучшение качества диалоговых ответов: Низкое. Фокус на узкоспециализированной задаче (поиск багов в коде), а не на улучшении общих диалоговых сценариев.
  • C. Прямая практическая применимость: Очень низкая. Пользователь не может воспроизвести метод без специальных инструментов, навыков программирования и доступа к сложным системам анализа кода (AST-парсеры, анализ графа вызовов).
  • D. Концептуальная ценность: Высокая. Несмотря на узкую специализацию, исследование блестяще иллюстрирует универсальные принципы, которые продвинутый пользователь может адаптировать: важность few-shot learning, ценность предварительного сбора релевантного контекста (аналог RAG) и пользу декомпозиции задачи.
  • E. Новая полезная практика (кластеры): Концептуально работа попадает в кластеры #1 (Техники формулирования), #6 (Контекст и память) и #7 (Надежность и стабильность), но реализация этих техник полностью автоматизирована и недоступна для прямого применения пользователем.
  • Чек-лист практичности (+15 баллов): Да, работа концептуально показывает, как структурировать сложные запросы (декомпозиция на агентов) и как повысить точность (валидация), что дает +15 баллов к базовой оценке.
📌

Цифровая оценка полезности

Оценка 58 отражает баланс между очень низкой прямой практической пользой и высокой концептуальной ценностью для понимания продвинутых паттернов взаимодействия с LLM.

Аргументы за оценку: * Прямая польза почти нулевая: Обычный пользователь не занимается анализом кода на C++ и не может реализовать "slicing-based context retrieval". Инструменты и методы абсолютно недоступны для широкой аудитории. * Высокая концептуальная ценность: Исследование — это отличная демонстрация "промт-инжиниринга на стероидах". Оно показывает, что сложную задачу можно разбить на подзадачи (поиск контекста и анализ), обучить модель на примерах (few-shot) и заставить ее верифицировать свои же выводы. Эти мета-принципы очень полезны. * Фокус на коде: Основной предмет исследования — программный код, а не естественный язык в его общем понимании, что сильно снижает релевантность для 99% пользователей.

Контраргументы (почему оценка могла быть выше или ниже): * Почему могла быть ниже (< 40): Если оценивать исключительно по критерию "могу ли я это взять и сразу применить в ChatGPT", то оценка была бы крайне низкой. Работа не дает ни одной готовой фразы или структуры для повседневных задач. * Почему могла быть выше (> 65): Если бы пользователь был технически подкованным аналитиком (даже не программистом), он мог бы адаптировать саму логику работы BugScope для своих задач: 1) Сначала собрать все релевантные данные по теме. 2) Затем написать промпт, включающий примеры анализа (хорошие и плохие). 3) Дать модели новые данные для анализа. 4) Попросить модель проверить свой ответ на соответствие критериям. Эта адаптация рабочего процесса является мощным приемом, и с этой точки зрения исследование очень полезно.


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

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

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