์ด๋ฒ 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์ ํ๋๊ฐ ๋์์ง๋ ๊ฒ์ ํ์ธํ๋ค.
๊ณต์ ๊ทผ๊ฑฐ ๋ฐ๋ก๋ณด๊ธฐ
- Agents Course(๊ณต์ ์ปค๋ฆฌํ๋ผ): https://huggingface.co/learn/agents-course
- Course ์ ์ฅ์(์์ /์ค์ต): https://github.com/huggingface/agents-course
- smolagents ๋ฌธ์(Agent/Tool ํจํด): https://huggingface.co/docs/smolagents
1) ๊ณต์ ์๋ฃ ๊ธฐ์ค ํต์ฌ ํฌ์ธํธ
Hugging Face Agents Course์ smolagents ๋ฌธ์๋ฅผ ๋ณด๋ฉด ๊ณตํต ๋ฉ์์ง๊ฐ ๋ถ๋ช ํ๋ค.
- ์์ด์ ํธ๋
Think โ Act โ Observe๋ฃจํ๋ก ๋์ํ๋ค. - ๋๊ตฌ ์ฌ์ฉ์ โ๊ฐ๋ฅํ๋ฉด ์จ๋ณด๊ธฐโ๊ฐ ์๋๋ผ ์ ํ ๊ธฐ์ค์ด ๋ช ํํด์ผ ํ๋ค.
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)
- ์ถ๋ ฅ JSON์์
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์ค์ด๋ฉด ์ถฉ๋ถํ๋ค.
- ์ญํ : โ๋๋ ๋ฌด์์ ์ฑ ์์ง๋๊ฐโ
- ๋ผ์ฐํ : โ์ด๋ค ์กฐ๊ฑด์์ ์ด๋ค ๋๊ตฌ๋ฅผ ๊ณ ๋ฅด๋๊ฐโ
- ์ถ๋ ฅ: โ๋ฐ๋์ ์ด๋ค ํ์์ผ๋ก ๋ตํ๋๊ฐโ
- ์คํจ: โ์คํจํ๋ฉด ๋ฌด์์ ๋ฐํํ๋๊ฐโ
5) ์ค๋ฌด ์ ์ฉ ํฌ์ธํธ
- ๊ณ ๊ฐ์ง์: ๊ฒฐ์ /ํ๋ถ/๊ธฐ์ ๋ฌธ์๋ฅผ ๋ผ์ฐํ ํ ๋ ๊ท์นํ ํ๋กฌํํธ๊ฐ ํนํ ๊ฐํจ
- ๋ฆฌ์์น ์๋ํ: ๊ฒ์ ๋๊ตฌ์ ๊ณ์ฐ ๋๊ตฌ๋ฅผ ์์ ๋ ์คํธ์ถ ๊ฐ์
- ์ด์ ๋ณด๊ณ : JSON ์ถ๋ ฅ ๊ณ์ฝ์ ๋๋ฉด ๋์๋ณด๋/์๋ํ ์ฐ๊ฒฐ์ด ์ฌ์์ง
6) ํ์ฅํ ๋ฏธ๋ ์ฌ๋ก
์ฌ๋ก A) ๋ฌธ์ ์๋ ๋ถ๋ฅ์์ ์ค๋ถ๋ฅ๊ฐ ์ค์ด๋ ์ผ์ด์ค
์ด๊ธฐ์๋ โ์์ฝ/๊ฒ์/๊ณ์ฐโ์ด ์์ธ ์์ฒญ์์ ๋๊ตฌ ์ ํ์ด ํ๋ค๋ ธ๋ค. Tool Policy๋ฅผ ํค์๋ ๋์ด์ด ์๋๋ผ **์ฐ์ ์์ ๊ท์น(์ซ์ ์์ฒญ ์ฐ์ โ๊ณ์ฐ ๋๊ตฌ)**์ผ๋ก ๋ฐ๊พธ์ ์ค๋ถ๋ฅ๊ฐ ๋น ๋ฅด๊ฒ ์ค์๋ค.
์ฌ๋ก B) JSON ํ์ฑ ์คํจ๋ก ํ์ดํ๋ผ์ธ์ด ๋ฉ์ถ ์ผ์ด์ค
์ถ๋ ฅ ๊ณ์ฝ์ ์์ ๋ฌธ์ฅ์ผ๋ก ๋์๋๋ ํ์ฒ๋ฆฌ ๋จ๊ณ์์ ์คํจ๊ฐ ์์ฃผ ๋ฌ๋ค. Output Contract๋ฅผ ๊ณ ์ (JSON ํ์ ํ๋ 4๊ฐ)ํ๊ณ ์คํจ ์ status=error๋ฅผ ๊ฐ์ ํ ๋ค ์์ ์ ์ผ๋ก ๋ณต๊ตฌ ๋ฃจํ๋ฅผ ๋ง๋ค ์ ์์๋ค.
7) ์์ฃผ ๋งํ๋ ์ง์
- ๊ท์น์ด ์์ฐ์ด๋ก๋ง ๊ธธ๊ณ , ์กฐ๊ฑด๋ฌธ์ฒ๋ผ ๋ช ์๋์ง ์์
- ์ถ๋ ฅ ํ์์ ๊ฐ์ ํ์ง ์์ ํ์ฒ๋ฆฌ ํ์ดํ๋ผ์ธ์ด ๊นจ์ง
- ์คํจ ์๋ต ์คํค๋ง๊ฐ ์์ด ์ฌ์๋ ๋ก์ง ์ค๊ณ๊ฐ ์ด๋ ค์
8) 20๋ถ ๋ณด๊ฐ ๋ฃจํด
- 5๋ถ: ๊ธฐ์กด ํ๋กฌํํธ๋ฅผ
Role/Tool Policy/Output Contract3๋ธ๋ก์ผ๋ก ๋ถํด - 5๋ถ: Tool Policy๋ฅผ ์ฐ์ ์์ ๊ท์น(์กฐ๊ฑด๋ฌธ ํํ)์ผ๋ก ์ฌ์์ฑ
- 5๋ถ: ์คํจ ์คํค๋ง(
status=error,reason) ์ถ๊ฐ - 5๋ถ: ์ํ 5๊ฐ๋ก baseline vs contract ์ฌ์ธก์
9) ๋ค์ ํธ ์๊ณ (04ํธ)
4ํธ์์๋ ํ๋กฌํํธ ๊ณ์ฝ ์์ ๋ฉ๋ชจ๋ฆฌ/์ํ(State) ์ค๊ณ๋ฅผ ์ฌ๋ ค์, โํ ๋ฒ ์ํ๋ ์์ด์ ํธโ๋ฅผ โ๊ณ์ ์ํ๋ ์์ด์ ํธโ๋ก ํ์ฅํ๋ค.
์ฐธ๊ณ ๋งํฌ
- https://github.com/huggingface/agents-course
- https://huggingface.co/learn/agents-course
- https://huggingface.co/docs/smolagents
์ค์ต ํ์ผ ๋ค์ด๋ก๋
- Day3 ์ค์ต ๊ฐ์ด๋ README
- day3_prompt_patterns.py
- sample_tasks_day3.json
- hf-agents-day3-prompt-patterns.zip
๋ณด๊ฐ ์ถ๊ฐ: ์ข์ ์ / ๋์ ์ ํ๋กฌํํธ
์๋์ฒ๋ผ ๊ฐ์ ์์ฒญ์ด๋ผ๋ ๊ณ์ฝ ์์ค์ด ๋ค๋ฅด๋ฉด ๋๊ตฌ ์ ํ ์ ํ๋๊ฐ ํฌ๊ฒ ๊ฐ๋ฆฐ๋ค.
๋์ ์ (๋ชจํธํ ์ง์)
๋๊ตฌ๋ฅผ ์ ์ ํ ์จ์ ์์์ ์ฒ๋ฆฌํด์ค.- ๋ฌธ์ : ๋๊ตฌ ์ ํ ์กฐ๊ฑด/์ถ๋ ฅ ํ์/์คํจ ์๋ต์ด ์์
- ํต์ฌ ๋ณํ: ์คํธ์ถ, ํ์ฑ ์คํจ, ์ฌ์๋ ๋ฃจํ ๋ถ์์
์ข์ ์ (๊ณ์ฝํ ์ง์)
[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๋ฅผ ํ์ฉํด ์ด์ ์์ฑ ๋ฐ ๊ตฌ์กฐํ๋ฅผ ์ํํ์ผ๋ฉฐ, ์ต์ข ๊ณต๊ฐ ์ ์ฌ๋์ด ๊ฒํ ยท๋ณด์ ํ๋ค.