μ€ν¬μ κ°μ ν λ κ°μ₯ νν μ°©κ°μ βμ΄λ² λ²μ μ΄ λ μ’μ 보μΈλ€βλ κ°κ°μ μ±κ³Όλ‘ μ°©κ°νλ κ²μ λλ€. μ€μ μ΄μμμλ μ’μ 보μ΄λ λ΅λ³λ³΄λ€, κ°μ μ λ ₯μμ κ°μ νμ§μ λ΄λμ§κ° λ μ€μν©λλ€. κ·Έλμ Evalμ μ νμ΄ μλλΌ μ΄μ κΈ°λ³ΈκΈ°μ λλ€.
OpenAIμ Testing Agent Skills Systematically with Evalsκ° λμ§λ λ©μμ§λ λͺ
νν©λλ€. μ€ν¬ νμ§μ λλμΌλ‘ κ΄λ¦¬νλ κ² μλλΌ, μ€ν νμ (trace), μ κ² κ·μΉ(check), λΉκ΅ μ μ(score)λ‘ λ«μμΌ ν©λλ€.
μλ΄: μ΄ λ¬Έμλ μμ±ν AIλ₯Ό νμ©ν΄ μ΄μμ μμ±νκ³ , 곡κ°λ 곡μ μλ£λ₯Ό κ΅μ°¨ νμΈν΄ μ€λ¬΄ μ΄μ κ΄μ μΌλ‘ 보κ°νμ΅λλ€.
μ΄ κΈμ κ·Όκ±° μλ£
- OpenAI Blog: Testing Agent Skills Systematically with Evals
- OpenAI Codex Skills λ¬Έμ
- Evaluation Best Practices
ν΅μ¬ μμ½
- νκ°λ βμ’μ λ΅λ³βμ λ½λ κ³Όμ μ΄ μλλΌ βν΄ν(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μΌλ‘ λ¨κΈ΄λ€