Path: blob/main/smolagents_doc/ko/guided_tour.ipynb
7411 views
์์ด์ ํธ ์๋ด์[[agents---guided-tour]]
์ด ์๋ด์์์๋ ์์ด์ ํธ๋ฅผ ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ, ์คํํ๋ ๋ฐฉ๋ฒ, ๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ ์ฌ๋ก์ ๋ง๊ฒ ๋ ์ ์๋ํ๋๋ก ๋ง์ถค ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ํ์ตํฉ๋๋ค.
์์ด์ ํธ ์ ํ ์ ํ: CodeAgent ๋๋ ToolCallingAgent[[choosing-an-agent-type:-codeagent-or-toolcallingagent]]
smolagents๋ CodeAgent์ ToolCallingAgent ๋ ๊ฐ์ง ์์ด์ ํธ ํด๋์ค๋ฅผ ์ ๊ณตํ๋๋ฐ, ์ด ๋ ํด๋์ค๋ ๊ฐ๊ฐ ์์ด์ ํธ๊ฐ ๋๊ตฌ์ ์ํธ์์ฉํ๋ ๋ฐฉ๋ฒ์ด ๋ค๋ฆ
๋๋ค. ๋ ๋ฐฉ์์ ํต์ฌ ์ฐจ์ด์ ์ '์ก์
์ ์ง์ ํ๊ณ ์คํ'ํ๋ ๋ฐฉ์์ ์์ต๋๋ค: ์ฝ๋ ์์ฑ vs ๊ตฌ์กฐํ๋ ๋๊ตฌ ํธ์ถ.
CodeAgent๋ ๋๊ตฌ ํธ์ถ์ Python ์ฝ๋ ์ค๋ํซ์ผ๋ก ์์ฑํฉ๋๋ค.
์ฝ๋๋ ๋ก์ปฌ์์ ์คํ๋๊ฑฐ๋(์ ์ฌ์ ์ผ๋ก ๋ถ์์ ) ๋ณด์ ์๋๋ฐ์ค์์ ์คํ๋ฉ๋๋ค.
๋๊ตฌ๋ Python ํจ์๋ก ๋ ธ์ถ๋ฉ๋๋ค(๋ฐ์ธ๋ฉ์ ํตํด).
๋๊ตฌ ํธ์ถ ์์:
์ฅ์ :
๋์ ํํ๋ ฅ: ๋ณต์กํ ๋ก์ง๊ณผ ์ ์ด ํ๋ฆ์ ํ์ฉํ๊ณ ๋๊ตฌ๋ฅผ ๊ฒฐํฉํ๊ณ , ๋ฐ๋ณตํ๊ณ , ๋ณํํ๊ณ , ์ถ๋ก ํ ์ ์์ต๋๋ค.
์ ์ฐ์ฑ: ๋ชจ๋ ๊ฐ๋ฅํ ์ก์ ์ ๋ฏธ๋ฆฌ ์ ์ํ ํ์๊ฐ ์์ผ๋ฉฐ, ๋์ ์ผ๋ก ์๋ก์ด ์ก์ /๋๊ตฌ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์ฐฝ๋ฐ์ ์ถ๋ก : ๋ค๋จ๊ณ ๋ฌธ์ ๋ ๋์ ๋ก์ง์ ์ด์์ ์ ๋๋ค.
์ ํ์ฌํญ
์ค๋ฅ ์ํ: ๊ตฌ๋ฌธ ์ค๋ฅ, ์์ธ๋ฅผ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
์์ธก์ฑ ๋ถ์กฑ: ์์์น ๋ชปํ ๋๋ ์์ ํ์ง ์์ ์ถ๋ ฅ์ ๋ ์ทจ์ฝํฉ๋๋ค.
๋ณด์ ์คํ ํ๊ฒฝ์ด ํ์ํฉ๋๋ค.
ToolCallingAgent๋ ๋๊ตฌ ํธ์ถ์ ๊ตฌ์กฐํ๋ JSON์ผ๋ก ์์ฑํฉ๋๋ค.
์ด๋ ๋ง์ ํ๋ ์์ํฌ(OpenAI API)์์ ์ฌ์ฉ๋๋ ์ผ๋ฐ์ ์ธ ํ์์ผ๋ก, ์ฝ๋ ์คํ ์์ด ๊ตฌ์กฐํ๋ ๋๊ตฌ ์ํธ์์ฉ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
๋๊ตฌ๋ JSON ์คํค๋ง๋ก ์ ์๋ฉ๋๋ค: ์ด๋ฆ, ์ค๋ช , ๋งค๊ฐ๋ณ์ ํ์ ๋ฑ.
๋๊ตฌ ํธ์ถ ์์:
์ฅ์ :
์์ ์ฑ: ํ๊ฐ์ด ์ ๊ณ , ์ถ๋ ฅ์ด ๊ตฌ์กฐํ๋๊ณ ๊ฒ์ฆ๋ฉ๋๋ค.
์์ ์ฑ: ์ธ์๊ฐ ์๊ฒฉํ๊ฒ ๊ฒ์ฆ๋๊ณ , ์์์ ์ฝ๋๊ฐ ์คํ๋ ์ํ์ด ์์ต๋๋ค.
์ํธ ์ด์ฉ์ฑ: ์ธ๋ถ API๋ ์๋น์ค์ ์ฝ๊ฒ ๋งคํ๋ฉ๋๋ค.
์ ํ์ฌํญ:
๋ฎ์ ํํ๋ ฅ: ๊ฒฐ๊ณผ๋ฅผ ๋์ ์ผ๋ก ์ฝ๊ฒ ๊ฒฐํฉํ๊ฑฐ๋ ๋ณํํ ์ ์๊ณ , ๋ณต์กํ ๋ก์ง์ด๋ ์ ์ด ํ๋ฆ์ ์ํํ ์ ์์ต๋๋ค.
์ ์ฐ์ฑ ๋ถ์กฑ: ๋ชจ๋ ๊ฐ๋ฅํ ์ก์ ์ ๋ฏธ๋ฆฌ ์ ์ํด์ผ ํ๊ณ , ์ฌ์ ์ ์๋ ๋๊ตฌ๋ก ์ ํ๋ฉ๋๋ค.
์ฝ๋ ํฉ์ฑ ์์: ๋๊ตฌ ๊ธฐ๋ฅ์ผ๋ก ์ ํ๋ฉ๋๋ค.
์ด๋ค ์์ด์ ํธ ์ ํ์ ์ฌ์ฉํ ์ง:
CodeAgent๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ:
์ถ๋ก , ์ฐ๊ฒฐ ๋๋ ๋์ ๊ตฌ์ฑ์ด ํ์ํ ๊ฒฝ์ฐ.
๋๊ตฌ๊ฐ ๊ฒฐํฉํ ์ ์๋ ํจ์์ธ ๊ฒฝ์ฐ(์: ๊ตฌ๋ฌธ ๋ถ์ + ์ํ + ์ฟผ๋ฆฌ).
์์ด์ ํธ๊ฐ ๋ฌธ์ ํด๊ฒฐ์ ๋๋ ํ๋ก๊ทธ๋๋จธ์ธ ๊ฒฝ์ฐ.
ToolCallingAgent๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ:
๋จ์ํ๊ณ ๋ ๋ฆฝ์ ์ธ ๋๊ตฌ๊ฐ ์๋ ๊ฒฝ์ฐ(์: API ํธ์ถ, ๋ฌธ์ ๊ฐ์ ธ์ค๊ธฐ).
๋์ ์์ ์ฑ๊ณผ ๋ช ํํ ๊ฒ์ฆ์ ์ํ๋ ๊ฒฝ์ฐ.
์์ด์ ํธ๊ฐ ๋์คํจ์ฒ๋ ์ปจํธ๋กค๋ฌ ๊ฐ์ ์ญํ ์ธ ๊ฒฝ์ฐ.
CodeAgent[[codeagent]]
CodeAgent๋ ์ก์ ์ ์ํํ๊ณ ์์ ์ ํด๊ฒฐํ๊ธฐ ์ํด Python ์ฝ๋ ์ค๋ํซ์ ์์ฑํฉ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก Python ์ฝ๋ ์คํ์ ๋ก์ปฌ ํ๊ฒฝ์์ ์ํ๋ฉ๋๋ค. ์ฌ์ฉ์๊ฐ ์ ๊ณตํ ๋๊ตฌ๋ค(ํนํ Hugging Face ๋๊ตฌ๋ง ์๋ ๊ฒฝ์ฐ)๊ณผ print๋ math ๋ชจ๋ ํจ์ ๊ฐ์ ์ฌ์ ์ ์๋ ์์ ํ ํจ์๋ค๋ง ํธ์ถํ ์ ์๋๋ก ์ ํ๋์ด ์์ด ์์ ํฉ๋๋ค.
Python ์ธํฐํ๋ฆฌํฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ ๋ชฉ๋ก์ ํฌํจ๋ ๋ชจ๋๋ง import๋ฅผ ํ์ฉํ๋ฏ๋ก, ๋๋ถ๋ถ์ ๋ช
๋ฐฑํ ๋ณด์ ๊ณต๊ฒฉ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค. CodeAgent๋ฅผ ์ด๊ธฐํํ ๋ additional_authorized_imports ์ธ์์ ๋ฌธ์์ด ๋ชฉ๋ก์ผ๋ก ์น์ธ๋ ๋ชจ๋์ ์ ๋ฌํ์ฌ ์ถ๊ฐ import๋ฅผ ์น์ธํ ์ ์์ต๋๋ค:
๋ํ ์ถ๊ฐ ๋ณด์ ๊ณ์ธต์ผ๋ก, import ๋ชฉ๋ก์์ ๋ช
์์ ์ผ๋ก ์น์ธ๋์ง ์๋ ํ ์๋ธ๋ชจ๋์ ๋ํ ์ ๊ทผ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ธ์ง๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, numpy.random ์๋ธ๋ชจ๋์ ์ ๊ทผํ๋ ค๋ฉด additional_authorized_imports ๋ชฉ๋ก์ 'numpy.random'์ ์ถ๊ฐํด์ผ ํฉ๋๋ค. ์ด๋ numpy์ numpy.random ๊ฐ์ ๋ชจ๋ ์๋ธํจํค์ง ๋ฐ ์์ฒด ์๋ธํจํค์ง๋ฅผ ํ์ฉํ๋ numpy.*๋ฅผ ์ฌ์ฉํ์ฌ ์น์ธํ ์๋ ์์ต๋๋ค.
[!WARNING] LLM์ ์คํ๋ ์์์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค: ์์ ํ์ง ์์ import๋ ์ถ๊ฐํ์ง ๋ง์ธ์!
๋ถ๋ฒ์ ์ธ ์์ ์ ์ํํ๋ ค๊ณ ์๋ํ๋ ์ฝ๋๋ ์์ด์ ํธ๊ฐ ์์ฑํ ์ฝ๋์ ์ผ๋ฐ์ ์ธ Python ์ค๋ฅ๊ฐ ์๋ ๊ฒฝ์ฐ ์คํ์ด ์ค๋จ๋ฉ๋๋ค.
๋ก์ปฌ Python ์ธํฐํ๋ฆฌํฐ ๋์ E2B code executor๋ Docker๋ฅผ ์ฌ์ฉํ ์๋ ์์ต๋๋ค. E2B์ ๊ฒฝ์ฐ, ๋จผ์ E2B_API_KEY ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํ ๋ค์ ์์ด์ ํธ ์ด๊ธฐํ ์ executor_type="e2b"๋ฅผ ์ ๋ฌํ์ธ์. Docker์ ๊ฒฝ์ฐ, ์ด๊ธฐํ ์ค์ executor_type="docker"๋ฅผ ์ ๋ฌํ์ธ์.
[!TIP] ์ฝ๋ ์คํ์ ๋ํด ๋ ์์ธํ ์์๋ณด๋ ค๋ฉด ์ด ํํ ๋ฆฌ์ผ์ ํ์ธํ์ธ์.
ToolCallingAgent[[toolcallingagent]]
ToolCallingAgent๋ ๋ง์ ํ๋ ์์ํฌ(OpenAI API)์์ ์ฌ์ฉ๋๋ ์ผ๋ฐ์ ์ธ ํ์์ธ JSON ๋๊ตฌ ํธ์ถ์ ์ถ๋ ฅํ์ฌ, ์ฝ๋ ์คํ ์์ด ๊ตฌ์กฐํ๋ ๋๊ตฌ ์ํธ์์ฉ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
์ฝ๋๋ฅผ ์คํํ์ง ์์ผ๋ฏ๋ก additional_authorized_imports ์์ด๋ CodeAgent์ ๊ฑฐ์ ๋์ผํ ๋ฐฉ์์ผ๋ก ์๋ํฉ๋๋ค:
์์ด์ ํธ ๊ตฌ์ถ[[building-your-agent]]
์ต์ํ์ ์์ด์ ํธ๋ฅผ ์ด๊ธฐํํ๋ ค๋ฉด ์ต์ํ ๋ค์ ๋ ์ธ์๊ฐ ํ์ํฉ๋๋ค:
model, ์์ด์ ํธ๋ฅผ ๊ตฌ๋ํ๋ ํ ์คํธ ์์ฑ ๋ชจ๋ธ - ์์ด์ ํธ๋ ๋จ์ํ LLM๊ณผ ๋ค๋ฅด๋ฉฐ, LLM์ ์์ง์ผ๋ก ์ฌ์ฉํ๋ ์์คํ ์ ๋๋ค. ๋ค์ ์ต์ ์ค ํ๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค:TransformersModel์ ์ฌ์ ์ด๊ธฐํ๋
transformersํ์ดํ๋ผ์ธ์ ๊ฐ์ ธ์transformers๋ฅผ ์ฌ์ฉํ์ฌ ๋ก์ปฌ ๋จธ์ ์์ ์ถ๋ก ์ ์คํํฉ๋๋ค.InferenceClientModel์ ๋ด๋ถ์ ์ผ๋ก
huggingface_hub.InferenceClient๋ฅผ ํ์ฉํ๋ฉฐ Hub์ ๋ชจ๋ ์ถ๋ก ์ ๊ณต์๋ฅผ ์ง์ํฉ๋๋ค: Cerebras, Cohere, Fal, Fireworks, HF-Inference, Hyperbolic, Nebius, Novita, Replicate, SambaNova, Together ๋ฑ.LiteLLMModel์ ๋ง์ฐฌ๊ฐ์ง๋ก LiteLLM์ ํตํด 100๊ฐ ์ด์์ ๋ค์ํ ๋ชจ๋ธ๊ณผ ์ ๊ณต์๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค!
AzureOpenAIModel์ Azure์ ๋ฐฐํฌ๋ OpenAI ๋ชจ๋ธ์ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋๋ค.
AmazonBedrockModel์ AWS์ Amazon Bedrock์ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋๋ค.
MLXModel์ ๋ก์ปฌ ๋จธ์ ์์ ์ถ๋ก ์ ์คํํ๊ธฐ ์ํ mlx-lm ํ์ดํ๋ผ์ธ์ ์์ฑํฉ๋๋ค.
tools, ์์ด์ ํธ๊ฐ ์์ ํด๊ฒฐ์ ์ฌ์ฉํ ์ ์๋ ๋๊ตฌ ๋ชฉ๋ก์ ๋๋ค. ๋น ๋ชฉ๋ก์ผ๋ก ์ค์ ํ ์๋ ์์ต๋๋ค. add_base_tools=True ์ต์ ์ ์ฌ์ฉํ๋ฉด ๊ธฐ๋ณธ ์ ๊ณต๋๋ ๋๊ตฌ๋ค(์น ๊ฒ์, ์ฝ๋ ์คํ, ์์ฑ ์ธ์ ๋ฑ)์tools๋ชฉ๋ก์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
tools์ model ๋ ์ธ์๋ฅผ ์ค์ ํ๋ฉด ์์ด์ ํธ๋ฅผ ์์ฑํ๊ณ ์คํํ ์ ์์ต๋๋ค. ์ถ๋ก ์ ๊ณต์, transformers, ollama, LiteLLM, Azure OpenAI, Amazon Bedrock, ๋๋ mlx-lm์ ํตํด ์ํ๋ LLM์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ชจ๋ ๋ชจ๋ธ ํด๋์ค๋ ์ธ์คํด์คํ ์์ ์ ์ถ๊ฐ ํค์๋ ์ธ์(์: temperature, max_tokens, top_p ๋ฑ)๋ฅผ ์ง์ ์ ๋ฌํ๋ ๊ฒ์ ์ง์ํฉ๋๋ค. ์ด๋ฌํ ๋งค๊ฐ๋ณ์๋ ๊ธฐ๋ณธ ๋ชจ๋ธ์ ์์ฑ ํธ์ถ์ ์๋์ผ๋ก ์ ๋ฌ๋์ด ์ฐฝ์์ฑ, ์๋ต ๊ธธ์ด, ์ํ๋ง ์ ๋ต ๋ฑ์ ๋ชจ๋ธ ๋์์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
์ถ๋ก ์ ๊ณต์๋ ์ธ์ฆ์ ์ํด HF_TOKEN์ด ํ์ํ์ง๋ง, ๋ฌด๋ฃ HF ๊ณ์ ์๋ ์ด๋ฏธ ํฌํจ๋ ํฌ๋ ๋ง์ด ์ ๊ณต๋ฉ๋๋ค. PRO๋ก ์
๊ทธ๋ ์ด๋ํ์ฌ ํฌํจ๋ ํฌ๋ ๋ง์ ๋๋ฆฌ์ธ์.
์ ํ๋ ๋ชจ๋ธ์ ์ ๊ทผํ๊ฑฐ๋ PRO ๊ณ์ ์ผ๋ก ์๋ ์ ํ์ ๋์ด๋ ค๋ฉด ํ๊ฒฝ ๋ณ์ HF_TOKEN์ ์ค์ ํ๊ฑฐ๋ InferenceClientModel ์ด๊ธฐํ ์ token ๋ณ์๋ฅผ ์ ๋ฌํด์ผ ํฉ๋๋ค. ์ค์ ํ์ด์ง์์ ํ ํฐ์ ์ป์ ์ ์์ต๋๋ค.
LiteLLMModel์ ์ฌ์ฉํ๋ ค๋ฉด ํ๊ฒฝ ๋ณ์ ANTHROPIC_API_KEY ๋๋ OPENAI_API_KEY๋ฅผ ์ค์ ํ๊ฑฐ๋ ์ด๊ธฐํ ์ api_key ๋ณ์๋ฅผ ์ ๋ฌํด์ผ ํฉ๋๋ค.
Azure OpenAI์ ์ฐ๊ฒฐํ๋ ค๋ฉด AzureOpenAIModel์ ์ง์ ์ฌ์ฉํ๊ฑฐ๋ LiteLLMModel์ ์ฌ์ฉํ์ฌ ์ ์ ํ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
AzureOpenAIModel์ ์ธ์คํด์ค๋ฅผ ์ด๊ธฐํํ๋ ค๋ฉด ๋ชจ๋ธ ๋ฐฐํฌ ์ด๋ฆ์ ์ ๋ฌํ ๋ค์ azure_endpoint, api_key, api_version ์ธ์๋ฅผ ์ ๋ฌํ๊ฑฐ๋ ํ๊ฒฝ ๋ณ์ AZURE_OPENAI_ENDPOINT, AZURE_OPENAI_API_KEY, OPENAI_API_VERSION์ ์ค์ ํด์ผ ํฉ๋๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ๋ค์๊ณผ ๊ฐ์ด LiteLLMModel์ ๊ตฌ์ฑํ์ฌ Azure OpenAI์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค:
๋ชจ๋ธ ๋ฐฐํฌ ์ด๋ฆ์
model_id๋ก ์ ๋ฌํ๊ณ , ์์azure/๋ฅผ ๋ถ์ฌ์ผ ํฉ๋๋ค.ํ๊ฒฝ ๋ณ์
AZURE_API_VERSION์ ์ค์ ํด์ผ ํฉ๋๋ค.api_base์api_key์ธ์๋ฅผ ์ ๋ฌํ๊ฑฐ๋ ํ๊ฒฝ ๋ณ์AZURE_API_KEY,AZURE_API_BASE๋ฅผ ์ค์ ํฉ๋๋ค.
AmazonBedrockModel ํด๋์ค๋ Amazon Bedrock๊ณผ ์ง์ ์ฐ๋๋์ด API ํธ์ถ๊ณผ ์ธ๋ถ ๊ตฌ์ฑ์ ์ง์ํฉ๋๋ค.
๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ:
๊ณ ๊ธ ๊ตฌ์ฑ:
LiteLLMModel ์ฌ์ฉ:
๋๋ Bedrock ๋ชจ๋ธ๊ณผ ํจ๊ป LiteLLMModel์ ์ฌ์ฉํ ์ ์์ต๋๋ค:
๊ณ ๊ธ ์์ด์ ํธ ๊ตฌ์ฑ[[advanced-agent-configuration]]
์์ด์ ํธ ์ข ๋ฃ ์กฐ๊ฑด ๋ง์ถค ์ค์ [[customizing-agent-termination-conditions]]
๊ธฐ๋ณธ์ ์ผ๋ก ์์ด์ ํธ๋ final_answer ํจ์๋ฅผ ํธ์ถํ๊ฑฐ๋ ์ต๋ ๋จ๊ณ ์์ ๋๋ฌํ ๋๊น์ง ๊ณ์ ์คํ๋ฉ๋๋ค. final_answer_checks ๋งค๊ฐ๋ณ์๋ ์์ด์ ํธ๊ฐ ์คํ์ ์ข
๋ฃํ๋ ์์ ๊ณผ ๋ฐฉ๋ฒ์ ๋ ์ธ๋ฐํ๊ฒ ์ ์ดํ ์ ์๊ฒ ํด์ค๋๋ค:
final_answer_checks ๋งค๊ฐ๋ณ์๋ ๊ฐ๊ฐ ๋ค์๊ณผ ๊ฐ์ ํจ์๋ค์ ๋ชฉ๋ก์ ๋ฐ์ต๋๋ค:
์์ด์ ํธ์ final_answer ๋ฌธ์์ด๊ณผ ์์ด์ ํธ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ต๋๋ค
final_answer๊ฐ ์ ํจํ์ง(True) ์๋์ง(False)๋ฅผ ๋ํ๋ด๋ ๋ถ๋ฆฌ์ธ์ ๋ฐํํฉ๋๋ค
ํจ์ ์ค ํ๋๋ผ๋ False๋ฅผ ๋ฐํํ๋ฉด ์์ด์ ํธ๋ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ๋ก๊ทธ์ ๊ธฐ๋กํ๊ณ ์คํ์ ๊ณ์ํฉ๋๋ค. ์ด ๊ฒ์ฆ ๋ฉ์ปค๋์ฆ์ ๋ค์์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค:
์ถ๋ ฅ ํ์ ์๊ตฌ์ฌํญ ๊ฐ์ (์: ์ํ ๋ฌธ์ ์ ๋ํ ์ซ์ ๋ต๋ณ ๋ณด์ฅ)
๋๋ฉ์ธ๋ณ ๊ฒ์ฆ ๊ท์น ๊ตฌํ
์์ฒด ์ถ๋ ฅ์ ๊ฒ์ฆํ๋ ๋ ๊ฒฌ๊ณ ํ ์์ด์ ํธ ์์ฑ
์์ด์ ํธ ์คํ ๊ฒ์ฌ[[inspecting-an-agent-run]]
์คํ ํ ๋ฌด์จ ์ผ์ด ์ผ์ด๋ฌ๋์ง ํ์ธํ๋ ๋ฐ ์ ์ฉํ ๋ช ๊ฐ์ง ์์ฑ์ด ์์ต๋๋ค:
agent.logs๋ ์์ด์ ํธ์ ์์ธํ ์คํ ๋ก๊ทธ๋ฅผ ์ ์ฅํฉ๋๋ค. ์์ด์ ํธ ์คํ์ ๊ฐ ๋จ๊ณ๋ง๋ค ๋ชจ๋ ์ ๋ณด๊ฐ ๋์ ๋๋ฆฌ ํํ๋ก ์ ์ฅ๋์ดagent.logs์ ์ถ๊ฐ๋ฉ๋๋ค.agent.write_memory_to_messages()๋ ์์ด์ ํธ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ชจ๋ธ์ด ๋ณผ ์ ์๋ ์ฑํ ๋ฉ์์ง ๋ชฉ๋ก์ผ๋ก ๋ณํํฉ๋๋ค. ์ด ๋ฉ์๋๋ ๋ก๊ทธ์ ๊ฐ ๋จ๊ณ๋ฅผ ์ดํด๋ณด๊ณ ์ค์ํ ๋ด์ฉ๋ง ๋ฉ์์ง๋ก ์ ์ฅํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์์คํ ํ๋กฌํํธ์ ์์ ์ ๊ฐ๊ฐ ๋ณ๋ ๋ฉ์์ง๋ก ์ ์ฅํ๊ณ , ๊ฐ ๋จ๊ณ์ LLM ์ถ๋ ฅ๊ณผ ๋๊ตฌ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ๋ณ ๋ฉ์์ง๋ก ์ ์ฅํฉ๋๋ค. ์ ์ฒด์ ์ธ ํ๋ฆ ํ์ ์ด ํ์ํ ๋ ๊ถ์ฅ๋๋ฆฝ๋๋ค. ๋จ, ๋ชจ๋ ๋ก๊ทธ๊ฐ ์ด ๋ฉ์๋๋ฅผ ํตํด ๊ธฐ๋ก๋๋ ๊ฒ์ ์๋๋๋ค.
๋๊ตฌ[[tools]]
๋๊ตฌ๋ ์์ด์ ํธ๊ฐ ์ฌ์ฉํ ์ ์๋ ๋ ๋ฆฝ์ ์ธ ํจ์์ ๋๋ค. LLM์ด ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋จผ์ API๋ฅผ ๊ตฌ์ฑํด์ผํ๋ฉฐ, ๋ํ LLM์๊ฒ ํด๋น ๋๊ตฌ ํธ์ถํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํด์ฃผ์ด์ผํฉ๋๋ค :
์ด๋ฆ
์ค๋ช
์ ๋ ฅ ํ์ ๊ณผ ์ค๋ช
์ถ๋ ฅ ํ์
์๋ฅผ ๋ค์ด PythonInterpreterTool์ ํ์ธํ ์ ์์ต๋๋ค: ์ด๋ฆ, ์ค๋ช
, ์
๋ ฅ ์ค๋ช
, ์ถ๋ ฅ ํ์
, ๊ทธ๋ฆฌ๊ณ ์ก์
์ ์ํํ๋ forward ๋ฉ์๋๊ฐ ์์ต๋๋ค.
์์ด์ ํธ๊ฐ ์ด๊ธฐํ๋ ๋ ๋๊ตฌ ์์ฑ์ด ์์ด์ ํธ์ ์์คํ ํ๋กฌํํธ์ ํฌํจ๋๋ ๋๊ตฌ ์ค๋ช ์ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ์์ด์ ํธ๋ ์ฌ์ฉํ ์ ์๋ ๋๊ตฌ์ ๊ทธ ์ด์ ๋ฅผ ์ ์ ์์ต๋๋ค.
์คํค๋ง ์ ๋ณด: output_schema๊ฐ ์ ์๋ ๋๊ตฌ(๊ตฌ์กฐํ๋ ์ถ๋ ฅ์ ๊ฐ์ง MCP ๋๊ตฌ ๋ฑ)์ ๊ฒฝ์ฐ, CodeAgent ์์คํ
ํ๋กฌํํธ์ ์๋์ผ๋ก JSON ์คํค๋ง ์ ๋ณด๊ฐ ํฌํจ๋ฉ๋๋ค. ์ด๋ ์์ด์ ํธ๊ฐ ๋๊ตฌ ์ถ๋ ฅ์ ์์ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๊ณ ๋ฐ์ดํฐ์ ์ ์ ํ ์ ๊ทผํ ์ ์๋๋ก ๋์์ค๋๋ค.
๊ธฐ๋ณธ ํด๋ฐ์ค[[default-toolbox]]
"toolkit" extra์ ํจ๊ป smolagents๋ฅผ ์ค์นํ๋ฉด ์์ด์ ํธ๋ฅผ ๊ฐํํ๋ ๊ธฐ๋ณธ ํด๋ฐ์ค๊ฐ ํจ๊ป ์ ๊ณต๋๋ฉฐ, add_base_tools=True ์ธ์๋ก ์ด๊ธฐํ ์ ์์ด์ ํธ์ ์ถ๊ฐํ ์ ์์ต๋๋ค:
DuckDuckGo ์น ๊ฒ์*: DuckDuckGo ๋ธ๋ผ์ฐ์ ๋ฅผ ์ฌ์ฉํ์ฌ ์น ๊ฒ์์ ์ํํฉ๋๋ค.
Python ์ฝ๋ ์ธํฐํ๋ฆฌํฐ: ๋ณด์ ํ๊ฒฝ์์ LLM์ด ์์ฑํ Python ์ฝ๋๋ฅผ ์คํํฉ๋๋ค. ์ด ๋๊ตฌ๋ ์ฝ๋ ๊ธฐ๋ฐ ์์ด์ ํธ๊ฐ ์ด๋ฏธ ๊ธฐ๋ณธ์ ์ผ๋ก Python ์ฝ๋๋ฅผ ์คํํ ์ ์์ผ๋ฏ๋ก
add_base_tools=True๋ก ์ด๊ธฐํํ ๋๋ง ToolCallingAgent์ ์ถ๊ฐ๋ฉ๋๋ค.Transcriber: ์ค๋์ค๋ฅผ ํ ์คํธ๋ก ๋ณํํ๋ Whisper-Turbo ๊ธฐ๋ฐ์ ์์ฑ-ํ ์คํธ ํ์ดํ๋ผ์ธ์ ๋๋ค.
์ธ์์ ํจ๊ป ํธ์ถํ์ฌ ๋๊ตฌ๋ฅผ ์๋์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
์๋ก์ด ๋๊ตฌ ์์ฑ[[create-a-new-tool]]
Hugging Face์ ๊ธฐ๋ณธ ๋๊ตฌ๊ฐ ๋ค๋ฃจ์ง ์๋ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ํด ์์ ๋ง์ ๋๊ตฌ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, Hub์์ ์ฃผ์ด์ง ์์ ์ ๋ํด ๊ฐ์ฅ ๋ง์ด ๋ค์ด๋ก๋๋ ๋ชจ๋ธ์ ๋ฐํํ๋ ๋๊ตฌ๋ฅผ ๋ง๋ค์ด๋ณด๊ฒ ์ต๋๋ค.
์๋ ์ฝ๋๋ถํฐ ์์ํ๊ฒ ์ต๋๋ค.
์ด ์ฝ๋๋ ํจ์๋ก ๋ง๋ค๊ณ tool ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ถ๊ฐํ์ฌ ๊ฐ๋จํ ๋๊ตฌ๋ก ๋ณํํ ์ ์์ต๋๋ค. ํ์ง๋ง ์ด๊ฒ์ด ๋๊ตฌ๋ฅผ ๋ง๋๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ์๋๋๋ค. [Tool]์ ํ์ ํด๋์ค๋ก ์ง์ ์ ์ํ๋ ๋ฐฉ๋ฒ๋ ์์ผ๋ฉฐ, ์ด ๋ฐฉ์์ ๋ ๋ง์ ์ ์ฐ์ฑ์ ์ ๊ณตํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ฆฌ์์ค ์ง์ฝ์ ์ธ ํด๋์ค ์์ฑ์ ์ด๊ธฐํํ ๋ ์ ์ฉํฉ๋๋ค.
๋ ์ต์ ๋ชจ๋์์ ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค:
ํจ์์๋ ๋ค์์ด ํ์ํฉ๋๋ค:
๋ช ํํ ์ด๋ฆ. ์ด๋ฆ์ ์์ด์ ํธ๋ฅผ ๊ตฌ๋ํ๋ LLM์ด ์ดํดํ ์ ์๋๋ก ์ด ๋๊ตฌ๊ฐ ๋ฌด์์ ํ๋์ง ์ถฉ๋ถํ ์ค๋ช ์ ์ด์ด์ผ ํฉ๋๋ค. ์ด ๋๊ตฌ๋ ์์ ์ ๋ํด ๊ฐ์ฅ ๋ง์ด ๋ค์ด๋ก๋๋ ๋ชจ๋ธ์ ๋ฐํํ๋ฏ๋ก
model_download_tool์ด๋ผ๊ณ ๋ช ๋ช ํ๊ฒ ์ต๋๋ค.์ ๋ ฅ๊ณผ ์ถ๋ ฅ ๋ชจ๋์ ๋ํ ํ์ ํํธ
๊ฐ ์ธ์๊ฐ ์ค๋ช ๋๋ 'Args:' ๋ถ๋ถ์ ํฌํจํ๋ ์ค๋ช (์ด๋ฒ์๋ ํ์ ํ์ ์์ด, ํ์ ํํธ์์ ๊ฐ์ ธ์ต๋๋ค). ๋๊ตฌ ์ด๋ฆ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก, ์ด ์ค๋ช ์ ์์ด์ ํธ๋ฅผ ๊ตฌ๋ํ๋ LLM์ ์ํ ์ค๋ช ์์ด๋ฏ๋ก ์ํํ ํ์ง ๋ง์ธ์.
์ด ๋ชจ๋ ์์๋ ์ด๊ธฐํ ์ ์์ด์ ํธ์ ์์คํ ํ๋กฌํํธ์ ์๋์ผ๋ก ํฌํจ๋ฉ๋๋ค: ๋ฐ๋ผ์ ์ต๋ํ ๋ช ํํ๊ฒ ๋ง๋ค๋๋ก ๋ ธ๋ ฅํ์ธ์!
[!TIP] ์ด ์ ์ ํ์์
apply_chat_template์์ ์ฌ์ฉ๋๋ ๋๊ตฌ ์คํค๋ง์ ๋์ผํ๋ฉฐ, ์ ์ผํ ์ฐจ์ด์ ์ ์ถ๊ฐ๋tool๋ฐ์ฝ๋ ์ดํฐ์ ๋๋ค: ๋๊ตฌ ์ฌ์ฉ API์ ๋ํด ๋ ์์ธํ ์์๋ณด๋ ค๋ฉด ์ฌ๊ธฐ๋ฅผ ์ฝ์ด๋ณด์ธ์.
๊ทธ๋ฐ ๋ค์ ์์ด์ ํธ๋ฅผ ์ง์ ์ด๊ธฐํํ ์ ์์ต๋๋ค:
ํ์ ํด๋์ค์๋ ๋ค์ ์์ฑ์ด ํ์ํฉ๋๋ค:
๋ช ํํ
name(์ด๋ฆ). ์์ด์ ํธ๋ฅผ ๊ตฌ๋ํ๋ LLM์ด ๋๊ตฌ์ ๊ธฐ๋ฅ์ ์ดํดํ ์ ์๋๋ก ์ด๋ฆ์ ๋ํด ์ถฉ๋ถํ ์ค๋ช ํด์ผ ํฉ๋๋ค. ์ด ๋๊ตฌ๋ ์์ ์ ๋ํด ๊ฐ์ฅ ๋ง์ด ๋ค์ด๋ก๋๋ ๋ชจ๋ธ์ ๋ฐํํ๋ฏ๋กmodel_download_tool์ด๋ผ๊ณ ๋ช ๋ช ํ๊ฒ ์ต๋๋ค.description.name๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก, ์ด ์ค๋ช ์ ์์ด์ ํธ๋ฅผ ๊ตฌ๋ํ๋ LLM์ ์ํ ์ค๋ช ์์ด๋ฏ๋ก ์ํํ ํ์ง ๋ง์ธ์.์ ๋ ฅ ํ์ ๊ณผ ์ค๋ช
์ถ๋ ฅ ํ์ ์ด ๋ชจ๋ ์์ฑ์ ์ด๊ธฐํ ์ ์์ด์ ํธ์ ์์คํ ํ๋กฌํํธ์ ์๋์ผ๋ก ํฌํจ๋ฉ๋๋ค: ๋ฐ๋ผ์ ์ต๋ํ ๋ช ํํ๊ฒ ๋ง๋ค๋๋ก ๋ ธ๋ ฅํ์ธ์!
๊ทธ๋ฐ ๋ค์ ์์ด์ ํธ๋ฅผ ์ง์ ์ด๊ธฐํํ ์ ์์ต๋๋ค:
๋ค์ ๋ก๊ทธ๋ฅผ ์ป์ต๋๋ค:
[!TIP] ๋๊ตฌ์ ๋ํด ๋ ์์ธํ ์์๋ณด๋ ค๋ฉด ์ ์ฉ ํํ ๋ฆฌ์ผ์ ์ฝ์ด๋ณด์ธ์.
๋ฉํฐ ์์ด์ ํธ[[multi-agents]]
๋ฉํฐ ์์ด์ ํธ ์์คํ ์ Microsoft์ ํ๋ ์์ํฌ Autogen๊ณผ ํจ๊ป ๋์ ๋์์ต๋๋ค.
์ด๋ฌํ ํ๋ ์์ํฌ์์๋ ๋จ์ผ ์์ด์ ํธ ๋์ ์ฌ๋ฌ ์์ด์ ํธ๊ฐ ํ๋ ฅํ์ฌ ์์ ์ ํด๊ฒฐํฉ๋๋ค. ์ค์ ๋ก ๋๋ถ๋ถ์ ๋ฒค์น๋งํฌ์์ ๋ ์ฐ์ํ ์ฑ๋ฅ์ ๋ณด์ฌ์ค๋๋ค. ์ฑ๋ฅ์ด ํฅ์๋๋ ์ด์ ๋ ๊ฐ๋ ์ ์ผ๋ก ๋จ์ํฉ๋๋ค. ๋ง์ ์์ ์์ ๋ชจ๋ ๊ธฐ๋ฅ์ ๋ด๋นํ๋ ๋ฒ์ฉ ์์คํ ๋ณด๋ค๋ ํน์ ํ์ ์์ ์ ํนํ๋ ์ ๋ฌธ ๋จ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ํจ๊ณผ์ ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ์๋ก ๋ค๋ฅธ ๋๊ตฌ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ์ง ์์ด์ ํธ๋ค์ ํ์ฉํ๋ฉด ํจ์จ์ ์ธ ์ญํ ๋ถ๋ด์ด ๊ฐ๋ฅํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์น ๊ฒ์ ์์ด์ ํธ๊ฐ ์์งํ ๋ชจ๋ ์นํ์ด์ง ๋ด์ฉ์ ์ฝ๋ ์์ฑ ์์ด์ ํธ์ ๋ฉ๋ชจ๋ฆฌ์๊น์ง ์ ์ฅํ ํ์๊ฐ ์์๊น์? ๊ฐ์์ ์ญํ ์ ๋ง๊ฒ ๋ถ๋ฆฌํด์ ์ด์ํ๋ ๊ฒ์ด ํจ์ฌ ํจ์จ์ ์ ๋๋ค.
smolagents๋ก ๊ณ์ธต์ ๋ฉํฐ ์์ด์ ํธ ์์คํ
์ ์ฝ๊ฒ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
์ด๋ฅผ ์ํด์๋ ์์ด์ ํธ์ name๊ณผ description ์์ฑ๋ง ์์ผ๋ฉด ๋๋ฉฐ, ์ด๋ ๋๊ตฌ์ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ด๋ฆฌ์ ์์ด์ ํธ์ ์์คํ
ํ๋กฌํํธ์ ํฌํจ๋์ด ๊ด๋ฆฌ๋๋ ์์ด์ ํธ๋ฅผ ํธ์ถํ๋ ๋ฐฉ๋ฒ์ ์๋ ค์ค๋๋ค. ๊ทธ๋ฐ ๋ค์ ๊ด๋ฆฌ์ ์์ด์ ํธ๋ฅผ ์ด๊ธฐํํ ๋ managed_agents ๋งค๊ฐ๋ณ์์ ์ด ๊ด๋ฆฌ๋๋ ์์ด์ ํธ๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค.
๋ค์์ ๋ค์ดํฐ๋ธ WebSearchTool์ ์ฌ์ฉํ์ฌ ํน์ ์น ๊ฒ์ ์์ด์ ํธ๋ฅผ ๊ด๋ฆฌํ๋ ์์ด์ ํธ๋ฅผ ๋ง๋๋ ์์์
๋๋ค:
[!TIP] ํจ์จ์ ์ธ ๋ฉํฐ ์์ด์ ํธ ๊ตฌํ์ ์ฌํ ์์ ๋ฅผ ๋ณด๋ ค๋ฉด ๋ฉํฐ ์์ด์ ํธ ์์คํ ์ GAIA ๋ฆฌ๋๋ณด๋ ์์๊ถ์ผ๋ก ๋์ด์ฌ๋ฆฐ ๋ฐฉ๋ฒ์ ํ์ธํ์ธ์.
์์ด์ ํธ์ ๋ํํ๊ณ ๋ฉ์ง Gradio ์ธํฐํ์ด์ค์์ ๊ทธ ์ฌ๊ณ ๊ณผ์ ์ ์๊ฐํํ๊ธฐ[[talk-with-your-agent-and-visualize-its-thoughts-in-a-cool-gradio-interface]]
GradioUI๋ฅผ ์ฌ์ฉํ์ฌ ์์ด์ ํธ์ ๋ํํ์ผ๋ก ์์
์ ์ ์ถํ๊ณ ๊ทธ ์ฌ๊ณ ์ ์คํ ๊ณผ์ ์ ๊ด์ฐฐํ ์ ์์ต๋๋ค. ๋ค์์ ์์์
๋๋ค:
๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉ์๊ฐ ์๋ก์ด ์์ฒญ์ ์
๋ ฅํ๋ฉด ์์ด์ ํธ๋ agent.run(user_request, reset=False)๋ก ์คํ๋ฉ๋๋ค. reset=False ํ๋๊ทธ๋ ์ด ์๋ก์ด ์์
์ ์คํํ๊ธฐ ์ ์ ์์ด์ ํธ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ๋ฌ์๋์ง ์์์ ์๋ฏธํ๋ฉฐ, ์ด๋ฅผ ํตํด ๋ํ๊ฐ ๊ณ์๋ ์ ์์ต๋๋ค.
๋ค๋ฅธ ์์ด์ ํธ ์ ํ๋ฆฌ์ผ์ด์
์์๋ ์ด reset=False ์ธ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ํ๋ฅผ ๊ณ์ํ ์ ์์ต๋๋ค.
Gradio UI์์ ์ฌ์ฉ์๊ฐ ์คํ ์ค์ธ ์์ด์ ํธ๋ฅผ ์ค๋จํ ์ ์๋๋ก ํ๋ ค๋ฉด agent.interrupt() ๋ฉ์๋๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ ๋ฒํผ์ผ๋ก ์ด๋ฅผ ์ํํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํ์ฌ ๋จ๊ณ๊ฐ ๋๋ ๋ ์์ด์ ํธ๊ฐ ์ค์ง๋๊ณ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ค์ ๋จ๊ณ[[next-steps]]
๋ง์ง๋ง์ผ๋ก ์์ด์ ํธ๋ฅผ ํ์์ ๋ง๊ฒ ๊ตฌ์ฑํ๋ค๋ฉด Hub์ ๊ณต์ ํ ์ ์์ต๋๋ค!
๋ง์ฐฌ๊ฐ์ง๋ก, ๋๊ตฌ์ ์ฝ๋๋ฅผ ์ ๋ขฐํ๋ค๋ฉด Hub์ ์ ๋ก๋๋ ์์ด์ ํธ๋ฅผ ๋ถ๋ฌ์ค๋ ค๋ฉด ๋ค์์ ์ฌ์ฉํ์ธ์:
๋ ์์ธํ ํ์ฉ๋ฒ์ ์ํ๋ค๋ฉด ๋ค์ ํํ ๋ฆฌ์ผ๋ค์ ์ฐธ๊ณ ํ์ธ์: