※ 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다. ※

오늘은 사례 소개로만 보았던 공장 데이터 키워드 추출 문제를 직접 코드를 보며 따라해보는 실습을 진행했습니다 😗
어제까지는 합성 데이터와 프롬프트 엔지니어링 아이디어들을 사례 위주로만 가볍게 훑어봤다면,
오늘은 Pandas, OpenAI API, Python 등을 활용하며, 키워드 추출 문제에 대해 어떻게 자동화할 수 있는지 직접 구현해보는 시간이었습니다.
🔧 키워드 추출 모델 실습
실습 데이터는 실제 공장 설비의 고장 내역 데이터의 일부였습니다.
예를 들어 “클램프기동이상 오일보충 에어 제거” 같은 고장 내용을 보고,
여기서 고장부품, 불량유형, 조치내용을 자동으로 추출하는 것이 목표였죠.
코드 흐름은 크게 다음과 같았습니다.
1️⃣ Pandas로 데이터프레임 구성 → 고장부품·불량유형·조치내용이 비어 있는 샘플만 추출
import pandas as pd
import ast
data = {
"수리일자": ["2023-09-07", "2021-10-08", "2022-02-23", "2022-04-06", "2021-02-20", "2021-02-26", "2021-04-13", "2021-07-30", "2022-07-12", "2022-07-13", "2022-07-18", "2022-07-18", "2022-08-11", "2022-09-13", "2022-10-04", "2022-10-26", "2022-11-11", "2022-11-14"],
"고장내용": [
"출하장 입구 에어 50A 유니온 에어리크 재조임",
"SHIELD ROOM 화풍기 철거부위 마감,판넬벽체문타공",
"F/P 기능상실 PLC 확인 및 클램프 감지센샤 조정",
"와이어 전진동작이상 점검 중 정상 작동됨",
"클램프기동이상 오일보충 에어 제거",
"피이더 조작판 매입 콘센트 고정",
"QDC 파손 클램프 교체",
"광세샤 고정블록 볼트 마모 600ton 것으로 대체",
"휠 회전 작동불량 점검 세기정공 AS 요청",
"클러치 ASS'Y 작동이상 분해출문(세기정공)",
"클러치 assy 불량으로 전자접촉기교체",
"클러치 밋션 기어오일보출 ATF-3",
"휨 가지센서 단선 교체",
"안전1행정 타발정지위치이상 리미트캠스위치교체및조정,상사점리미트스위치교체",
"QDC 클램프 기동이상 에어빼기",
"피이더 소재 진입이상 캠 스위치 조정",
"카운터 완료시 정지시점 불량 카운타 각도 조정",
"NC FEEDER 코일 이송거리 이상 재 셋팅"
],
"고장부품": [None if x in [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17] else x for x in ["50A 유니온", "SHIELD ROOM 화풍기"] + [None]*16],
"불량유형": [None if x in [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17] else x for x in ["에어리크", "철거부위 마감"] + [None]*16],
"조치내용": [None if x in [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17] else x for x in ["재조임", "판넬벽체문타공"] + [None]*16]
}
# 데이터프레임 생성
df = pd.DataFrame(data)
# 고장부품이 존재하지 않는 데이터만 추출
sub_df = df[df['고장부품'].isnull()]
# 인덱스 번호를 초기화
sub_df.reset_index(drop=True, inplace=True)
2️⃣ GPT-4o에게 프롬프트로 고장내용을 넣고, “Python Dictionary 형식으로” 추출 요청
inputs= sub_df['고장내용'].to_list()
# 고장내용으로부터 고장부품, 불량유형, 조치내용을 추출하는 함수 작성
# 프롬프트에 예시를 작성하여 답변의 안정성을 향상
# 추후 파싱을 위해 파이썬 Dictionary 형태로 답변을 요구
def return_label(text):
prompt = '''주어진 고장내용 텍스트로부터 고장부품, 불량유형, 조치사항을 추출하세요.
이때 파이썬의 Dictionary 형태로 반환하며, 마크다운은 사용하지 마세요.
ex)
고장내용: '출하장 입구 에어 50A 유니온 에어리크 재조임'
출력: {"고장부품": "50A 유니온", "불량유형" : "에어리크", "조치내용" : "재조임"}
고장내용: 'SHIELD ROOM 화풍기 철거부위 마감,판넬벽체문타공 '
출력: {"고장부품": "SHIELD ROOM 화풍기", "불량유형" : "철거부위 마감", "조치내용" : "판넬벽체문타공"}'''
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": prompt},
{"role": "user", "content": "고장내용: " + text + "\n출력: "}
],
temperature=0
)
return response.choices[0].message.content
3️⃣ GPT-4o가 준 문자열 결과를 ast.literal_eval()로 파싱해 Python 딕셔너리 타입으로 변환 후 추출된 값 업데이트
# 16개의 고장 데이터에 대해서 반복 호출
result = []
for input in tqdm(sub_df['고장내용'].to_list()):
result.append(return_label(input))
# GPT-4가 작성한 데이터는 실제로는 문자열 타입이므로, Dicionary 형태로 변환
result = [ast.literal_eval(elem) for elem in result]
new_df = pd.DataFrame(result)
sub_df['고장부품'] = new_df['고장부품']
sub_df['불량유형'] = new_df['불량유형']
sub_df['조치내용'] = new_df['조치내용']
💡 배운 점과 고민 포인트
- 실습을 통해 합성 데이터 생성, 프롬프트 엔지니어링의 방향성을 조금이나마 이해할 수 있었습니다.
- LLM 답변은 문자 생성에 기반한다는 점에서 후처리를 항상 고려해야한 다는 점을 다시 한번 느꼈습니다.
① 오늘자 날짜, 공부 시작, 종료 시각 포함 사진 각 1장


② 1개 클립 수강 인증 사진 1장 / 학습 인증 사진 1장


③ 챌린지 대상 강의 완강률 캡쳐 사진 1장

https://fastcampus.info/4n8ztzq
(~6/20) 50일의 기적 AI 환급반💫 | 패스트캠퍼스
초간단 미션! 하루 20분 공부하고 수강료 전액 환급에 AI 스킬 장착까지!
fastcampus.co.kr
'패스트캠퍼스환급챌린지' 카테고리의 다른 글
| 패스트캠퍼스 환급챌린지 20일차 : 파인튜닝과 RAG로 완성하는 맞춤형 LLM 서비스 개발 강의 후기 (2) | 2025.07.20 |
|---|---|
| 패스트캠퍼스 환급챌린지 19일차 : 파인튜닝과 RAG로 완성하는 맞춤형 LLM 서비스 개발 강의 후기 (4) | 2025.07.19 |
| 패스트캠퍼스 환급챌린지 17일차 : 파인튜닝과 RAG로 완성하는 맞춤형 LLM 서비스 개발 강의 후기 (3) | 2025.07.17 |
| 패스트캠퍼스 환급챌린지 16일차 : 파인튜닝과 RAG로 완성하는 맞춤형 LLM 서비스 개발 강의 후기 (3) | 2025.07.16 |
| 패스트캠퍼스 환급챌린지 15일차 : 파인튜닝과 RAG로 완성하는 맞춤형 LLM 서비스 개발 강의 후기 (2) | 2025.07.15 |