Skip to content
Park Hyoin PARKHYO.IN
Go back

FEMS 프로젝트 #3 — Streamlit 비교 대시보드 + 3-백엔드 질문 평가 (Claude 9 / exaone 7 / gpt 7)

Edit page

FEMS #1 (셋업) / #2 (코퍼스 + 모델 비교) 에 이은 3편. 오늘은 Streamlit 대시보드 + 3-백엔드 질문 평가 까지.

Table of contents

Open Table of contents

세션 노트 — Claude Code 가 마음대로 streamlit 설치

오늘은 Streamlit 대시보드를 짤 거였는데, Claude Code 새 세션에서 작업을 시작했더니 자기 마음대로 streamlit 을 설치하고 코드 작성을 시작했다. 확인해보니 이 프로젝트에 CLAUDE.md 가 없다는 걸 발견했다.

표준 지침을 만들어야겠다는 생각이 들었다. 일단 필요한 서브에이전트들부터 만들고, 그 다음 본 작업으로 넘어간다. (이건 별도 글로 정리)

1. Streamlit 비교 대시보드

Streamlit 대시보드 — 데이터 사용 패턴 그래프 (production_line / lighting / air_compressor) + 질문 → 3백엔드 비교 영역

좌측 사이드바 — Ollama (로컬) / Claude (API) / GPT (API) 체크박스. 우측 — 데이터 트랙 (합성 / 실) 선택 + 시간 범위 + 그래프 표시 + 질문 입력.

캡처에 보이는 건 합성 데이터 다. 이상치를 의도적으로 주입했기 때문에 그래프에서 바로 식별할 수 있다.

합성 데이터를 쓰는 이유는 #2 의 의문 그대로 — 실 데이터 기반 질문이 필요할 땐 별도로 만들어야 한다. 오늘은 두 종류의 질문을 다 던져본다.

Q1 — 합성 데이터: “5월 에어 컴프레셔 문제가 있었나?”

5월 한 달간 air_compressor 에 이상치가 있는 걸 그래프에서 확인하고, 동일한 질문을 던졌다.

Q1 — 3백엔드 비교: exaone(23.3s, $0)/claude(12.3s, $0.0352)/gpt(1.5s, $0.0056). exaone·gpt 는 '자료에 없음', claude 응답

백엔드모델지연비용응답
Ollamaexaone3.5:7.8b23.3s로컬 $0”자료에 없음”
Claudeclaude-opus-4-812.3s$0.0352상세 추론 응답
GPTgpt-4o1.5s$0.0056”자료에 없음”

Claude 의 추론 — raw 데이터 없이 요약치만으로

Claude 응답 — 결론: '주말 시간대에 이상 징후 관찰' + 근거 분석 (평일주간 92/171kW, 평일야간 29/46kW, 주말 56/150kW)

Claude 는 정확한 발생 시각·날짜별 로그가 데이터로 주어지지 않았는데도 합성 데이터의 평균치 / 최대치를 비교해서 “주말 시간대에 이상 징후가 있을 것” 으로 추측했다. 캡처에서 잘렸지만 그에 따른 권고 사항 도 같이 제시했다.

왜 이런 차이가 생겼나 — 설계 의도

원본 csv 는 시각화에만 쓰고, LLM 들에게는 csv 요약 정보만 보여준다. anomaly 신호는 보존하되, 직접 탐지하게는 하지 않는 의도된 설계다.

그 결과:

  • exaone / gpt → “자료에 없음” 으로 소극적 대답 (안전한 선택, 환각 회피)
  • Claude → 제한된 정보 내에서 성공적 추론 + “정확한 날짜·시각은 알 수 없다” 는 한계까지 정확히 고지

이 차이가 가장 인상적인 부분이다. 자료에 직접적인 답이 없을 때 “추론으로 채워볼 것인가, 보수적으로 보류할 것인가” 의 모델 성격 차이가 그대로 드러난다.

Q2 — 실 데이터: “1년치 제철소 패턴, 관리자 관점 절약 방안”

두 번째는 UCI Steel 데이터셋 기반 질문이다. 토큰 제한이 있어서 “핵심적인 내용을 추려달라” 고 명시했다.

Q2 — 3백엔드 비교: exaone(46.2s, 480tok)/claude(17.2s, $0.0423, 1024tok)/gpt(4.8s, $0.0100, 475tok). 검색 출처: fems_market_report_sample.pdf, fems_mv_guideline.pdf

백엔드지연비용출력 토큰
exaone3.5:7.8b46.2s$0480
claude-opus-4-817.2s$0.04231024 (상한)
gpt-4o4.8s$0.0100475

exaone 답변

exaone 답변 — 권장 조치 항목들, 데이터 기반 답변이지만 인덱스 깨짐 (4번 항목이 두 개)

데이터 기반 답변 + 여러 문서 참조는 OK 인데, 중간에 인덱스가 깨지면서 “4번 항목이 두 개” 가 되고 문단 분리가 어색해졌다. 캡처 위쪽의 “에너지 절약 방안 제시” 부분은 그냥 “노력해라” 수준의 일반론.

Claude 답변

Claude 답변 — 관리자 관점의 절약 방향 (고부하 시간대 분산, 역률 개선, 주말·비가동 기저부하 점검) + 절감 성과 산정·검증 절차 + 모니터링·시각화 활용

Claude 는 다음을 전부 다뤘다:

  • 데이터에서 확인된 패턴
  • 관리자 관점 에서의 절약 방향
  • 절감 성과를 어떻게 측정할지 — 산정·검증 절차
  • 모니터링·시각화 방법

답변 질은 아주 좋았다. 출처도 제대로 들고 왔고 (fems_market_report_sample.pdf, fems_mv_guideline.pdf), 각 섹터 구분이 명확했다.

다만 — 출력 토큰 상한 (1024) 에 걸려서 마지막 유의사항 부분이 잘렸다:

Claude 답변 마지막 — '4. 모니터링·시각화 활용' 까지는 완성, 그 뒤 '유의사항' 첫 줄에서 잘림

설명할 게 많아 보였다. max_tokens 를 올렸다면 완성됐을 것이다.

GPT 답변 — 깔끔하지만 환각 발견

GPT 답변 — 1.부하 관리 최적화, 2.역률 개선(예: 커패시터 설치), 3.주말과 평일 사용량 차이 조정, 4.모니터링, 5.비효율 설비 개선. 토큰 상한 안 넘김

GPT 답변은 군더더기 없이 딱 관리자 입장에서 핵심 조치 사항만 알려줬다. 토큰 제한도 안 넘기고 내용도 좋았다.

그런데 함정이 있었다.

“역률 개선 장치의 예시로 커패시터를 들었는데 이건 내가 준 데이터가 아니다.”

일반적 지식으로 지어낸 정보 (환각) 였다. 시스템 프롬프트에 “지어내지 말 것” 이 있었는데 무시하고 지어냈다.

이게 보수적 vs 적극적 응답의 다른 측면이다. Q1 에서는 gpt 가 “자료 없음” 으로 보수적이더니, Q2 에서는 갑자기 자료에 없는 일반 지식을 끌어와 채워넣었다. 동일 모델이 질문 형식에 따라 다른 성향을 보인다.

채점 — 5축 평가

5축 채점 — 정답성/환각/출처/언어/유용성 + 총점. exaone 7/10, Claude 9/10, gpt-4o 7/10

기준: ① 모델이 받은 steel 브리프와 사실 일치 ② 환각 ③ 출처 정확 귀속 ④ 한국어 일관성 ⑤ 관리자용 핵심 추리기.

exaoneClaudegpt-4o
정답성1 — 수치 정확하나 핵심 못 짚음2 — 부하편중·역률저조·주말기저부하 정확1 — 표면적, M&V 미활용
환각2 — 지어냄 없음2 — 전부 근거 확인됨1 — “커패시터” 환각
출처1 — 막연 인용2 — M&V·시각화 정확 귀속1 — mv_guideline 놓침
언어222
유용성1 — 인덱스 깨짐1 — 1024 토큰 절단으로 미완2 — 간결·구조 명확
총점7/109/107/10

Claude 가 가장 성능이 좋다. 토큰 상한을 올렸다면 만점이었을 것이다.

가성비 관점

exaone, gpt 가 Claude 보다 저렴한 비용 으로 사용 가능하다 → 이 모델들을 어떻게 튜닝하면 Claude 수준에 근접시킬 수 있을지 가 다음 과제다. 해결한다면 경제적으로 매우 유리하다.

구체적으로:

  • exaone — 인덱스 깨짐은 출력 형식 강제 (JSON / numbered list) 로 잡힐 가능성이 있다
  • gpt — “지어내지 말 것” 을 시스템 프롬프트가 아니라 few-shot 예제 로 강제하면 환각이 줄지도 모른다

회고

오늘 학습 핵심 3가지:

  1. 추론 vs 보수의 분기 — Q1 에서 exaone/gpt 가 “자료 없음” 으로 보수적일 때 Claude 는 요약치만으로 추론 + 한계 고지. 모델 성격 차이가 그대로 드러난다.
  2. 동일 모델도 질문 형식에 따라 성향이 뒤집힌다 — gpt 는 Q1 (있는 사실 추론) 에선 보수적, Q2 (일반 추천) 에선 갑자기 환각. 단일 케이스 평가로 모델을 판단하면 위험하다.
  3. 출력 토큰 상한이 평가에 큰 영향 — Claude 9/10 의 1점 감점이 토큰 절단 때문이다. 운영 환경에선 max_tokens + “핵심만” 프롬프트 + 응답 형식 제약 조합이 필요하다.

더 공부해볼 것

1. 동일 질문 다회 반복으로 분산 확인

  • 오늘 평가는 각 질문에 대해 1회 응답
  • 동일 질문 × 5~10회 반복해서 응답 분산 + 환각 빈도 측정
  • “Claude 가 항상 9/10 인가, 평균이 9/10 인가” 는 다른 얘기
  • 비결정성 (sampling temperature) 의 영향 시각화

2. 출력 토큰 절단 방지 패턴

  • max_tokens 동적 조절 — 질문 복잡도에 비례해서
  • 응답 형식 제약 (JSON / 짧은 bullet) 으로 길이 강제
  • 2-pass — 1차 짧은 요약 → 2차 상세 보강
  • 토큰 절단 감지 + 자동 continuation 패턴

3. 환각 감지 자동화

  • gpt 의 “커패시터” 같은 자료에 없는 키워드를 자동으로 잡아내는 평가기
  • 응답 텍스트에서 명사구 추출 → 검색 청크에 존재 여부 검사
  • LLM-as-judge 로 fact-checking
  • RAGAS 의 Faithfulness 메트릭

4. 저비용 모델 튜닝 전략

  • 시스템 프롬프트 정제 — Claude 가 잘하는 패턴을 명시적으로 가르치기
  • Few-shot 예제 — exaone/gpt 에 “이런 형식으로 답해” 보여주기
  • 출력 schema 강제 — JSON Mode / Structured Output
  • 동일 코퍼스 + 평가셋으로 튜닝 전후 점수 비교

5. 실 데이터 RAG 와 합성 데이터 RAG 의 분리

  • 오늘 Q1 (합성) 과 Q2 (실 데이터) 가 같은 벡터 DB
  • 분리하면 검색 정확도 / 응답 품질이 어떻게 달라지는지
  • 두 트랙을 동시에 운영 할 때 검색 라우팅 정책
  • 실 데이터 기반 질문이 합성 데이터 청크를 가져오는 누수 방지

6. 평가셋 자동 구축

  • 오늘은 질문을 손으로 작성
  • 코퍼스 청크 → LLM 으로 질문 자동 생성 → 사람이 검수
  • 평가셋이 커지면 신뢰할 수 있는 점수가 나온다
  • RAG 데이터 준비 글 의 평가셋 구축 항목과 직결

Edit page