μŠ€ν‚¬μ„ κ°œμ„ ν•  λ•Œ κ°€μž₯ ν”ν•œ 착각은 β€œμ΄λ²ˆ 버전이 더 μ’‹μ•„ λ³΄μΈλ‹€β€λŠ” 감각을 μ„±κ³Όλ‘œ μ°©κ°ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ‹€μ œ μš΄μ˜μ—μ„œλŠ” μ’‹μ•„ λ³΄μ΄λŠ” 닡변보닀, 같은 μž…λ ₯μ—μ„œ 같은 ν’ˆμ§ˆμ„ λ‚΄λŠ”μ§€κ°€ 더 μ€‘μš”ν•©λ‹ˆλ‹€. κ·Έλž˜μ„œ Eval은 선택이 μ•„λ‹ˆλΌ 운영 κΈ°λ³ΈκΈ°μž…λ‹ˆλ‹€.

OpenAI의 Testing Agent Skills Systematically with Evalsκ°€ λ˜μ§€λŠ” λ©”μ‹œμ§€λ„ λͺ…ν™•ν•©λ‹ˆλ‹€. μŠ€ν‚¬ ν’ˆμ§ˆμ€ λŠλ‚ŒμœΌλ‘œ κ΄€λ¦¬ν•˜λŠ” 게 μ•„λ‹ˆλΌ, μ‹€ν–‰ 흔적(trace), 점검 κ·œμΉ™(check), 비ꡐ 점수(score)둜 λ‹«μ•„μ•Ό ν•©λ‹ˆλ‹€.

μ•ˆλ‚΄: 이 λ¬Έμ„œλŠ” μƒμ„±ν˜• AIλ₯Ό ν™œμš©ν•΄ μ΄ˆμ•ˆμ„ μž‘μ„±ν–ˆκ³ , 곡개된 곡식 자료λ₯Ό ꡐ차 확인해 싀무 운영 κ΄€μ μœΌλ‘œ λ³΄κ°•ν–ˆμŠ΅λ‹ˆλ‹€.

이 κΈ€μ˜ κ·Όκ±° 자료

핡심 μš”μ•½

  • ν‰κ°€λŠ” β€œμ’‹μ€ 닡변”을 λ½‘λŠ” 과정이 μ•„λ‹ˆλΌ β€œν‡΄ν–‰(regression)을 빨리 μž‘λŠ” μž₯μΉ˜β€μž…λ‹ˆλ‹€.
  • μž‘μ€ ν”„λ‘¬ν”„νŠΈμ…‹(10~20개)만 μžˆμ–΄λ„ νšŒκ·€λ₯Ό 상당 λΆ€λΆ„ 막을 수 μžˆμŠ΅λ‹ˆλ‹€.
  • deterministic check(ν™•μ • κ·œμΉ™)와 rubric check(μ •μ„± 평가)λ₯Ό ν•¨κ»˜ 써야 μ•ˆμ •μ μž…λ‹ˆλ‹€.
flowchart LR
A[ν”„λ‘¬ν”„νŠΈμ…‹] --> B[μ—μ΄μ „νŠΈ μ‹€ν–‰]
B --> C[trace/artifacts μ €μž₯]
C --> D[deterministic check]
D --> E[rubric check]
E --> F[점수 비ꡐ]
F --> G[κ°œμ„ /퇴행 νŒμ •]

🧠 칠판 μΉ˜νŠΈμ‹œνŠΈ

  • μŠ€ν‚¬ κ°œμ„ μ€ 감이 μ•„λ‹ˆλΌ 점수둜 λ‹«λŠ”λ‹€
  • λ¨Όμ € deterministic, κ·Έλ‹€μŒ rubric
  • μ‹€νŒ¨ μΌ€μ΄μŠ€λŠ” CSV에 μ¦‰μ‹œ μΆ”κ°€ν•œλ‹€
  • 둜그 μ—†λŠ” ν‰κ°€λŠ” μž¬ν˜„μ΄ μ•ˆ λœλ‹€
  • 쒋은 평가셋은 μž‘μ•„λ„ κ°•ν•˜λ‹€

평가가 없을 λ•Œ μ‹€μ œλ‘œ μƒκΈ°λŠ” 문제

μš΄μ˜νŒ€μ΄ κ²ͺλŠ” μ‹€νŒ¨λŠ” 생각보닀 λΉ„μŠ·ν•©λ‹ˆλ‹€.

  • 같은 μŠ€ν‚¬μΈλ° μ–΄λ–€ 날은 잘 되고 μ–΄λ–€ 날은 λ°œλ™μ΄ μ•ˆ 됨
  • 좜λ ₯은 λ‚˜μ™”λŠ”λ° ν•„μˆ˜ 단계가 λˆ„λ½λ¨
  • κΈ°λŠ₯은 μΆ”κ°€λλŠ”λ° 이전 κΈ°λŠ₯이 쑰용히 깨짐

이 λ¬Έμ œλŠ” λŒ€λΆ€λΆ„ β€œμΈ‘μ •μ΄ μ—†μ–΄μ„œβ€ μƒκΉλ‹ˆλ‹€. κ·Έλž˜μ„œ Eval의 첫 λͺ©μ μ€ μ™„λ²½ν•œ μ μˆ˜κ°€ μ•„λ‹ˆλΌ, 이상 μ§•ν›„λ₯Ό λΉ λ₯΄κ²Œ κ°μ§€ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

성곡 기쀀을 λ¨Όμ € λ‚˜λˆ„λ©΄ 평가가 μ‰¬μ›Œμ§„λ‹€

μ›λ¬Έμ—μ„œ μ œμ•ˆν•˜λŠ” λΆ„λ₯˜κ°€ μ‹€λ¬΄μ—μ„œλ„ 잘 λ¨Ήνž™λ‹ˆλ‹€.

  • Outcome: 결과물이 μ‹€μ œλ‘œ μ™„μ„±λλŠ”κ°€
  • Process: μ˜λ„ν•œ 단계와 도ꡬλ₯Ό λ”°λžλŠ”κ°€
  • Style: μš”μ²­ν•œ 포맷/μ»¨λ²€μ…˜μ„ μ§€μΌ°λŠ”κ°€
  • Efficiency: λΆˆν•„μš”ν•œ μ‹€ν–‰/토큰 λ‚­λΉ„ 없이 λλ‚¬λŠ”κ°€

이 λ„€ μΆ•μœΌλ‘œ 보면 β€œμ™œ μ‹€νŒ¨ν–ˆλŠ”μ§€β€κ°€ μ„€λͺ… κ°€λŠ₯ν•΄μ§‘λ‹ˆλ‹€. νŒ€ νšŒκ³ λ„ 훨씬 λΉ¨λΌμ§‘λ‹ˆλ‹€.

μž‘μ€ ν”„λ‘¬ν”„νŠΈμ…‹μœΌλ‘œ μ‹œμž‘ν•˜λŠ” 이유

큰 벀치마크λ₯Ό λ§Œλ“€λ‹€κ°€ μ‹œμž‘λ„ λͺ» ν•˜λŠ” κ²½μš°κ°€ λ§ŽμŠ΅λ‹ˆλ‹€. μ‹€λ¬΄μ—μ„œλŠ” 였히렀 μž‘μ€ 셋이 더 κ°•ν•©λ‹ˆλ‹€.

μΆ”μ²œ μ‹œμž‘μ :

  • 총 10~20개
  • 직접 호좜 μΌ€μ΄μŠ€
  • μ•”μ‹œ 호좜 μΌ€μ΄μŠ€
  • λ…Έμ΄μ¦ˆ 포함 ν˜„μ‹€ μΌ€μ΄μŠ€
  • negative control(λ°œλ™λ˜λ©΄ μ•ˆ λ˜λŠ” μΌ€μ΄μŠ€)
id,should_trigger,prompt
test-01,true,"Create a demo app using the setup skill"
test-02,true,"Set up a minimal React demo with Tailwind"
test-03,false,"Only add styling to existing app"

μ΄λ ‡κ²Œ μ‹œμž‘ν•˜λ©΄ μ‹€νŒ¨λ₯Ό β€œν–‰(row) λ‹¨μœ„β€λ‘œ μŒ“μ„ 수 있고, κ·Έ μžμ²΄κ°€ νšŒκ·€ λ°©μ§€ μžμ‚°μ΄ λ©λ‹ˆλ‹€.

deterministic 체크둜 κΈ°λ°˜μ„ λ¨Όμ € λ§Œλ“ λ‹€

μ΄ˆκΈ°μ—λŠ” μ‚¬λžŒμ΄ 읽고 νŒλ‹¨ν•˜κΈ°λ³΄λ‹€, κ·œμΉ™μœΌλ‘œ ν™•μ • κ°€λŠ₯ν•œ ν•­λͺ©λΆ€ν„° μž‘λŠ” 게 μ’‹μŠ΅λ‹ˆλ‹€.

μ˜ˆμ‹œ:

  • npm install μ‹€ν–‰ μ΄λ²€νŠΈκ°€ μžˆμ—ˆλŠ”κ°€
  • package.json이 μƒμ„±λλŠ”κ°€
  • ν•„μˆ˜ 파일이 μ‘΄μž¬ν•˜λŠ”κ°€

이 λ‹¨κ³„μ—μ„œ μ€‘μš”ν•œ 건 JSONL traceμž…λ‹ˆλ‹€. μ‹€ν–‰ 흔적이 남아야 μ‹€νŒ¨ 원인을 μž¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ •μ„± ν‰κ°€λŠ” output schema둜 κ³ μ •ν•œλ‹€

deterministicλ§ŒμœΌλ‘œλŠ” β€œκ΅¬μ‘°/μ„€λͺ… ν’ˆμ§ˆβ€μ„ λ‹€ 작기 μ–΄λ ΅μŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ 2차둜 rubric 평가λ₯Ό λΆ™μž…λ‹ˆλ‹€.

핡심은 자유 λ¬Έμž₯이 μ•„λ‹ˆλΌ μŠ€ν‚€λ§ˆ κ³ μ •μž…λ‹ˆλ‹€.

{
  "overall_pass": true,
  "score": 86,
  "checks": [
    {"id": "tailwind_setup", "pass": true, "notes": "vite plugin configured"}
  ]
}

μŠ€ν‚€λ§ˆλ₯Ό 고정해두면 버전 κ°„ 비ꡐ가 μ‰¬μ›Œμ§€κ³ , CI λ¦¬ν¬νŠΈλ‘œλ„ λ°”λ‘œ μ—°κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ―Έλ‹ˆ 사둀 3κ°€μ§€

사둀 A) μŠ€ν‚¬ λ°œλ™λ₯ μ΄ λ“€μ­‰λ‚ μ­‰ν•˜λ˜ νŒ€

name/description을 λͺ…ν™•νžˆ λ°”κΎΈκ³  ν”„λ‘¬ν”„νŠΈμ…‹μ— negative μΌ€μ΄μŠ€λ₯Ό μΆ”κ°€ν•œ λ’€, κ³Όλ°œλ™/λ―Έλ°œλ™ 문제λ₯Ό λΉ λ₯΄κ²Œ μ€„μ˜€μŠ΅λ‹ˆλ‹€.

사둀 B) κ²°κ³ΌλŠ” κ·ΈλŸ΄λ“―ν•œλ° ν•„μˆ˜ 단계 λˆ„λ½μ΄ 많던 νŒ€

deterministic 체크(ν•„μˆ˜ λͺ…λ Ή/ν•„μˆ˜ 파일) 2개만 λΆ™μ˜€λŠ”λ°λ„ λˆ„λ½λ₯ μ΄ 크게 μ€„μ—ˆμŠ΅λ‹ˆλ‹€.

사둀 C) λ¦¬λ·°λŠ” κΈΈμ§€λ§Œ κ°œμ„ μ΄ 느리던 νŒ€

rubricλ₯Ό schema둜 κ³ μ •ν•œ λ’€, β€œμ’‹λ‹€/λ‚˜μ˜λ‹€β€ λ…ΌμŸμ΄ 쀄고 점수 기반 μš°μ„ μˆœμœ„κ°€ μƒκ²ΌμŠ΅λ‹ˆλ‹€.

30λΆ„ λ„μž… 루틴

  • 10λΆ„: must-pass 3개 μ •μ˜ (κ²°κ³Ό/κ³Όμ •/효율 μ€‘μ—μ„œ)
  • 10λΆ„: ν”„λ‘¬ν”„νŠΈμ…‹ 10개 μž‘μ„± + negative 1개 포함
  • 10λΆ„: deterministic 2개 체크 κ΅¬ν˜„

μ—¬κΈ°κΉŒμ§€ ν•˜λ©΄ λ‹€μŒ μ£ΌλΆ€ν„°λŠ” 점수 비ꡐ 기반으둜 κ°œμ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

적용 체크리슀트

  • μŠ€ν‚¬λ³„ must-pass 3개λ₯Ό λ¬Έμ„œν™”ν–ˆλ‹€
  • ν”„λ‘¬ν”„νŠΈμ…‹ CSVλ₯Ό λ§Œλ“€κ³  negative μΌ€μ΄μŠ€λ₯Ό ν¬ν•¨ν–ˆλ‹€
  • trace(JSONL) μ €μž₯ 경둜λ₯Ό κ³ μ •ν–ˆλ‹€
  • deterministic 체크 2개 이상을 μžλ™ν™”ν–ˆλ‹€
  • rubric κ²°κ³Όλ₯Ό schema κ³ μ • JSON으둜 남긴닀

λ‹€μŒ 읽기