3,583 papers
arXiv:2610.21597 83 15 окт. 2026 г. FREE

Toolmaker-подход: вместо анализа моделью, инструмент, который проверяется на эталонах

КЛЮЧЕВАЯ СУТЬ
Обнаружено: на живых данных точность модели 94–96%, а по всем полям схемы только 74–86%. Метод Toolmaker позволяет сверять таблицы, разбирать файлы и делать выгрузки без скрытых ошибок. Фишка: не проси ответ, проси инструмент. Модель пишет скрипт, а ты проверяешь его на примерах с заранее известным ответом. Инструмент в 21 000 строк совпал с эталоном и отработал за 2 минуты.
Адаптировать под запрос
⚡

TL;DR

Toolmaker-подход — это правило разделения труда. Модель не разбирает ваши данные «глазами», а пишет код (скрипт, парсер, проверку), который разбирает их вместо неё. Этот код вы проверяете на примерах с заранее известным правильным ответом. Авторы проверили это на реверс-инжиниринге форматов данных iPhone: когда модели читали дизассемблированный код напрямую, большинство результатов содержало ошибки, а написанный Claude инструмент восстановил всё точно.

Главная боль: ошибки модели невидимы. Результат выглядит безупречно: синтаксис верный, названия правдоподобные, всё «собирается» и даже что-то декодирует. Но внутри перепутанные типы, сдвинутые номера, потерянные значения. Почти 90% неверных полей вообще не встретились в реальном трафике, поэтому проверка «прогоним на реальных данных, вроде работает» их пропустила бы. Модель не сообщает «я не уверена». Она выдаёт связную, но неверную картину.

Метод в двух частях. Первая: просите не ответ, а инструмент и проверяете его на независимых эталонах (данные с известным ответом, ранее опубликованные результаты, реальные измерения). Вторая: если всё же нужен прямой анализ большого объёма, режьте задачу на мелкие единицы и отдавайте каждую свежему агенту с чистым контекстом. Один агент на всё сломался почти полностью.

🔬

Схема метода

ЧАСТЬ A — Toolmaker (основной вывод статьи)
ШАГ 1: НЕ просить модель анализировать данные напрямую
ШАГ 2: Попросить модель написать инструмент (скрипт) → код + тесты
ШАГ 3: Собрать независимые эталоны: данные с известным ответом,
        прежние результаты, внешние измерения
ШАГ 4: Требовать от инструмента точного совпадения с эталоном
ШАГ 5: Только после этого запускать на реальных данных

ЧАСТЬ B — если прямой анализ неизбежен (оригинальный промпт авторов)
ШАГ 1: Разбить задачу на единицы (один класс = одна единица)
ШАГ 2: Каждую единицу — новому агенту с чистым контекстом
ШАГ 3: В промпте: «не уверен — пометь UNRESOLVED, не угадывай»
ШАГ 4: Сверить результат с эталоном вне модели
🚀

Пример применения

Метод сильнее всего там, где результат можно проверить на заведомо известных примерах: сверки, парсинг, выгрузки, подсчёты. Он слабее там, где «правильный ответ» субъективен (тон текста, креатив): эталон для них не построить.

Задача: Финансовый менеджер селлера на Ozon получил выгрузку отчёта о реализации на 30 000 строк и выгрузку из 1С. Нужно найти расхождения по сумме. Если просто отправить обе таблицы в чат с вопросом «найди расхождения», модель выдаст правдоподобный список. Но часть расхождений она пропустит, а часть выдумает. Ты этого не заметишь.

Промпт:

Я сверяю отчёт о реализации Ozon (файл ozon.xlsx) с выгрузкой из 1С (файл 1c.xlsx).
Не анализируй данные сам. Напиши Python-скрипт reconcile.py, который:
— сопоставляет строки по номеру отправления;
— выводит расхождения по сумме, пропуски в одной из таблиц и дубли;
— сохраняет результат в mismatches.xlsx.

Затем сделай тестовый набор, в котором ответ известен заранее:
— 20 строк, где всё совпадает;
— 5 строк с расхождением в сумме (включая копейки и отрицательные суммы — возвраты);
— 3 строки, которые есть только в Ozon;
— 3 строки, которые есть только в 1С;
— 2 дубля.
Напиши заранее, какой результат должен получиться на тестовом наборе.
Запусти скрипт на тестовом наборе и покажи, совпадает ли результат с ожидаемым ровно.
Если нет — исправь скрипт и повтори.
Если какое-то правило сопоставления тебе неясно — не угадывай, а задай мне вопрос.
Только после точного совпадения запускай на реальных файлах.

Результат: Модель сначала выдаст скрипт и тестовый набор с ожидаемым ответом. Затем покажет прогон: что нашёл скрипт и что должно было получиться. Если есть расхождения, она их поправит и повторит. На реальных файлах получится таблица расхождений, которую выдал проверенный код, а не «взгляд» модели. Дополнительно возьми 10–20 расхождений из итога и проверь вручную.

🧠

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

Слабость модели. Когда модель читает данные сама, она склонна выдавать согласованную картину. Мелкие ошибки (перепутанный тип, пропущенная строка, сдвиг номеров) не ломают общую связность и поэтому не заметны. Одна ранняя ошибка тихо портит всё, что от неё зависит. Проверка «на реальных данных вроде работает» тут ненадёжна: ошибки прячутся в редких случаях, которые реальные данные почти не задевают.

Сильная сторона. Писать код по понятной спецификации модель умеет хорошо. Инструмент детерминирован: на одних и тех же входных данных он даёт один и тот же результат, и его можно проверить. Авторы получили инструмент в 21 000 строк с тестами, написанный целиком моделью. Он дал результат, идентичный эталонному, и отработал за пару минут без обращений к модели.

Как метод обходит слабость. Он переносит доверие с модели на проверку. Вы не верите модели, вы верите совпадению с эталоном. Чем независимее эталон от самой модели, тем надёжнее проверка.

Рычаги: - Эталоны. Чем больше редких и крайних случаев в тестах, тем меньше шансов пропустить скрытые ошибки: ошибки сидят именно там. - Единица задачи. Меньше единица, чище контекст у агента. Один агент на всё провалился: он останавливался, не дойдя до большей части вложенных структур, возможно из-за переполнения контекста. - Разрешение сказать «не знаю». Явная пометка вместо догадки снижает число выдуманных значений. - Независимые источники правды. Сверка с ранее опубликованными результатами и реальными измерениями ловит то, что тесты не видят.

📋

Шаблон промпта

A. Оригинальный промпт для агента по одной единице (по описанию авторов). Полные тексты промптов авторов лежат в их репозитории на GitHub. В статье описана логика, ниже она переведена в шаблон.

Ты разбираешь одну единицу задачи: {единица}.
Источник: {источник_данных}. Доступны только эти инструменты: {инструменты}.
Внешние подсказки, готовые ответы и поиск в интернете недоступны.

Для этой единицы восстанови: {что_восстановить_по_каждому_элементу}.
Если элемент ссылается на другую единицу — не разбирай её сам, 
а верни ссылку на неё в списке «следующие единицы».

Если из источника что-то НЕ видно — пометь как
// UNRESOLVED: <причина>
Не угадывай и не придумывай.
Если элемент по своей природе простой ({простой_тип}) — оставь его простым, 
не выдумывай для него сложный тип.

Верни: список элементов + список «следующие единицы».

Оркестрация: каждую единицу из списка «следующие единицы» вы отдаёте новому чату или новому агенту с этим же шаблоном. Ведёте список уже разобранных единиц, чтобы не повторять работу. В статье это делал Python-скрипт. В обычной работе можно вести общий список вручную или попросить агента с субагентами (например, Claude Code) вести его.

B. Адаптация: Toolmaker-запрос (по духу вывода статьи).

Задача: {задача_анализа}. Данные: {описание_данных}.
Не анализируй данные напрямую. Напиши инструмент: {язык_и_формат}, который {что_делает_инструмент}.

Проверка:
1. Построй тестовый набор с заранее известным ответом: {типы_случаев}, 
   включая редкие и крайние случаи: {крайние_случаи}.
2. Сначала напиши ожидаемый результат, потом запусти инструмент.
3. Требуй точного совпадения. Если нет — исправь и повтори.
4. Если спецификация неясна — задай вопрос, не угадывай.
5. Только после совпадения запусти на реальных данных и дай мне
   10 случайных результатов для ручной проверки.

Подставляйте: {задача_анализа} — что нужно получить, {описание_данных} — формат и размер, {крайние_случаи} — редкие ситуации в ваших данных (возвраты, пустые поля, дубли, нестандартные кодировки).

🚀 Быстрый старт — вставь в чат:

Вот шаблон Toolmaker-подхода. Адаптируй под мою задачу: [твоя задача]. 
Задавай вопросы, чтобы заполнить поля.

[вставить шаблон выше]

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

📌

Что показали цифры

  • Две модели восстанавливали схемы 17 сообщений (около 7 800 полей). Claude не справился с 1 069 полями, Codex с 1 980. Многие ошибки не были видны.
  • На полях, которые встречаются в реальном трафике, точность 94–96%, на всех полях схемы 74–86%. Тест на реальных данных пропустил бы почти 90% ошибочных полей.
  • Один агент на всю задачу: правильно 8,9% полей. Свежий агент на каждую единицу: заметно лучше, но дорого.
  • Подход «агент на каждую единицу» потребовал около пяти суток и миллионы токенов. Инструмент справился примерно за 2 минуты без вызовов модели.
⚠️

Ограничения

⚠️ Эталоны не бесплатны: Проверка инструмента требует независимого источника правды. Авторы построили эталоны в ходе собственного ручного реверс-инжиниринга. Если эталон нечем получить, подход теряет главную опору.

⚠️ Одна область: Эксперимент проведён на одной задаче: восстановление схем из бинарных файлов Apple. Перенос на ваши задачи (сверки, парсинг, выгрузки) — логичный вывод, но в статье он отдельно не проверялся.

⚠️ Субъективные критерии: Если у результата нет проверяемого правильного ответа (стиль, креатив, оценка идей), эталон не построить, и метод не поможет.

⚠️ Прямой анализ дорог и ненадёжен: Если всё же прогонять модель по большому объёму, это дорого по токенам. Один агент на весь объём почти полностью провалился.

⚠️ Тест на реальных данных обманывает: «Прогнал на живых данных, вроде работает» не доказывает корректность. Ошибки прячутся в редких случаях, которых в реальных данных мало.

⚠️ Неполный текст: Описание самого инструмента и его проверки в доступной версии обрезано, часть деталей не видна.

🔗

Ресурсы

  • Decoding What iOS Location Services Send to Apple: An LLM Is an Unreliable Analyst but a Useful Toolmaker — D. J. Leith, Trinity College Dublin, Ireland.
  • Инструмент (Extractor) и ios_decoder: https://github.com/doug-leith/ios-protobufdecoding
  • Данные ИИ-анализа, включая использованные промпты, и сетевые измерения: https://github.com/doug-leith/ioslocation-services-study-data

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

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

Обнаружено: на живых данных точность модели 94–96%, а по всем полям схемы только 74–86%. Метод Toolmaker позволяет сверять таблицы, разбирать файлы и делать выгрузки без скрытых ошибок. Фишка: не проси ответ, проси инструмент. Модель пишет скрипт, а ты проверяешь его на примерах с заранее известным ответом. Инструмент в 21 000 строк совпал с эталоном и отработал за 2 минуты.

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

Метод в двух частях. Часть A (главная): Модель пишет скрипт и тесты. Ты собираешь независимые эталоны: данные с известным ответом, старые результаты, реальные замеры. Требуешь точного совпадения. Только потом запускаешь на настоящих данных. Часть B (если без прямого анализа никак): Режь задачу на мелкие единицы. Каждую отдавай новому агенту с чистым контекстом. В промпте пиши: «не уверен, пометь UNRESOLVED, не угадывай». Верь не модели, а совпадению с эталоном. Это как экзамен с ключом ответов. Ты не спрашиваешь студента «ты уверен?», а сверяешь его работу с ключом.

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

Когда модель читает данные сама, она рисует связную картину. Перепутанный тип, пропущенная строка, сдвинутый номер не ломают эту связность. Ошибки выглядят правдоподобно, поэтому глаз их не ловит, а эталон ловит. Одна ранняя ошибка тихо портит всё, что от неё зависит. Проверка «прогнал на реальных данных» тут обманывает. Почти 90% неверных полей в реальном трафике вообще не встретились. Ошибки сидят в редких случаях. Модель при этом хорошо пишет код по понятной спецификации. Код детерминирован: одни данные на входе, один результат на выходе. Его можно проверить. Жесть: один агент на всю задачу дал правильно лишь 8,9% полей. Он бросал работу, не дойдя до большей части структур. Свежий агент на каждую единицу справился заметно лучше, но это пять суток и миллионы токенов. Инструмент сделал то же за 2 минуты без обращений к модели.

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

Сверки, разбор документов, выгрузки, подсчёты, миграции данных → особенно когда результат можно проверить на примерах с известным ответом и в данных много редких случаев (возвраты, дубли, пустые поля). Не подходит для задач, где правильный ответ субъективен: тон текста, креатив, оценка идей. Эталон для них не построить. Метод также теряет опору, если независимый источник правды взять неоткуда. Доказан он на одной узкой задаче (разбор форматов данных iPhone), перенос на твои задачи авторы не проверяли.

Мини-рецепт

1. Запрети анализ: напиши прямо «не анализируй данные сам, напиши скрипт».
2. Опиши, что скрипт делает: по какому ключу сопоставлять, что выводить, куда сохранять.
3. Заставь построить тестовый набор: с известным ответом и с редкими случаями. Возвраты, копейки, дубли, строки только в одной таблице.
4. Ответ пиши до запуска: модель сначала фиксирует ожидаемый результат, потом запускает скрипт.
5. Требуй точного совпадения: не совпало, значит чини и повторяй.
6. Разреши сказать «не знаю»: если правило сопоставления неясно, пусть задаст вопрос, а не угадывает.
7. Только теперь запускай на настоящих файлах.
8. Проверь руками: возьми 10–20 строк из итога и сверь сам.
9. Объём слишком большой для скрипта: режь на единицы, каждую отдавай новому чату или агенту. Ведите общий список уже разобранного.

Примеры

[ПЛОХО] : Вот отчёт Ozon и выгрузка из 1С на 30 000 строк. Найди расхождения по сумме. Модель выдаст правдоподобный список. Часть расхождений пропустит, часть выдумает. Ты этого не увидишь.
[ХОРОШО] : Не анализируй данные сам. Напиши Python-скрипт reconcile.py: сопоставляет строки по номеру отправления, выводит расхождения по сумме, пропуски и дубли в mismatches.xlsx. Сделай тестовый набор с известным ответом: 20 совпадающих строк, 5 с расхождением (включая копейки и отрицательные суммы-возвраты), 3 только в Ozon, 3 только в 1С, 2 дубля. Сначала напиши ожидаемый результат, потом запусти скрипт. Не совпало ровно — исправь и повтори. Правило неясно — задай вопрос, не угадывай. Только после точного совпадения запускай на ozon.xlsx и 1c.xlsx. Быстрый старт: вставь в чат Адаптируй Toolmaker-подход под мою задачу: [твоя задача]. Задавай вопросы про данные, нужный результат и редкие случаи, без них не построить тестовый набор.
Источник: Decoding What iOS Location Services Send to Apple: An LLM Is an Unreliable Analyst but a Useful Toolmaker
ArXiv ID: 2610.21597 | Сгенерировано: 2026-10-16 08:20

Проблемы LLM

ПроблемаСутьКак обойти
Модель сама разбирает данные и делает скрытые ошибкиДаёшь таблицы, логи или код и просишь "найди", "разбери", "извлеки". Получаешь гладкий, правдоподобный результат. Внутри пропущенные строки, перепутанные типы, сдвинутые номера. Модель не пишет "я не уверена". Мелкие ошибки не ломают общую связность, поэтому их не видно. Одна ранняя ошибка тихо портит всё, что от неё зависитНе проси ответ. Проси инструмент: скрипт, парсер, проверку. Проверь его на примерах с заранее известным ответом. Подробно: метод "Инструмент вместо ответа"
Одна большая задача в одном чате разваливаетсяЗагружаешь в один контекст огромный объём и просишь разобрать всё. Модель теряет нить, останавливается на полпути, пропускает большую часть. Выглядит как "готово", но сделана малая доляРежь задачу на мелкие единицы. Каждую отдавай в новый чат с чистым контекстом. Подробно: метод "Свежий чат на каждую единицу"

Методы

МетодСуть
Инструмент вместо ответа — проверяемый результатНе проси модель анализировать данные. Проси написать скрипт, который это делает. Затем: 1) пусть модель построит тестовый набор с известным ответом; 2) пусть сначала напишет ожидаемый результат, потом запустит скрипт; 3) требуй точного совпадения, при расхождении — исправить и повторить; 4) если правило неясно, пусть задаст вопрос, а не угадывает; 5) только после совпадения запускай на реальных данных. Синтаксис: Не анализируй данные сам. Напиши скрипт... Сначала запиши ожидаемый результат на тесте. Запусти. Совпало ровно? Только тогда — на реальных файлах. Почему работает: код по ясной спецификации модель пишет хорошо. Код детерминирован: одни данные дают один результат. Доверие переходит с модели на проверку. Когда да: сверки, парсинг, выгрузки, подсчёты, извлечение полей, миграции. Когда нет: результат субъективен (тон, стиль, креатив) и эталон не построить. Доп. шаг: возьми 10–20 результатов и проверь вручную
Свежий чат на каждую единицу — большой объём без потерьРаздели большую задачу на мелкие самостоятельные единицы (один файл, один раздел, один класс). Для каждой — новый чат или субагент с тем же шаблоном запроса. Если единица ссылается на другую, пусть модель не разбирает её сама, а возвращает ссылку в список «следующие единицы». Веди список разобранных единиц, чтобы не повторять работу. В запрос добавь: Если из источника что-то не видно — пометь // UNRESOLVED: <причина>. Не угадывай. Почему работает: маленькая единица держит контекст чистым. Явная пометка «не знаю» заменяет выдуманное значение. Когда да: большой объём, где единицы разбираются независимо. Когда нет: мало данных (дороже без выигрыша) или единицы тесно связаны. Минус: дорого по токенам и времени, после сборки всё равно нужна сверка с внешним эталоном

Тезисы

ТезисКомментарий
Модель надёжнее пишет код по спецификации, чем обрабатывает данные «глазами»Код проверяется и повторяется. Прямой разбор данных — одноразовый и непроверяемый. Модель при прямом разборе стремится к связной картине, а не к точной. Применяй: любую задачу вида «обработай эти данные» переформулируй в «напиши инструмент, который их обработает»
Чем независимее эталон от модели, тем надёжнее проверкаЕсли модель сама придумала и тест, и ожидаемый ответ, она может повторить свою же ошибку дважды. Надёжнее: известные результаты, ручные расчёты, внешние измерения, ранее проверенные данные. Применяй: часть тестовых случаев и ожидаемых ответов задай сам или возьми из старых проверенных отчётов. Не отдавай их целиком модели
📖 Простыми словами

Decoding What iOS Location Services Send to Apple: AnLLMIs an Unreliable Analyst but aUsefulToolmaker

arXiv: 2610.21597

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

Это как посадить близорукого гуманитария вручную пересчитывать десять тысяч чеков. Вроде очень старается, но на сотой строчке собьётся, постесняется признаться и просто нарисует красивую цифру с потолка. А правильный путь — заставить этого же человека написать один короткий скрипт на Python и прогнать его на трёх известных чеках. Работник свободен, скрипт считает без фантазий, а ты не получаешь липовый отчёт за миллион.

Рабочая схема называется подход тулмейкера (Toolmaker pattern). Вместо того чтобы модель ковыряла данные своими «глазами», ты поручаешь ей написать автономный инструмент — парсер, скрипт проверки или конвертер. В исследовании протоколов Apple прямой разбор кода моделями дал тонну лажи, а вот написанный через Claude скрипт восстановил закрытые форматы данных со 100% точностью. Главное условие — иметь эталонные примеры, чтобы сразу проверить код на вшивость.

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

Главный вывод: нейросеть — паршивый аналитик, но блестящий инструментальщик. Перестань просить её «посмотреть данные» и сделать выводы прямо в чате. Заставляй модель писать исполняемый код и прогоняй его через жесткие тесты с заранее известным ответом. Кто отдаёт ручной анализ на откуп модели — строит процессы на песке и честном слове.

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

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

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