LLM을 활용한 제조 도구 구축: 단계별 가이드
요약
비정형 제조 교대 근무 보고서에서 결함 데이터와 심각도를 추출하는 품질 관리 에이전트 구축 가이드입니다. Oxlo.ai와 OpenAI 호환 엔드포인트를 활용하여 Python 기반의 구조화된 데이터 추출 파이프라인을 만드는 과정을 단계별로 설명합니다.
핵심 포인트
- 비정형 텍스트를 구조화된 JSON 데이터로 변환하는 에이전트 구축
- Oxlo.ai의 OpenAI 호환 엔드포인트를 통한 손쉬운 도구 통합
- Llama 3.3 70B 및 Qwen 3 32B 모델을 활용한 텍스트 처리
- JSON 모드를 활용하여 프로덕션 수준의 안정적인 출력 보장
우리는 비정형 교대 근무 보고서(shift reports)를 읽고 구조화된 결함 데이터, 심각도 점수 및 권장 조치를 추출하는 제조 품질 관리 에이전트(manufacturing quality control agent)를 구축하고 있습니다. 이는 현장 관리자가 모든 인수인계 로그를 수동으로 분석하지 않고도 생산 라인 전반의 패턴을 파악할 수 있도록 도와줍니다. 우리는 이를 Oxlo.ai에서 OpenAI 호환 엔드포인트(OpenAI-compatible endpoint)를 사용하여 실행할 것이므로, 기존 도구에 바로 통합할 수 있습니다.
필요한 사항
- Python 3.10 이상
pip install openai- https://portal.oxlo.ai에서 발급받은 Oxlo.ai API 키
저는 길고 노이즈가 많은 현장 텍스트를 안정적으로 처리할 수 있기 때문에 이 작업에 Llama 3.3 70B를 선택했습니다. 만약 보고서에 기술적인 중국어(Mandarin)나 스페인어 메모가 포함되어 있다면, Oxlo.ai에서 Qwen 3 32B가 강력한 대안이 될 수 있습니다.
1단계: Oxlo.ai에 연결하고 엔드포인트 테스트하기
먼저, API 키와 기본 URL(base URL)이 작동하는지 확인하세요. 저는 새로운 엔드포인트를 기반으로 구축하기 전에 항상 빠른 상태 확인(health check)을 실행합니다.
from openai import OpenAI
client = OpenAI(base_url="https://api.oxlo.ai/v1", api_key="YOUR_OXLO_API_KEY")
...
2단계: 제조 보고서 형식 정의하기
현장의 교대 근무 감독관들은 자유 형식의 로그를 작성합니다. 저는 장비 ID, 결함 설명 및 일상적인 약어가 혼합된 현실적인 예시를 만들었습니다. 이것이 에이전트가 소비하게 될 데이터입니다.
SHIFT_REPORT = """
Shift: A-2
Date: 2024-05-14
...
3단계: 시스템 프롬프트(System Prompt) 작성하기
시스템 프롬프트는 계약과 같습니다. 저는 다운스트림(downstream) 코드에서 추측할 필요가 없도록 JSON 키와 심각도 수준(severity levels)을 엄격하게 유지합니다.
SYSTEM_PROMPT = """
You are a manufacturing quality control analyst. Read the shift report and
produce a JSON object with exactly these keys:
...
4단계: 결함 분류기(Defect Classifier) 구축하기
이제 원시 보고서 텍스트를 받아 파싱된 문자열을 반환하는 함수로 호출을 감쌉니다. 저는 창의적인 글쓰기가 아닌 결정론적 추출(deterministic extraction)을 원하기 때문에 온도를 낮게(temperature low) 설정합니다.
import json
def classify_defect(report_text: str) -> dict:
...
```
raw = raw.split("\n", 1)[1].rsplit("```\n", 1)[0].strip()
...
## Step 5: JSON 모드를 사용한 구조화된 출력 (structured output) 추가
파이프라인을 프로덕션 수준 (production-grade)으로 만들기 위해, JSON 모드 (JSON mode)를 활성화합니다. 이를 통해 모델이 유효한 JSON을 출력하도록 강제하고, 코드 블록 구분자(fence)를 제거하기 위한 편법(hack)을 없앨 수 있습니다. 또한, 에이전트가 깨끗한 보고서를 어떻게 처리하는지 보여주기 위해 두 번째 예시를 추가합니다.
```
import json
CLEAN_REPORT = """
...
```
## Step 6: 일주일 치 데이터 배치 처리 (Batch process) 및 심각한 문제 플래그 지정
실제 업무에서는 매주 월요일마다 보고서 폴더를 전달받습니다. 이 루프는 리스트를 처리하고, 심각도 (severity)를 집계하며, 즉각적인 주의가 필요한 사항을 드러냅니다. Oxlo.ai는 토큰 (token) 단위가 아닌 요청 (request) 단위로 비용을 청구하기 때문에, 수십 개의 긴 교대 근무 로그를 처리하는 비용은 짧은 핑 (ping) 하나를 보내는 비용과 동일합니다. 이는 보고서가 여러 페이지에 달할 때 매우 유용합니다.
```
WEEKLY_REPORTS = [
SHIFT_REPORT,
CLEAN_REPORT,
...
```
## 실행하기
모든 내용을 `qc_agent.py`에 저장하고 `python qc_agent.py`를 실행합니다. 주간 요약을 실행했을 때 다음과 같은 결과를 볼 수 있습니다:
```
Report 1: severity=major, line=Line 3
Report 2: severity=none, line=None
Report 3: severity=critical, line=Line 2
...
```
에이전트는 압출기 줄무늬 (extruder streaking) 현상을 major로, 깨끗한 교대 근무를 none으로, 유압 프레스 (hydraulic press)를 중단 권고와 함께 critical로 정확하게 플래그 지정했습니다. 유지보수 이력에 대해 더 깊은 추론 (reasoning)이 필요한 경우, 다른 코드를 변경할 필요 없이 Oxlo.ai에서 모델을 `deepseek-v3.2` 또는 `kimi-k2.6`으로 교체하면 됩니다.
## 다음 단계
파싱된 JSON을 SQLite 또는 TimescaleDB 테이블에 입력하여, 시간 경과에 따라 라인 및 스테이션별 결함률 (defect rates)의 추세를 파악할 수 있습니다. 또한 `production_halt_recommended` 플래그를 Slack 웹훅 (webhook)이나 PagerDuty 알림에 연결하여, 보고서가 수신함에 도착한 후 몇 초 이내에 관리자에게 알림이 가도록 설정할 수도 있습니다.
```
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기