Об этом проекте
SNAFU (Symbol Name Ambiguity Fixer-Upper) — это инструмент командной строки для разработчиков, который использует большие языковые модели (LLM) для помощи в выборе более ясных и менее неоднозначных названий для символов в исходном коде. Он вводит метрику под названием число неоднозначности имени (NAN), которая количественно определяет, насколько легко название символа может быть неправильно истолковано.
Инструмент работает через многоэтапный агентный конвейер. Сначала он извлекает символы из файла исходного кода и отправляет их в LLM без какого-либо окружающего контекста (например, тел функций или строк документации), чтобы имитировать когнитивную нагрузку разработчика, читающего код с чистого листа. LLM предоставляет список правдоподобных, взаимоисключающих интерпретаций названия вместе с вероятностями. SNAFU использует эти вероятности для вычисления энтропии Шеннона и получения NAN, где более низкий балл указывает на более ясное название.
Затем следует этап с участием человека, где пользователь подтверждает фактическое предполагаемое значение символа. LLM предлагает новое название, которое выражает только это подтвержденное значение. Это предложенное название повторно оценивается для вычисления нового NAN. Если новое название не уменьшает неоднозначность (положительная дельта), оно отбрасывается. Выжившие предложения проходят финальную проверку на здравый смысл с помощью LLM с полным контекстом, чтобы убедиться, что новое название разумно и соответствует подтвержденному значению. Наконец, пользователю представляется отчет о предложенных переименованиях.
SNAFU требует Python 3.14 или более поздней версии и менеджера пакетов `uv`. Он поддерживает несколько провайдеров LLM через библиотеку `any-llm`, позволяя пользователям указывать разные модели с помощью флага `--model`. По умолчанию он нативно понимает Python и использует Tree-sitter для извлечения символов в других языках, включая Ruby, C#, Java, JavaScript, TypeScript, PHP, Rust и Go.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.