์ด๋ฒ ํธ์์๋ smolagents์ CodeAgent๋ฅผ ์ธ ๋ ์์ฃผ ๋ง๋๋ ์ง๋ฌธ,
**โ๊ธฐ๋ณธ import ์ ํ์ ์ด๋ป๊ฒ ์์ ํ๊ฒ ํ์ด์ ์ค๋ฌด ์์
์ ์ฐ๊ฒฐํ ๊น?โ**๋ฅผ ๋ค๋ฃฌ๋ค.
ํต์ฌ์ ๊ฐ๋จํ๋ค.
-
๊ธฐ๋ณธ๊ฐ์ ์์ ์ ์ํด import๊ฐ ์ ํ๋๋ค.
-
ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง ๋ช ์์ ์ผ๋ก ํ์ฉํ๋ฉด ์๋ํ ๋ฒ์๋ฅผ ๋ํ ์ ์๋ค.
-
ํ์ฉ ๋ชฉ๋ก์ ๋ํ์๋ก ๋ฆฌ์คํฌ๋ ์ปค์ง๋ฏ๋ก, ์ต์ ๊ถํ ์์น์ผ๋ก ์ด์ํด์ผ ํ๋ค.
-
์ด์ ํธ: ๐ค 20. ๋ณธํธ 11
-
๋ค์ ํธ ์๊ณ : ํด ์คํจ ์ ์ฌ์๋ยท๋์ฒด๊ฒฝ๋ก(fallback) ์ ์ฑ ์ ์ฝ๋ ๋ ๋ฒจ์์ ํ์คํํ๊ธฐ
ํ ์ค ๋ชฉํ
๋์ผํ ์์ ์ โimport ํ์ฉ ์ /ํโ๋ก ์คํํด ์คํจโ์ฑ๊ณต ์ ํ์ ์ฌํํ๊ณ , ์ด์์ฉ ํ์ฉ ์ ์ฑ ํ ํ๋ฆฟ์ ๋ง๋ ๋ค.
flowchart TD A[์ฌ์ฉ์ ์์ ์์ฒญ] --> B[CodeAgent ์คํ] B --> C{ํ์ ๋ชจ๋ import ๊ฐ๋ฅ?} C -- ์๋์ค --> D[ImportError/์คํจ ๋ก๊ทธ] D --> E[ํ์ฉ ๋ชฉ๋ก์ ์ต์ ๋ชจ๋ ์ถ๊ฐ] E --> B C -- ์ --> F[์ ์ ์คํ] F --> G[๊ฒฐ๊ณผ ์ ์ฅ + ์ด์ ์ ์ฑ ๋ฐ์]
0) ์ค์ต ๋ฒ์
- ๋ฒ์ ํฌํจ
additional_authorized_imports๋ฏธ์ค์ /์ค์ ๋น๊ต- ๊ฐ์ ์ ๋ ฅ์ผ๋ก ์คํจ์ ์ฑ๊ณต์ ๊ฐ๊ฐ 1ํ ์ด์ ์ฌํ
- ์คํ ๋ก๊ทธ(
run_import_policy.json)๋ก ๊ฒฐ๊ณผ ์ฆ๋น
- ๋ฒ์ ์ ์ธ
- ์ธ๋ถ API ๋๊ท๋ชจ ํธ์ถ
- ๋ฉํฐ์์ด์ ํธ ๊ตฌ์กฐ
1) ํ๊ฒฝ ์ค๋น
- ๋๊ตฌ: ํฐ๋ฏธ๋
- ์ ๋ ฅ: Python 3.10+, ๊ฐ์ํ๊ฒฝ
- ์คํ๋ช ๋ น:
mkdir -p ~/hf-agents-lab21
cd ~/hf-agents-lab21
python3 -m venv .venv
source .venv/bin/activate
pip install -U smolagents litellm- ์ฑ๊ณตํ์ :
python -V
pip show smolagents | head -n 5- Python ๋ฒ์ ์ถ๋ ฅ
- smolagents ํจํค์ง ์ ๋ณด๊ฐ ๋ณด์ด๋ฉด ์ฑ๊ณต
2) ๋ชจ๋ธ ํค ์ค์
- ๋๊ตฌ: ํฐ๋ฏธ๋
- ์ ๋ ฅ: API ํค, ๋ชจ๋ธ ID
- ์คํ๋ช ๋ น:
export OPENAI_API_KEY="YOUR_API_KEY"
export MODEL_ID="openai/gpt-4o-mini"- ์ฑ๊ณตํ์ :
python - <<'PY'
import os
print('MODEL_ID =', os.getenv('MODEL_ID'))
print('OPENAI_API_KEY set:', bool(os.getenv('OPENAI_API_KEY')))
PYOPENAI_API_KEY set: Trueํ์ธ
3) ๋น๊ต ์คํ ์ฝ๋ ์์ฑ
์๋ ์ฝ๋๋ ๊ฐ์ ์์ ์ 2๋ฒ ์คํํ๋ค.
- import ํ์ฉ ์์ (
[]) โ ์คํจ ๊ธฐ๋ datetimeํ์ฉ (["datetime"]) โ ์ฑ๊ณต ๊ธฐ๋
- ๋๊ตฌ: ์๋ํฐ/ํฐ๋ฏธ๋
- ์ ๋ ฅ: ์๋ ์ฝ๋
- ์คํ๋ช ๋ น:
cat > lab21_import_policy_compare.py <<'PY'
from __future__ import annotations
import json
import os
import time
from pathlib import Path
from smolagents import CodeAgent, LiteLLMModel
OUT = Path("run_import_policy.json")
TASK = (
"ํ์ด์ฌ ์ฝ๋๋ก datetime ๋ชจ๋์ importํด ํ์ฌ ์ฐ-์-์ผ ๋ฌธ์์ด์ ๋ง๋ค๊ณ , "
"'์ด์ ๋ฆฌํฌํธ ๋ ์ง: YYYY-MM-DD' ํ์ ํ ์ค๋ง ์ถ๋ ฅํด๋ผ."
)
def run_once(allowed_imports: list[str]) -> dict:
model = LiteLLMModel(model_id=os.getenv("MODEL_ID", "openai/gpt-4o-mini"))
agent = CodeAgent(
model=model,
tools=[],
max_steps=6,
additional_authorized_imports=allowed_imports,
)
t0 = time.perf_counter()
ok = True
output_text = ""
error = ""
try:
result = agent.run(TASK)
output_text = str(result)
except Exception as e:
ok = False
error = f"{type(e).__name__}: {e}"
return {
"allowed_imports": allowed_imports,
"success": ok,
"elapsed_sec": round(time.perf_counter() - t0, 3),
"output_preview": output_text[:200],
"error": error,
}
def main() -> None:
rows = [
run_once([]),
run_once(["datetime"]),
]
OUT.write_text(json.dumps(rows, ensure_ascii=False, indent=2), encoding="utf-8")
print(f"saved: {OUT}")
for r in rows:
print(r)
if __name__ == "__main__":
main()
PY- ์ฑ๊ณตํ์ :
lab21_import_policy_compare.pyํ์ผ ์์ฑ- ์ฝ๋์
additional_authorized_importsํค์๋ ํ์ธ
4) ์คํ
- ๋๊ตฌ: Python
- ์ ๋ ฅ: ๋์ผ ํ์คํฌ + import ํ์ฉ ๋ชฉ๋ก 2์ข
- ์คํ๋ช ๋ น:
python lab21_import_policy_compare.py
cat run_import_policy.json- ์ฑ๊ณตํ์ :
saved: run_import_policy.json์ถ๋ ฅ- JSON์
allowed_imports,success,errorํค ์กด์ฌ - ๋ณดํต
[]์คํ์ ์คํจ,["datetime"]์คํ์ ์ฑ๊ณต ํจํด์ด ๊ด์ฐฐ๋จ
5) ๊ฒฐ๊ณผ ํ๋ (์ด๋ณด์์ฉ)
- ๋๊ตฌ: ํฐ๋ฏธ๋
- ์
๋ ฅ:
run_import_policy.json - ์คํ๋ช ๋ น:
python - <<'PY'
import json
rows = json.load(open('run_import_policy.json', encoding='utf-8'))
for r in rows:
print(f"imports={r['allowed_imports']} success={r['success']} sec={r['elapsed_sec']}")
if not r['success']:
print(' error=', r['error'][:140])
safe_policy = [r for r in rows if r['success']]
if safe_policy:
print('RECOMMEND: ์ฑ๊ณต์ ํ์ํ ์ต์ import๋ง ํ์ฉ ๋ชฉ๋ก์ ์ ์ง')
else:
print('RECOMMEND: ๋ชจ๋ธ/APIํค/๋ฒ์ ๋ฐ ํ์คํฌ ๋ฌธ๊ตฌ ์ฌ์ ๊ฒ')
PY- ์ฑ๊ณตํ์ :
RECOMMEND:๋ฌธ์ฅ 1์ค ์ด์ ์ถ๋ ฅ
์ค๋ฌด ์ ์ฉ ํฌ์ธํธ
-
์ต์ ๊ถํ ์์น
- ์ฒ์๋ถํฐ
pandas,requests,os๋ฅผ ์ ๋ถ ์ด์ง ๋ง๊ณ , - ์คํจ ๋ก๊ทธ๋ฅผ ๋ณด๊ณ ํ์ํ ๋ชจ๋๋ง ์์ฐจ ํ์ฉํ๋ค.
- ์ฒ์๋ถํฐ
-
์์ ๋ณ ํ์ฉ ํ ํ๋ฆฟ ๋ถ๋ฆฌ
- ๋ฆฌํฌํธ ์์ฑ ์์
:
datetime,json์ค์ฌ - ๋ฐ์ดํฐ ๊ฐ๊ณต ์์
:
math,statistics๋ฑ - ํ ํ๋ฆฟ์ ๋ถ๋ฆฌํ๋ฉด ์ฅ์ ๋ถ์์ด ๋นจ๋ผ์ง๋ค.
- ๋ฆฌํฌํธ ์์ฑ ์์
:
-
์ด์ ๋ก๊ทธ๋ฅผ ๋ฐ๋์ ํ์ผ๋ก ๋จ๊ธฐ๊ธฐ
- ์ด๋ฒ ์ค์ต์ฒ๋ผ JSON ๋ก๊ทธ๋ฅผ ๋จ๊ธฐ๋ฉด
- โ์ธ์ ์ด๋ค ํ์ฉ ์ ์ฑ ์ด ์คํจ/์ฑ๊ณตํ๋์งโ๋ฅผ ํ๊ณ ํ ์ ์๋ค.
ํธ๋ฌ๋ธ์ํ
- ๋ ๋ค ์คํจํ๋ ๊ฒฝ์ฐ
- ์์ธ: API ํค/๋ชจ๋ธ ์ค์ ์ค๋ฅ ๊ฐ๋ฅ์ฑ
- ์กฐ์น:
python - <<'PY'
import os
print(bool(os.getenv('OPENAI_API_KEY')), os.getenv('MODEL_ID'))
PY- ํ์ฉํ๋๋ฐ๋ import ์ค๋ฅ๊ฐ ๋๋ ๊ฒฝ์ฐ
- ์์ธ: ๋ชจ๋๋ช ์คํ ๋๋ ํ๊ฒฝ ๋ฏธ์ค์น
- ์กฐ์น: ๋ชจ๋๋ช ์ ํํ ํ์ธ, ํ์ํ ํจํค์ง ์ค์น ํ ์ฌ์๋
- ๊ฒฐ๊ณผ ํ์์ด ํ๋ค๋ฆฌ๋ ๊ฒฝ์ฐ
- ์์ธ: ํ์คํฌ ์ง์๊ฐ ๋์จํจ
- ์กฐ์น: ์ถ๋ ฅ ํฌ๋งท ๋ฌธ๊ตฌ๋ฅผ ๋ ์๊ฒฉํ ์ง์
- ์:
์ ํํ ํ ์ค, ์ ๋์ด๋ '์ด์ ๋ฆฌํฌํธ ๋ ์ง:'
- ์:
์ฒดํฌ๋ฆฌ์คํธ
- import ํ์ฉ ์ /ํ ์คํ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ๋ ํ๋ณดํ๋ค
-
run_import_policy.jsonํ์ผ์ ์ ์ฅํ๋ค - ์ ๋ฌด๋ณ ์ต์ ํ์ฉ ๋ชฉ๋ก ์ด์์ ๋ง๋ค์๋ค
- ํ ์ด์ ๋ฌธ์์ ํ์ฉ ์ ์ฑ ๊ณผ ๊ทผ๊ฑฐ ๋ก๊ทธ๋ฅผ ๊ธฐ๋กํ๋ค
์ฐธ๊ณ ๋งํฌ (์ฐ์ ์์)
- https://github.com/huggingface/agents-course
- https://huggingface.co/learn/agents-course
- https://huggingface.co/docs/smolagents
์์ฑํ AI ํ์ฉ ๊ณ ์ง
์ด ๋ฌธ์๋ ์์ฑํ AI๋ก ์ด์์ ์์ฑํ๊ณ , ์ฌ๋์ด ์ค์ต ์ฌํ์ฑ(๋๊ตฌ/์ ๋ ฅ/์คํ๋ช ๋ น/์ฑ๊ณตํ์ ), ๋งํฌ, ๋ฌธ์ ํ์์ ์ ๊ฒํด ํ์ ํ๋ค.