3,583 papers
arXiv:2511.11125 66 14 нояб. 2025 г. FREE

Использование LLM для автоматизации промышленных процессов: тематическое исследование по модификации программ RAPID

КЛЮЧЕВАЯ СУТЬ
С помощью few-shot промптинга можно превратить общую LLM в инструмент для автоматической модификации кода на узкоспециализированных языках программирования (например, RAPID для промышленных роботов), даже если модель никогда не обучалась на этом языке
Адаптировать под запрос

0. TL;DR

📌

Ключевой результат

С помощью few-shot промптинга можно превратить общую LLM в инструмент для автоматической модификации кода на узкоспециализированных языках программирования (например, RAPID для промышленных роботов), даже если модель никогда не обучалась на этом языке.

📌

Для кого и какую боль решает

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

🔬

Суть метода

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

LLM плохо справляются с генерацией на незнакомых языках, но хорошо распознают паттерны. Исследователи используют эту сильную сторону: через few-shot примеры модель видит структуру языка RAPID (похожего на Pascal) и учится применять трансформации — переименование, вставку инструкций, реверс логики.

Это работает потому, что:

  1. Задача упрощается: не “напиши программу для робота”, а “замени velocity1 на velocity2 в этих 5 строках”
  2. Контекст ограничен: строгие правила форматирования + валидатор отсекают неправильные варианты
  3. Паттерны узнаваемы: синтаксис RAPID похож на языки, которые LLM знает (Pascal, Ada)

Метафора: это как научить переводчика редактировать технический документ на незнакомом языке, показав ему 2-3 примера правок — он уловит паттерн и применит к остальным страницам.

🔬

Ключевые элементы метода

  1. Few-Shot Learning (обучение на примерах): Промпт содержит 2-11 пар “было → стало” для каждого типа модификации. Пример: PROC mv400_500() ... MoveJ id1,p400,v_slow,... → PROC mv400_500() ... MoveJ id1,p400,v_fast,...

  2. Строгие правила форматирования: Явное описание синтаксиса RAPID с примерами для каждого правила. Пример: Movement_TYPE TARGET_POSITION, VELOCITY, ZONE, TOOL\\WObj:= WORK_OBJECT;

  3. Валидация на основе правил: Кастомный валидатор проверяет 20+ типов ошибок (неправильные аргументы, лишние инструкции, нарушение логики). Пример проверки: “Первая инструкция должна иметь параметр NoMove”

  4. Множественная генерация (10 попыток): Для каждой задачи генерируется 10 вариантов, валидатор выбирает корректный. Эффект: точность 91% при одной попытке → 99% при десяти попытках для простых задач

  5. Английские промпты для кода: Даже если код содержит немецкие комментарии, промпты на английском работают лучше (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 проектов компании:

  1. Изменение аргументов (например, заменить скорость во всех инструкциях) — точность 99.36%
  2. Добавление инструкции смещения (вставить новую строку с offset в нужное место) — точность 91.97%
  3. Реверс движения робота (переписать логику в обратном порядке с учётом специальных случаев) — точность 83.72%

Почему это важно: Малые и средние производственные компании не могут обучать собственные модели (нужны GPU, данные, ML-эксперты). Исследование показывает, что даже с готовой моделью через API и грамотными промптами можно автоматизировать рутинные задачи в нишевых доменах. Это снижает барьер входа для AI-автоматизации в промышленности.


📌

2. Объяснение почему этот подход работает

Суть метода — превратить абстрактную задачу генерации кода в конкретную задачу распознавания паттернов.

LLM плохо справляются с генерацией синтаксически корректного кода на языках, которых не было в обучающих данных — модель просто не знает правил. Но у LLM есть сильная сторона: способность улавливать паттерны из примеров и применять их к новым данным (few-shot learning).

Метод обходит слабость через три механизма:

  1. Ограничение задачи: Вместо “напиши программу для робота” (требует знания RAPID) → “замени X на Y в этих строках” (требует только распознавания структуры). Модель видит паттерн MoveJ id,position,velocity,... и понимает, что нужно менять третий аргумент.

  2. Структурное сходство: RAPID похож на Pascal/Ada — языки, которые LLM знает. Модель переносит знания о похожих синтаксических конструкциях (процедуры, параметры, комментарии).

  3. Валидация + множественные попытки: Даже если модель ошибается в 1 из 10 случаев, валидатор отсекает неправильные варианты. Генерируя 10 вариантов, мы получаем хотя бы один корректный в 99% случаев для простых задач.

Аналогия: Представьте, что вы не знаете китайский, но вам показали 3 примера, как в китайском тексте заменить иероглиф “быстро” на “медленно”. Вы не понимаете смысл, но видите паттерн позиции иероглифа и можете повторить замену на новых текстах. LLM делает то же самое с кодом.


📌

3. Чего избегать

Антипаттерн Почему вредит Что делать вместо
Промпты на языке комментариев в коде Точность падает на 6-8% для сложных задач (77% vs 84%) Всегда используйте английские промпты, даже если код содержит комментарии на другом языке
Одна попытка генерации Для задач средней сложности ошибка в ~8% случаев Генерируйте 5-10 вариантов + валидатор выбирает корректный
Отсутствие валидатора Модель добавляет лишние инструкции, меняет не те аргументы Обязательно создайте rule-based валидатор с проверками формата

📋

4. Промпты

📋

Рамочный промпт (структура с пояснениями)

text
[БЛОК 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.

Что нужно для создания своего промпта:

  1. Соберите 5-15 примеров реальных модификаций кода из вашей практики
  2. Извлеките правила форматирования вашего языка/стандарта (как в БЛОКЕ 3 выше)
  3. Определите типичные ошибки и добавьте запреты (как в БЛОКЕ 4)
  4. Структурируйте примеры в формате INPUT → TASK → OUTPUT
  5. Тестируйте на английском, даже если код на другом языке

Пример минимального промпта для задачи “изменить скорость":

text
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:

Объяснение почему этот промпт работает

Промпт работает за счёт трёх находок исследователей:

  1. Few-Shot Learning вместо Zero-Shot: Без примеров модель галлюцинирует синтаксис RAPID (точность ~30-40%). С 2-11 примерами точность подскакивает до 83-99% в зависимости от сложности. Модель улавливает паттерн трансформации из примеров.

  2. Явные запреты типичных ошибок: Фраза “Do not add any additional instructions” критична — без неё модель в 43% случаев добавляет лишние строки при задаче “добавить offset”. Исследователи выявили это через валидатор и добавили в промпт.

  3. Английский язык для технических инструкций: Даже при коде с немецкими комментариями английский промпт даёт +6.45% точности на сложных задачах (83.72% vs 77.27%). Llama 3.1 лучше обучена на английском техническом языке.


📌

5. Оригинальные материалы из исследования

📋

Оригинальный промпт: Модификация аргументов

text
- 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)

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

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

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