이 트랙의 ★ 파트입니다. 평가는 AI 시스템을 제대로 만드는 데 가장 중요하지만, 막상 많은 사람이 건너뛰는 영역이에요 — 그래서 '되는 것 같다'와 '진짜 좋아졌다'의 실력 차이가 가장 크게 벌어지는 곳입니다. 20회차의 '첫 평가'를 제대로 된 평가 체계로 키웁니다.
🧭 왜 평가가 핵심인가
AI는 그럴듯하게 틀립니다. '이렇게 바꿨더니 좋아진 것 같다'를 숫자로 증명하지 못하면, 개선이 운에 맡겨집니다. 평가에는 두 종류 — offline(미리 만든 테스트셋으로 측정)과 online(실사용 로그로 측정).
⚖️ LLM-as-judge — AI로 채점
정답 채점을 사람이 다 하긴 어려우니, '채점 기준'을 주고 LLM에게 채점시킵니다(정확성·근거 일치·형식). 단, judge도 틀리니 사람이 일부 표본을 검수해 신뢰도를 확인합니다.
# judge 프롬프트 (개념)
JUDGE = '''아래 [질문]에 대한 [답변]을 [기대답]과 비교해 0~5점으로 채점하라.
기준: 사실 정확성, 근거 일치, 요구 형식 충족. 점수와 한 줄 이유를 JSON으로.
출력: {"score": 0-5, "reason": "..."}
[질문] {q}
[기대답] {gold}
[답변] {answer}'''
🔁 회귀 테스트셋 — 품질이 깨지지 않게
질문+기대답 모음을 고정해두고, 프롬프트·모델·청킹을 바꿀 때마다 전체를 다시 돌립니다. 점수가 떨어지면 경고 — '코드 테스트'의 AI판입니다. 한 군데 고치다 다른 데가 망가지는 걸 막아줘요.
🔭 트레이싱·관측성 — 어디서 새는지 보기
각 요청의 입력·검색결과·토큰·비용·지연을 기록하면, 품질이나 돈이 어디서 새는지 보입니다. 도구는 LangSmith·Phoenix·Braintrust 중 하나만 골라 쓰면 됩니다(개념만 알고 1택).
🔧 만들 것 — eval 하니스
- 골든셋 확장(20회차 10개 → 30~50개 대표 질문)
- 파이프라인을 골든셋에 돌려 judge로 채점 → 점수 집계
- 모델·프롬프트별 비교 리포트를 자동 생성(표 한 장)
✅ 완료 기준
- '프롬프트를 이렇게 바꿨더니 정답률 X%→Y%'를 숫자로 답할 수 있다.
- 회귀셋을 돌려 품질 하락을 자동으로 감지한다.
- 요청별 토큰·비용·지연이 트레이싱으로 기록된다.
📌 평가 파트 핵심
- 평가 = 품질을 숫자로. offline(테스트셋) + online(로그).
- LLM-as-judge로 채점하되 사람이 표본 검수.
- 회귀셋으로 '바꿔도 안 깨지게', 트레이싱으로 '어디서 새는지'.
여기까지가 '품질을 숫자로 보는' 평가 파트였습니다. 이제 그 평가까지 거친 기능을 '서비스'로 만들고, '남이 가져다 쓰는 도구'로 포장합니다 — 트랙의 마지막 단계입니다. 앞서 본 게이트웨이, 셀프호스팅 개념을 이제 코드로 잇습니다.
🚀 FastAPI로 서빙 — 함수를 API로
지금까지 만든 챗봇·에이전트는 '내 터미널에서 도는 함수'였습니다. FastAPI로 감싸면 'URL로 호출하는 API'가 돼, 웹·앱·남의 서비스가 가져다 쓸 수 있어요.
# serve.py — 챗봇을 API로 노출
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Ask(BaseModel):
question: str
@app.post('/ask')
def ask_endpoint(body: Ask):
answer, sources = rag_answer(body.question) # 20회차 RAG 챗봇 재사용
return {'answer': answer, 'sources': sources}
# 실행: uvicorn serve:app --reload
🔁 추상화·폴백·캐싱 (LLMOps)
- 프로바이더 추상화 — 19회차 ask() 래퍼를 그대로 확장.
- 폴백 — 한 회사 API가 죽으면 자동으로 다른 회사로(무중단).
- 캐싱 — 같은 요청은 저장된 답 재사용 → 비용·지연 절감.
- 관측성 — 이번 회차 평가 파트의 트레이싱으로 비용·지연·실패를 모니터링.
🖥️ 오픈 모델 로컬 서빙 — vLLM (선택)
비용·프라이버시를 위해 오픈 모델을 직접 서빙할 수 있습니다. vLLM은 오픈 모델을 'OpenAI 호환 API'로 띄워줘요 — 17회차 로컬 GPU, 14회차 Ollama의 '본격 API 서버'판입니다. 한 번 띄워 ask()의 프로바이더로 꽂아보면 충분.
🧱 플랫폼화 — '내 도구'에서 '남의 도구'로
7번째 역량 — 남이 재사용하는 컴포넌트를 설계하는 일입니다. 기능을 깔끔한 함수/SDK로 정리하고, README로 '설치→실행 5분'을 만들고, '비정형 문제를 어떻게 구조화했나'를 회고 글 1편으로 남깁니다(내 결과물 기록용).
- 20~22 기능(RAG·에이전트·평가)을 하나의 패키지로 통합 + 환경변수로 3프로바이더 전환
- README 작성 — 무엇을·왜·어떻게·결과 숫자(설치→실행 5분)
- 회고 글 1편 — '내 자료로 답하는 비서를 어떻게 구조화했나'
✅ 완료 기준
- 환경변수 하나로 3프로바이더를 무중단 전환하고, 각 비용·지연을 로그로 비교한다.
- 다른 사람이 README만 보고 5분 안에 설치·실행한다.
- 18~22 결과가 한 레포에 '하나의 일관된 프로젝트'로 묶인다.
🌉 다음 한 걸음 — '쓰는' 엔지니어에서 '만드는' 엔지니어로
여기까지가 '기성 모델을 코드로 제대로 쓰는' 전문가의 완성입니다 — RAG·에이전트·평가·서빙·플랫폼화. 솔직히 현업의 대부분은 여기까지로 충분해요. 하지만 한 걸음 더, 그 '남의 모델'을 우리말·우리 도메인에 맞춰 '직접 만드는' 쪽이 있습니다. 마지막 23회차는 그 지도 — 비싼 상용 모델을 우리만의 모델로 직접 대체하는 일이 실제로 어떻게 굴러가는지입니다.