0. TL;DR
Ключевой результат
С помощью few-shot промптинга можно превратить общую LLM в инструмент для автоматической модификации кода на узкоспециализированных языках программирования (например, RAPID для промышленных роботов), даже если модель никогда не обучалась на этом языке.
Для кого и какую боль решает
Для инженеров в производственных компаниях, которые тратят часы на рутинную адаптацию кода роботов при переносе производственных линий между проектами — переименование переменных, добавление смещений позиций, реверс движений. Особенно актуально для малых и средних предприятий, которые не могут позволить себе обучение собственных моделей или покупку специализированных решений от гигантов вроде ABB.
Суть метода
Метод превращает LLM из “генератора кода с нуля” в “точный редактор существующего кода”. Ключевая идея: вместо того чтобы просить модель написать программу, мы даём ей конкретный код и показываем на примерах, КАК именно его нужно изменить.
LLM плохо справляются с генерацией на незнакомых языках, но хорошо распознают паттерны. Исследователи используют эту сильную сторону: через few-shot примеры модель видит структуру языка RAPID (похожего на Pascal) и учится применять трансформации — переименование, вставку инструкций, реверс логики.
Это работает потому, что:
- Задача упрощается: не “напиши программу для робота”, а “замени velocity1 на velocity2 в этих 5 строках”
- Контекст ограничен: строгие правила форматирования + валидатор отсекают неправильные варианты
- Паттерны узнаваемы: синтаксис RAPID похож на языки, которые LLM знает (Pascal, Ada)
Метафора: это как научить переводчика редактировать технический документ на незнакомом языке, показав ему 2-3 примера правок — он уловит паттерн и применит к остальным страницам.
Ключевые элементы метода
Few-Shot Learning (обучение на примерах): Промпт содержит 2-11 пар “было → стало” для каждого типа модификации. Пример:
PROC mv400_500() ... MoveJ id1,p400,v_slow,... → PROC mv400_500() ... MoveJ id1,p400,v_fast,...Строгие правила форматирования: Явное описание синтаксиса RAPID с примерами для каждого правила. Пример:
Movement_TYPE TARGET_POSITION, VELOCITY, ZONE, TOOL\\WObj:= WORK_OBJECT;Валидация на основе правил: Кастомный валидатор проверяет 20+ типов ошибок (неправильные аргументы, лишние инструкции, нарушение логики). Пример проверки: “Первая инструкция должна иметь параметр NoMove”
Множественная генерация (10 попыток): Для каждой задачи генерируется 10 вариантов, валидатор выбирает корректный. Эффект: точность 91% при одной попытке → 99% при десяти попытках для простых задач
Английские промпты для кода: Даже если код содержит немецкие комментарии, промпты на английском работают лучше (83.72% vs 77.27% для сложных задач).
Готовый промпт для старта
⚠️ Полный промпт недоступен — исследователи не могут поделиться из-за конфиденциальности данных компании AKE Technologies. Но структура описана детально (см. раздел “Промпты").
Что нужно для применения:
- Доступ к LLM через API (Llama 3.1 70B или аналог)
- Собственные примеры кода на вашем языке (2-11 пар “до/после")
- Валидатор для проверки результатов (можно начать с простых regex-правил)
1. Суть исследования
Исследователи из Университета Пассау (Германия) совместно с производственной компанией AKE Technologies проверили, может ли обычная LLM (Llama 3.1 70B) модифицировать код на языке RAPID — узкоспециализированном языке для программирования промышленных роботов ABB.
RAPID практически отсутствует в открытых данных (его нет даже в The Stack v2 — крупнейшем датасете кода из 32 языков), поэтому модель точно не обучалась на нём специально. Задача: понять, можно ли через промпт-инжиниринг заставить LLM корректно редактировать такой код.
Они протестировали три задачи возрастающей сложности на 1720 реальных примерах из 75 проектов компании:
- Изменение аргументов (например, заменить скорость во всех инструкциях) — точность 99.36%
- Добавление инструкции смещения (вставить новую строку с offset в нужное место) — точность 91.97%
- Реверс движения робота (переписать логику в обратном порядке с учётом специальных случаев) — точность 83.72%
Почему это важно: Малые и средние производственные компании не могут обучать собственные модели (нужны GPU, данные, ML-эксперты). Исследование показывает, что даже с готовой моделью через API и грамотными промптами можно автоматизировать рутинные задачи в нишевых доменах. Это снижает барьер входа для AI-автоматизации в промышленности.
2. Объяснение почему этот подход работает
Суть метода — превратить абстрактную задачу генерации кода в конкретную задачу распознавания паттернов.
LLM плохо справляются с генерацией синтаксически корректного кода на языках, которых не было в обучающих данных — модель просто не знает правил. Но у LLM есть сильная сторона: способность улавливать паттерны из примеров и применять их к новым данным (few-shot learning).
Метод обходит слабость через три механизма:
Ограничение задачи: Вместо “напиши программу для робота” (требует знания RAPID) → “замени X на Y в этих строках” (требует только распознавания структуры). Модель видит паттерн
MoveJ id,position,velocity,...и понимает, что нужно менять третий аргумент.Структурное сходство: RAPID похож на Pascal/Ada — языки, которые LLM знает. Модель переносит знания о похожих синтаксических конструкциях (процедуры, параметры, комментарии).
Валидация + множественные попытки: Даже если модель ошибается в 1 из 10 случаев, валидатор отсекает неправильные варианты. Генерируя 10 вариантов, мы получаем хотя бы один корректный в 99% случаев для простых задач.
Аналогия: Представьте, что вы не знаете китайский, но вам показали 3 примера, как в китайском тексте заменить иероглиф “быстро” на “медленно”. Вы не понимаете смысл, но видите паттерн позиции иероглифа и можете повторить замену на новых текстах. LLM делает то же самое с кодом.
3. Чего избегать
| Антипаттерн | Почему вредит | Что делать вместо |
|---|---|---|
| Промпты на языке комментариев в коде | Точность падает на 6-8% для сложных задач (77% vs 84%) | Всегда используйте английские промпты, даже если код содержит комментарии на другом языке |
| Одна попытка генерации | Для задач средней сложности ошибка в ~8% случаев | Генерируйте 5-10 вариантов + валидатор выбирает корректный |
| Отсутствие валидатора | Модель добавляет лишние инструкции, меняет не те аргументы | Обязательно создайте rule-based валидатор с проверками формата |
4. Промпты
Рамочный промпт (структура с пояснениями)
[БЛОК 1: Роль эксперта]
You are an expert in robot programming.
← Зачем: переключает модель в режим "технический специалист", снижает креативность
[БЛОК 2: Формат вывода]
Give only the OUTPUT, no further explanations.
← Зачем: предотвращает добавление комментариев, которые сломают парсинг
[БЛОК 3: Правила синтаксиса RAPID]
This is how to formulate a movement instruction:
Movement_TYPE TARGET_POSITION, VELOCITY, ZONE, TOOL\\WObj:= WORK_OBJECT;
EXAMPLE: MoveJ pR7_400,vR7_rapid,z50,toR7_active\\WObj:= woR7_Base;
← Зачем: даёт модели шаблон структуры, который она не знает из обучения
[БЛОК 4: Специальные правила]
- Do not add any additional instructions.
- The first movement instruction always has rapid velocity, active tool, and base WObj.
← Зачем: явно запрещает типичные ошибки модели (добавление лишнего, изменение дефолтов)
[БЛОК 5: Few-Shot примеры]
INPUT:
PROC mv400_500()
MoveJ id1,p400,v_slow,z50,tool\\WObj:= base;
MoveJ id2,p500,v_slow,z50,tool\\WObj:= base;
ENDPROC
TASK: Use velocity v_fast
OUTPUT:
PROC mv400_500()
MoveJ id1,p400,v_fast,z50,tool\\WObj:= base;
MoveJ id2,p500,v_fast,z50,tool\\WObj:= base;
ENDPROC
← Зачем: показывает модели точный паттерн трансформации "было → стало"
[Повторить 1-10 примеров в зависимости от сложности задачи]
Готовый промпт (адаптация под вашу задачу)
⚠️ Готового промпта нет — исследователи не могут опубликовать полные промпты из-за конфиденциальности данных компании AKE Technologies.
Что нужно для создания своего промпта:
- Соберите 5-15 примеров реальных модификаций кода из вашей практики
- Извлеките правила форматирования вашего языка/стандарта (как в БЛОКЕ 3 выше)
- Определите типичные ошибки и добавьте запреты (как в БЛОКЕ 4)
- Структурируйте примеры в формате INPUT → TASK → OUTPUT
- Тестируйте на английском, даже если код на другом языке
Пример минимального промпта для задачи “изменить скорость":
You are an expert in {ваш язык программирования}.
Give only the OUTPUT, no explanations.
Instruction format: {шаблон вашей инструкции с примером}
Rules:
- Change only the specified argument
- Do not modify comments
- Keep all other parameters unchanged
EXAMPLE 1:
INPUT:
{ваш код до изменения}
TASK: Change velocity to v_fast
OUTPUT:
{ваш код после изменения}
EXAMPLE 2:
{второй пример}
Now apply to:
INPUT:
{новый код для модификации}
TASK: {ваша задача}
OUTPUT:
Объяснение почему этот промпт работает
Промпт работает за счёт трёх находок исследователей:
Few-Shot Learning вместо Zero-Shot: Без примеров модель галлюцинирует синтаксис RAPID (точность ~30-40%). С 2-11 примерами точность подскакивает до 83-99% в зависимости от сложности. Модель улавливает паттерн трансформации из примеров.
Явные запреты типичных ошибок: Фраза “Do not add any additional instructions” критична — без неё модель в 43% случаев добавляет лишние строки при задаче “добавить offset”. Исследователи выявили это через валидатор и добавили в промпт.
Английский язык для технических инструкций: Даже при коде с немецкими комментариями английский промпт даёт +6.45% точности на сложных задачах (83.72% vs 77.27%). Llama 3.1 лучше обучена на английском техническом языке.
5. Оригинальные материалы из исследования
Оригинальный промпт: Модификация аргументов
- You are an expert in robot programming.
- Give only the OUTPUT, no further explanations.
- This is how to formulate a movement instruction:
Movement_TYPE TARGET_POSITION, VELOCITY, ZONE, TOOL\\WObj:= WORK_OBJECT;
EXAMPLE: MoveJ pR7_400,vR7_rapid,z50,toR7_active\\WObj:= woR7_Base;
- Do not add any additional instructions.
- If the movement type is Machine_Tending, you must add Machine_Tending_ID as follows:
Movement_TYPE ID,TARGET_POSITION, VELOCITY, ZONE, TOOL\\WObj:= WORK_OBJECT;
EXAMPLE: MT_MoveJ 400, pR7_400,vR7_rapid,z50,toR7_active\\WObj:= woR7_Base;
- The first movement instruction in a movement routine always has rapid velocity,
active tool, and base WObj.
[EXAMPLES — 2 пары INPUT/OUTPUT]
Результат: 99.36% точность на 1720 примерах при 10 попытках генерации.
Описание механик:
- Роль эксперта — снижает вероятность “творческих” отклонений
- Шаблон синтаксиса — компенсирует отсутствие RAPID в обучающих данных
- Явный запрет на добавление — предотвращает типичную ошибку LLM “улучшить” код
- Правило для первой инструкции — кодирует стандарт компании AKE
- Few-shot примеры — показывают точный паттерн замены аргумента
6. Ограничения
На чём тестировалось:
- Язык RAPID для роботов ABB
- Только простые движения между двумя позициями (1720 примеров из 12196 доступных)
- Код со строгими стандартами форматирования компании AKE Technologies
- Llama 3.1 70B (квантизованная версия q4_0)
Не тестировалось:
- Другие языки промышленной автоматизации (ladder logic, Structured Text)
- Сложные движения через 3+ позиции
- Генерация кода с нуля (только модификация существующего)
- Другие LLM (GPT-4, Claude и т.д.)
Когда метод может не работать:
- Если в вашем языке нет структурного сходства с популярными языками (Pascal, C, Python)
- Если нет строгих правил форматирования (валидатор не сможет отсечь ошибки)
- Для задач, требующих понимания бизнес-логики (модель работает на уровне синтаксиса)
- Если нужна 100% надёжность без проверки человеком
Важные оговорки авторов:
- Результаты получены в контролируемых условиях одной компании
- Требуется валидатор — без него точность падает
- Сложные задачи (реверс логики) всё ещё требуют проверки разработчиком
- Неясно, даст ли это реальный прирост производительности (будет проверено в будущих исследованиях)
7. Барьер входа
Средний барьер — нужна адаптация под свой домен:
- Доступ к LLM через API (Llama 3.1 70B или аналог) — стандарт
- Сбор 5-15 примеров кода из вашей практики — 2-4 часа работы
- Создание валидатора на regex/правилах — 1-2 дня разработки
- Итерационная настройка промптов — 3-5 итераций
Можно запустить локально (Llama 3.1 70B работает на одной A100), что критично для конфиденциальных данных.
8. Оценка
Таблица оценки
| Критерий | Макс. | Баллы | Обоснование |
|---|---|---|---|
| Новизна | 35 | 28 | Первое исследование применения LLM к промышленным DSL без файнтюнинга, но сам few-shot подход известен |
| Практичность | 35 | 30 | Решает реальную боль производственных компаний, но требует создания валидатора и сбора примеров |
| Воспроизводимость | 25 | 15 | Детально описана методология, но промпты и данные недоступны из-за NDA |
| Доказательства | 20 | 18 | 1720 реальных примеров, детальный анализ ошибок, но только один язык и одна компания |
| Применимость к другим доменам | -10 | Результаты могут не переноситься на языки без структурного сходства с популярными | |
| Штраф за барьер | -15 | Средний: нужен сбор примеров (2-4ч) + разработка валидатора (1-2 дня) + итерации промптов |
ИТОГО: 66/100
Интерпретация
Категория: Полезное
Главная ценность: Показывает путь для автоматизации рутинных задач в нишевых доменах без дорогого файнтюнинга — достаточно грамотных промптов и валидации.
Кому полезно:
- Инженерам в производственных компаниях с повторяющимися задачами модификации кода
- Малым и средним предприятиям без ML-экспертизы и бюджета на обучение моделей
- Компаниям с конфиденциальными данными (можно запустить локально)
Кому НЕ полезно:
- Тем, кто работает с языками, радикально отличающимися от популярных (нет переноса знаний)
- Проектам, где нужна генерация кода с нуля, а не модификация
- Задачам, требующим 100% надёжности без человеческой проверки
- Компаниям без строгих стандартов кодирования (валидатор не построить)
Ресурсы
Название работы: “Utilizing LLMs for Industrial Process Automation: A Case Study on Modifying RAPID Programs”
Авторы:
- Salim Fares (University of Passau, Germany)
- Steffen Herbold (University of Passau, Germany)
Партнёр: AKE Technologies GmbH — компания по разработке производственных систем (сборка, тестирование, автомобильные интерьеры)
Важные отсылки:
- ABB RAPID Programming Language — проприетарный язык для роботов ABB
- The Stack v2 — крупнейший датасет кода (32 языка, RAPID отсутствует)
- Llama 3.1 70B — модель Meta, использованная в исследовании
Ссылки:
- AKE Technologies: https://ake-technologies.de/
- Проект финансируется Bavarian State Ministry of Science and Arts (проект PLC-GPT)
