LLM 융합 CODE GENERATION

코드 생성 파이프라인

LLM → 인과 그래프(중간표현) → 룰베이스 벤더별 코드 생성

파이프라인 구조

graph LR A["🧠 LLM 처리"] --> B["📊 인과 그래프"] B --> C["🔍 검증"] C --> D["⚙️ 룰베이스"] style A fill:#7c3aed,stroke:#a78bfa,color:#fff style B fill:#0891b2,stroke:#06b6d4,color:#fff style C fill:#ea580c,stroke:#f97316,color:#fff style D fill:#00A843,stroke:#00C853,color:#fff
LLM 처리
자연어 → Flow/Work/Call 구조 생성
창의적 설계 (비결정적)
인과 그래프
JSON 기반 벤더 중립 모델
검증/시뮬레이션 가능
검증
타입/흐름/리소스/Safety 검증
ISO/TS 15066 준수
룰베이스
IR → PLC 코드 변환
결정적 (동일 입력 = 동일 출력)

LLM vs 룰베이스 역할 분담

LLM의 역할 (창의적 부분)
  • 자연어 요구사항 이해
  • 공법 설계 (Flow/Work 구조)
  • 적절한 세그먼트 조합 선택
  • 파라미터 값 추론
중간표현(인과 그래프)까지만 생성
룰베이스의 역할 (결정적 부분)
  • 인과 그래프 → PLC 코드 변환
  • 벤더별 문법/구조 적용
  • 최적화 (Dead Code 제거, 병합)
  • 프로젝트 파일 포맷 생성
동일 그래프 = 동일 코드 (재현성 100%)

왜 이 방식이 더 나은가?

비교 항목LLM 직접 코드 생성인과 그래프 + 룰베이스
재현성 같은 프롬프트 → 다른 코드 같은 그래프 → 동일 코드
검증 블랙박스, 검증 어려움 그래프 구조로 명시적 검증
안전성 규격 준수 미보장 Safety Agent가 규칙 체크
멀티벤더 각 벤더별 LLM 학습 필요 하나의 그래프 → N개 벤더
유지보수 수정 시 LLM 재생성 그래프 수정 → 자동 재생성

실제 변환 예시

1. 자연어 입력
"컨베이어 시작,
센서 감지 대기,
실린더 전진,
클램프"
↓ LLM
2. 인과 그래프 (IR)
{ "Flow": "Clamp",
  "Works": [
    "Conv", "Wait",
    "CylFwd", "Clamp"]
}
↓ 검증
3. 검증 결과
타입 검증 통과
흐름 검증 통과
리소스 충돌 없음
Safety 규칙 준수
↓ 룰베이스
4. PLC 코드
CASE Step OF
  0: Conv:=ON;
  1: WAIT Sens;
  2: Cyl:=ON;
  3: Clamp:=ON;
END_CASE
핵심 인사이트
  • LLM은 창의적 설계에 집중: 공법 구조를 만드는 데 LLM의 강점 활용
  • 룰베이스는 정확한 변환에 집중: 결정적 코드 생성으로 재현성/안전성 확보
  • 검증 레이어가 중간에 위치: LLM 출력을 검증한 후에만 코드 생성 진행
  • 각 단계가 분리되어 디버깅 가능: 문제 발생 시 어느 단계인지 명확히 파악