์ด๋ฒˆ 3ํŽธ์€ โ€œ์ข‹์€ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์“ด๋‹คโ€๋ฅผ ๋„˜์–ด์„œ, **์—์ด์ „ํŠธ๊ฐ€ ๋„๊ตฌ๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ๊ณ ๋ฅด๊ฒŒ ๋งŒ๋“œ๋Š” ํ”„๋กฌํ”„ํŠธ ๊ณ„์•ฝ(prompt contract)**์„ ๋งŒ๋“ ๋‹ค. ํ•ต์‹ฌ์€ ๊ฐ๊ฐ์ด ์•„๋‹ˆ๋ผ ๊ตฌ์กฐ๋‹ค: ์—ญํ• (Role) โ†’ ๋„๊ตฌ ์„ ํƒ ๊ทœ์น™(Tool Policy) โ†’ ์ถœ๋ ฅ ๊ณ„์•ฝ(Output Contract).

flowchart TD
  A[์‚ฌ์šฉ์ž ์š”์ฒญ] --> B[์—ญํ•  ์ •์˜ Role]
  B --> C[๋„๊ตฌ ์„ ํƒ ๊ทœ์น™ Tool Policy]
  C --> D[์ถœ๋ ฅ ๊ณ„์•ฝ Output Contract]
  D --> E[์‹คํ–‰ Think-Act-Observe]
  E --> F[์„ฑ๊ณต/์‹คํŒจ ํŒ์ •]
  F -->|์‹คํŒจ| C
  F -->|์„ฑ๊ณต| G[์ตœ์ข… ์‘๋‹ต]

0) 30์ดˆ ์š”์•ฝ

  • ํ”„๋กฌํ”„ํŠธ๊ฐ€ ์• ๋งคํ•˜๋ฉด, ๋„๊ตฌ ์„ ํƒ๋„ ์• ๋งคํ•ด์ง„๋‹ค.
  • ์—์ด์ „ํŠธ ํ”„๋กฌํ”„ํŠธ๋Š” ๋ฌธ์žฅ๋ ฅ์ด ์•„๋‹ˆ๋ผ ์˜์‚ฌ๊ฒฐ์ • ๊ทœ์น™์ด ์ค‘์š”ํ•˜๋‹ค.
  • ์˜ค๋Š˜ ์‹ค์Šต ๋ชฉํ‘œ: ๊ฐ™์€ ์ž…๋ ฅ์—์„œ baseline๋ณด๋‹ค contract ์ •ํ™•๋„๊ฐ€ ๋†’์•„์ง€๋Š” ๊ฒƒ์„ ํ™•์ธํ•œ๋‹ค.

๊ณต์‹ ๊ทผ๊ฑฐ ๋ฐ”๋กœ๋ณด๊ธฐ

1) ๊ณต์‹ ์ž๋ฃŒ ๊ธฐ์ค€ ํ•ต์‹ฌ ํฌ์ธํŠธ

Hugging Face Agents Course์™€ smolagents ๋ฌธ์„œ๋ฅผ ๋ณด๋ฉด ๊ณตํ†ต ๋ฉ”์‹œ์ง€๊ฐ€ ๋ถ„๋ช…ํ•˜๋‹ค.

  1. ์—์ด์ „ํŠธ๋Š” Think โ†’ Act โ†’ Observe ๋ฃจํ”„๋กœ ๋™์ž‘ํ•œ๋‹ค.
  2. ๋„๊ตฌ ์‚ฌ์šฉ์€ โ€œ๊ฐ€๋Šฅํ•˜๋ฉด ์จ๋ณด๊ธฐโ€๊ฐ€ ์•„๋‹ˆ๋ผ ์„ ํƒ ๊ธฐ์ค€์ด ๋ช…ํ™•ํ•ด์•ผ ํ•œ๋‹ค.
  3. CodeAgent/ToolCallingAgent ์„ ํƒ์€ ์„ฑ๋Šฅ๋ณด๋‹ค **์—…๋ฌด ์„ฑ๊ฒฉ(์œ ์—ฐ์„ฑ vs ์•ˆ์ •์„ฑ)**์œผ๋กœ ๊ฒฐ์ •ํ•œ๋‹ค.

์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด, ๋ชจ๋ธ์ด ๋˜‘๋˜‘ํ•œ ๊ฒƒ๊ณผ ๋ณ„๊ฐœ๋กœ ์šด์˜ ๊ทœ์น™์ด ์—†์œผ๋ฉด ์‹ค๋ฌด์—์„œ ํ”๋“ค๋ฆฐ๋‹ค.

2) ํ”„๋กฌํ”„ํŠธ ๊ณ„์•ฝ(์ดˆ๋ณด์ž์šฉ) ํ…œํ”Œ๋ฆฟ

์•„๋ž˜ 3๋ธ”๋ก๋งŒ ์ง€์ผœ๋„ ํ’ˆ์งˆ์ด ๊ธ‰๊ฒฉํžˆ ์•ˆ์ •๋œ๋‹ค.

2-1) Role (์—ญํ• )

  • ๋„ˆ๋Š” โ€œ์šด์˜ ์–ด์‹œ์Šคํ„ดํŠธโ€๋‹ค.
  • ๋ชฉํ‘œ: ์‚ฌ์šฉ์ž ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋„๊ตฌ๋ฅผ 1๊ฐœ ์„ ํƒํ•ด ์‹คํ–‰ํ•œ๋‹ค.

2-2) Tool Policy (๋„๊ตฌ ์„ ํƒ ๊ทœ์น™)

  • ๊ณ„์‚ฐ/์ˆ˜์น˜/์‚ฐ์ˆ  ์š”์ฒญ์ด๋ฉด calculator ์‚ฌ์šฉ
  • ์ตœ์‹  ์ •๋ณด/๊ฒ€์ƒ‰/์š”์•ฝ ์š”์ฒญ์ด๋ฉด search_docs ์‚ฌ์šฉ
  • ๋„๊ตฌ ์„ ํƒ ๊ทผ๊ฑฐ๋ฅผ 1์ค„๋กœ ๋‚จ๊น€

2-3) Output Contract (์ถœ๋ ฅ ๊ณ„์•ฝ)

  • JSON ํ˜•์‹์œผ๋กœ๋งŒ ์‘๋‹ต
  • ํ•„์ˆ˜ ํ•„๋“œ: chosen_tool, reason, result, status
  • ์‹คํŒจ ์‹œ status="error"์™€ ์›์ธ ํฌํ•จ

3) ์‹ค์Šต: 15๋ถ„ ์žฌํ˜„ (๋„๊ตฌ/์ž…๋ ฅ/์‹คํ–‰๋ช…๋ น/์„ฑ๊ณตํŒ์ •)

Step 1) ํ™˜๊ฒฝ ์ค€๋น„

  • ๋„๊ตฌ: Python 3.10+, ํ„ฐ๋ฏธ๋„
  • ์ž…๋ ฅ: day3_prompt_patterns.py, sample_tasks_day3.json
  • ์‹คํ–‰ ๋ช…๋ น:
cd /home/tw2/Documents/n8n/data/shared/syn/8.quartz/Agent/๐Ÿค—\ HF-Agents-Course/downloads
python3 -m venv .venv
source .venv/bin/activate   # Windows: .venv\Scripts\activate
pip install -r requirements.txt
  • ์„ฑ๊ณต ํŒ์ •: ์˜ค๋ฅ˜ ์—†์ด ์„ค์น˜ ์™„๋ฃŒ, ๊ฐ€์ƒํ™˜๊ฒฝ ํ”„๋กฌํ”„ํŠธ((.venv)) ํ‘œ์‹œ

Step 2) Baseline vs Contract ๋น„๊ต ์‹คํ–‰

  • ๋„๊ตฌ: day3_prompt_patterns.py
  • ์ž…๋ ฅ: sample_tasks_day3.json (์š”์ฒญ 4๊ฐœ)
  • ์‹คํ–‰ ๋ช…๋ น:
python day3_prompt_patterns.py --mode compare --input sample_tasks_day3.json
  • ์„ฑ๊ณต ํŒ์ •:
    • ์ถœ๋ ฅ JSON์—์„œ improved: true
    • contract_accuracy > baseline_accuracy (์˜ˆ: 1.0 > 0.5)

Step 3) ๋‹จ์ผ ์š”์ฒญ ํ…Œ์ŠคํŠธ

  • ๋„๊ตฌ: day3_prompt_patterns.py
  • ์ž…๋ ฅ: ์ž„์˜ ์š”์ฒญ 1๊ฐœ
  • ์‹คํ–‰ ๋ช…๋ น:
python day3_prompt_patterns.py --mode single --request "8 * 9 ๊ณ„์‚ฐํ•ด์ค˜"
  • ์„ฑ๊ณต ํŒ์ •:
    • baseline_tool๊ณผ contract_tool์ด ๋‹ค๋ฅด๊ฒŒ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์Œ
    • contract_tool์ด calculator๋ฉด ์ •์ƒ

Step 4) ๋‚ด ์—…๋ฌด ๋ฐ์ดํ„ฐ๋กœ ํ™•์žฅ

  • ๋„๊ตฌ: sample_tasks_day3.json, ์ฝ”๋“œ ํŽธ์ง‘๊ธฐ
  • ์ž…๋ ฅ: ๋ณธ์ธ ์—…๋ฌด ์š”์ฒญ 5~10๊ฐœ (์˜ˆ: ๋ฌธ์˜๋ถ„๋ฅ˜/์žฌ๋ฌด๊ณ„์‚ฐ/์š”์•ฝ)
  • ์‹คํ–‰ ๋ช…๋ น:
python day3_prompt_patterns.py --mode compare --input sample_tasks_day3.json
  • ์„ฑ๊ณต ํŒ์ •:
    • ์ •ํ™•๋„ ๊ฐœ์„  ํญ ๊ธฐ๋ก (contract - baseline)
    • ์˜ค๋ถ„๋ฅ˜ 1~2๊ฑด์„ ๊ทœ์น™ ์ˆ˜์ •์œผ๋กœ ์ค„์ผ ์ˆ˜ ์žˆ์Œ

4) ์น ํŒ ์น˜ํŠธ์‹œํŠธ

ํ”„๋กฌํ”„ํŠธ๊ฐ€ ๊ธธ๋‹ค๊ณ  ์ข‹์€ ๊ฒŒ ์•„๋‹ˆ๋‹ค. ์•„๋ž˜ 4์ค„์ด๋ฉด ์ถฉ๋ถ„ํ•˜๋‹ค.

  1. ์—ญํ• : โ€œ๋„ˆ๋Š” ๋ฌด์—‡์„ ์ฑ…์ž„์ง€๋Š”๊ฐ€โ€
  2. ๋ผ์šฐํŒ…: โ€œ์–ด๋–ค ์กฐ๊ฑด์—์„œ ์–ด๋–ค ๋„๊ตฌ๋ฅผ ๊ณ ๋ฅด๋Š”๊ฐ€โ€
  3. ์ถœ๋ ฅ: โ€œ๋ฐ˜๋“œ์‹œ ์–ด๋–ค ํ˜•์‹์œผ๋กœ ๋‹ตํ•˜๋Š”๊ฐ€โ€
  4. ์‹คํŒจ: โ€œ์‹คํŒจํ•˜๋ฉด ๋ฌด์—‡์„ ๋ฐ˜ํ™˜ํ•˜๋Š”๊ฐ€โ€

5) ์‹ค๋ฌด ์ ์šฉ ํฌ์ธํŠธ

  • ๊ณ ๊ฐ์ง€์›: ๊ฒฐ์ œ/ํ™˜๋ถˆ/๊ธฐ์ˆ ๋ฌธ์˜๋ฅผ ๋ผ์šฐํŒ…ํ•  ๋•Œ ๊ทœ์น™ํ˜• ํ”„๋กฌํ”„ํŠธ๊ฐ€ ํŠนํžˆ ๊ฐ•ํ•จ
  • ๋ฆฌ์„œ์น˜ ์ž๋™ํ™”: ๊ฒ€์ƒ‰ ๋„๊ตฌ์™€ ๊ณ„์‚ฐ ๋„๊ตฌ๋ฅผ ์„ž์„ ๋•Œ ์˜คํ˜ธ์ถœ ๊ฐ์†Œ
  • ์šด์˜ ๋ณด๊ณ : JSON ์ถœ๋ ฅ ๊ณ„์•ฝ์„ ๋‘๋ฉด ๋Œ€์‹œ๋ณด๋“œ/์ž๋™ํ™” ์—ฐ๊ฒฐ์ด ์‰ฌ์›Œ์ง

6) ํ˜„์žฅํ˜• ๋ฏธ๋‹ˆ ์‚ฌ๋ก€

์‚ฌ๋ก€ A) ๋ฌธ์˜ ์ž๋™ ๋ถ„๋ฅ˜์—์„œ ์˜ค๋ถ„๋ฅ˜๊ฐ€ ์ค„์–ด๋“  ์ผ€์ด์Šค

์ดˆ๊ธฐ์—๋Š” โ€œ์š”์•ฝ/๊ฒ€์ƒ‰/๊ณ„์‚ฐโ€์ด ์„ž์ธ ์š”์ฒญ์—์„œ ๋„๊ตฌ ์„ ํƒ์ด ํ”๋“ค๋ ธ๋‹ค. Tool Policy๋ฅผ ํ‚ค์›Œ๋“œ ๋‚˜์—ด์ด ์•„๋‹ˆ๋ผ **์šฐ์„ ์ˆœ์œ„ ๊ทœ์น™(์ˆซ์ž ์š”์ฒญ ์šฐ์„ โ†’๊ณ„์‚ฐ ๋„๊ตฌ)**์œผ๋กœ ๋ฐ”๊พธ์ž ์˜ค๋ถ„๋ฅ˜๊ฐ€ ๋น ๋ฅด๊ฒŒ ์ค„์—ˆ๋‹ค.

์‚ฌ๋ก€ B) JSON ํŒŒ์‹ฑ ์‹คํŒจ๋กœ ํŒŒ์ดํ”„๋ผ์ธ์ด ๋ฉˆ์ถ˜ ์ผ€์ด์Šค

์ถœ๋ ฅ ๊ณ„์•ฝ์„ ์ž์œ ๋ฌธ์žฅ์œผ๋กœ ๋‘์—ˆ๋”๋‹ˆ ํ›„์ฒ˜๋ฆฌ ๋‹จ๊ณ„์—์„œ ์‹คํŒจ๊ฐ€ ์ž์ฃผ ๋‚ฌ๋‹ค. Output Contract๋ฅผ ๊ณ ์ •(JSON ํ•„์ˆ˜ ํ•„๋“œ 4๊ฐœ)ํ•˜๊ณ  ์‹คํŒจ ์‹œ status=error๋ฅผ ๊ฐ•์ œํ•œ ๋’ค ์•ˆ์ •์ ์œผ๋กœ ๋ณต๊ตฌ ๋ฃจํ”„๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์—ˆ๋‹ค.

7) ์ž์ฃผ ๋ง‰ํžˆ๋Š” ์ง€์ 

  1. ๊ทœ์น™์ด ์ž์—ฐ์–ด๋กœ๋งŒ ๊ธธ๊ณ , ์กฐ๊ฑด๋ฌธ์ฒ˜๋Ÿผ ๋ช…์‹œ๋˜์ง€ ์•Š์Œ
  2. ์ถœ๋ ฅ ํ˜•์‹์„ ๊ฐ•์ œํ•˜์ง€ ์•Š์•„ ํ›„์ฒ˜๋ฆฌ ํŒŒ์ดํ”„๋ผ์ธ์ด ๊นจ์ง
  3. ์‹คํŒจ ์‘๋‹ต ์Šคํ‚ค๋งˆ๊ฐ€ ์—†์–ด ์žฌ์‹œ๋„ ๋กœ์ง ์„ค๊ณ„๊ฐ€ ์–ด๋ ค์›€

8) 20๋ถ„ ๋ณด๊ฐ• ๋ฃจํ‹ด

  • 5๋ถ„: ๊ธฐ์กด ํ”„๋กฌํ”„ํŠธ๋ฅผ Role/Tool Policy/Output Contract 3๋ธ”๋ก์œผ๋กœ ๋ถ„ํ•ด
  • 5๋ถ„: Tool Policy๋ฅผ ์šฐ์„ ์ˆœ์œ„ ๊ทœ์น™(์กฐ๊ฑด๋ฌธ ํ˜•ํƒœ)์œผ๋กœ ์žฌ์ž‘์„ฑ
  • 5๋ถ„: ์‹คํŒจ ์Šคํ‚ค๋งˆ(status=error, reason) ์ถ”๊ฐ€
  • 5๋ถ„: ์ƒ˜ํ”Œ 5๊ฐœ๋กœ baseline vs contract ์žฌ์ธก์ •

9) ๋‹ค์Œ ํŽธ ์˜ˆ๊ณ  (04ํŽธ)

4ํŽธ์—์„œ๋Š” ํ”„๋กฌํ”„ํŠธ ๊ณ„์•ฝ ์œ„์— ๋ฉ”๋ชจ๋ฆฌ/์ƒํƒœ(State) ์„ค๊ณ„๋ฅผ ์˜ฌ๋ ค์„œ, โ€œํ•œ ๋ฒˆ ์ž˜ํ•˜๋Š” ์—์ด์ „ํŠธโ€๋ฅผ โ€œ๊ณ„์† ์ž˜ํ•˜๋Š” ์—์ด์ „ํŠธโ€๋กœ ํ™•์žฅํ•œ๋‹ค.

์ฐธ๊ณ  ๋งํฌ

์‹ค์Šต ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ

๋ณด๊ฐ• ์ถ”๊ฐ€: ์ข‹์€ ์˜ˆ / ๋‚˜์œ ์˜ˆ ํ”„๋กฌํ”„ํŠธ

์•„๋ž˜์ฒ˜๋Ÿผ ๊ฐ™์€ ์š”์ฒญ์ด๋ผ๋„ ๊ณ„์•ฝ ์ˆ˜์ค€์ด ๋‹ค๋ฅด๋ฉด ๋„๊ตฌ ์„ ํƒ ์ •ํ™•๋„๊ฐ€ ํฌ๊ฒŒ ๊ฐˆ๋ฆฐ๋‹ค.

๋‚˜์œ ์˜ˆ (๋ชจํ˜ธํ•œ ์ง€์‹œ)

๋„๊ตฌ๋ฅผ ์ ์ ˆํžˆ ์จ์„œ ์•Œ์•„์„œ ์ฒ˜๋ฆฌํ•ด์ค˜.
  • ๋ฌธ์ œ: ๋„๊ตฌ ์„ ํƒ ์กฐ๊ฑด/์ถœ๋ ฅ ํ˜•์‹/์‹คํŒจ ์‘๋‹ต์ด ์—†์Œ
  • ํ•ต์‹ฌ ๋ณ€ํ™”: ์˜คํ˜ธ์ถœ, ํŒŒ์‹ฑ ์‹คํŒจ, ์žฌ์‹œ๋„ ๋ฃจํ”„ ๋ถˆ์•ˆ์ •

์ข‹์€ ์˜ˆ (๊ณ„์•ฝํ˜• ์ง€์‹œ)

[Role]
๋„ˆ๋Š” ์šด์˜ ๋ผ์šฐํŒ… ์–ด์‹œ์Šคํ„ดํŠธ๋‹ค.
 
[Tool Policy]
- ๊ณ„์‚ฐ/์ˆ˜์น˜ ์š”์ฒญ: calculator
- ๋ฌธ์„œ ๊ฒ€์ƒ‰/๊ทผ๊ฑฐ ํ™•์ธ: search_docs
- ๋‹ต์žฅ ์ดˆ์•ˆ ์ž‘์„ฑ: draft_reply
- ๋ชจํ˜ธํ•˜๋ฉด search_docs ๋จผ์ € ํ˜ธ์ถœ ํ›„ ๊ทผ๊ฑฐ 1์ค„ ์ฒจ๋ถ€
 
[Output Contract]
JSON์œผ๋กœ๋งŒ ์‘๋‹ต:
{ "chosen_tool": "...", "reason": "...", "result": "...", "status": "ok|error" }
  • ์žฅ์ : ๋„๊ตฌ ์„ ํƒ ๊ธฐ์ค€/์ถœ๋ ฅ ๊ณ„์•ฝ/์‹คํŒจ ์ฒ˜๋ฆฌ๊นŒ์ง€ ์ผ๊ด€

ํ’ˆ์งˆ ์ ๊ฒ€ํ‘œ (2026-02-28)

  • ์žฌํ˜„์„ฑ: 8.5/10
  • ๊ณต์‹ ๊ทผ๊ฑฐ ์—ฐ๊ฒฐ: 9.0/10
  • ์šด์˜ ์ ์šฉ์„ฑ: 8.5/10
  • ๋ฌธ์„œ ๊ฐ€๋…์„ฑ: 9.0/10

์ฆ‰์‹œ ๋ณด๊ฐ• ํฌ์ธํŠธ 1๊ฐœ

  • ํ˜„์žฌ ๊ณ„์•ฝํ˜• ํ…œํ”Œ๋ฆฟ์— ๋„๋ฉ”์ธ๋ณ„ ๊ธˆ์ง€ ์‘๋‹ต ์˜ˆ์‹œ(์˜ˆ: ๊ฐœ์ธ์ •๋ณด ์š”์ฒญ ์ฐจ๋‹จ)๋ฅผ 1์„ธํŠธ ์ถ”๊ฐ€ํ•ด ์•ˆ์ „ ๊ฐ€๋“œ๋ ˆ์ผ์„ ๋” ๊ฐ•ํ™”ํ•œ๋‹ค.

์ƒ์„ฑํ˜• AI ํ™œ์šฉ ๊ณ ์ง€

์ด ๋ฌธ์„œ๋Š” ์ƒ์„ฑํ˜• AI๋ฅผ ํ™œ์šฉํ•ด ์ดˆ์•ˆ ์ž‘์„ฑ ๋ฐ ๊ตฌ์กฐํ™”๋ฅผ ์ˆ˜ํ–‰ํ–ˆ์œผ๋ฉฐ, ์ตœ์ข… ๊ณต๊ฐœ ์ „ ์‚ฌ๋žŒ์ด ๊ฒ€ํ† ยท๋ณด์ •ํ•œ๋‹ค.