# smolagents를 써야 하는 이유

이 모듈에서는 [smolagents](https://huggingface.co/docs/smolagents/en/index)를 사용할 때의 장단점을 살펴보고, 여러분의 필요에 맞는 프레임워크인지 판단할 수 있도록 도와드립니다.

## `smolagents`란?

`smolagents`는 간단하면서도 강력한 AI 에이전트 프레임워크입니다. LLM이 검색, 이미지 생성 등 실제 세계와 상호작용할 수 있는 _에이전시(agency)_ 를 제공합니다.

unit 1에서 배운 것처럼, AI 에이전트는 LLM이 **'관찰(observations)'**을 바탕으로 **'생각(thoughts)'**을 생성해 **'행동(actions)'**을 수행하는 프로그램입니다. smolagents에서 이것이 어떻게 구현되는지 살펴봅시다.

### `smolagents`의 주요 장점
- **단순함:** 최소한의 코드 복잡성과 추상화로 프레임워크를 쉽게 이해하고, 도입 및 확장할 수 있습니다.
- **유연한 LLM 지원:** Hugging Face 도구 및 외부 API와의 통합을 통해 어떤 LLM과도 연동할 수 있습니다.
- **코드 우선 접근:** 액션을 직접 코드로 작성하는 Code Agent를 1급 시민으로 지원하여, 파싱 없이 도구 호출을 단순화합니다.
- **HF Hub 통합:** Hugging Face Hub와의 원활한 통합으로 Gradio Spaces를 도구로 활용할 수 있습니다.

### smolagents를 언제 사용해야 할까?

이러한 장점을 고려할 때, 다른 프레임워크 대신 smolagents를 사용해야 하는 경우는 언제일까요?

smolagents는 다음과 같은 상황에 이상적입니다:
- **가볍고 최소한의 솔루션**이 필요할 때
- **복잡한 설정 없이 빠르게 실험**하고 싶을 때
- **애플리케이션 로직이 단순**할 때

### 코드 vs. JSON 액션
다른 프레임워크에서는 에이전트가 액션을 JSON으로 작성하는 반면, `smolagents`는 **코드 기반 도구 호출**에 집중하여 실행 과정을 단순화합니다. 도구 호출을 위한 코드를 직접 생성하므로, JSON을 파싱해 코드를 만드는 과정이 필요 없습니다. 즉, 출력된 코드를 바로 실행할 수 있습니다.

아래 다이어그램은 이 차이를 보여줍니다:

![Code vs. JSON actions](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/code_vs_json_actions.png)

Code vs JSON 액션의 차이를 다시 보고 싶다면 [Unit 1의 액션 섹션](https://huggingface.co/learn/agents-course/unit1/actions#actions-enabling-the-agent-to-engage-with-its-environment)을 참고하세요.

### smolagents의 에이전트 유형

smolagents의 에이전트는 **다단계 에이전트(multi-step agent)**로 동작합니다.

각 [`MultiStepAgent`](https://huggingface.co/docs/smolagents/main/en/reference/agents#smolagents.MultiStepAgent)는 다음을 수행합니다:
- 한 번의 생각(thought)
- 한 번의 도구 호출 및 실행

주요 에이전트 타입으로 **[CodeAgent](https://huggingface.co/docs/smolagents/main/en/reference/agents#smolagents.CodeAgent)**를 사용하며, 도구 호출을 JSON으로 작성하는 **[ToolCallingAgent](https://huggingface.co/docs/smolagents/main/en/reference/agents#smolagents.ToolCallingAgent)**도 지원합니다.

각 에이전트 타입은 이후 섹션에서 자세히 다룹니다.

 
smolagents에서는 도구를 @tool 데코레이터로 감싼 Python 함수 또는 Tool 클래스로 정의합니다.

### smolagents의 모델 통합
`smolagents`는 유연한 LLM 통합을 지원하여, [특정 기준](https://huggingface.co/docs/smolagents/main/en/reference/models)을 충족하는 어떤 호출 가능한 모델도 사용할 수 있습니다. 프레임워크는 모델 연결을 단순화하는 여러 사전 정의 클래스를 제공합니다:

- **[TransformersModel](https://huggingface.co/docs/smolagents/main/en/reference/models#smolagents.TransformersModel):** 로컬 `transformers` 파이프라인을 구현해 손쉬운 통합을 지원합니다.
- **[InferenceClientModel](https://huggingface.co/docs/smolagents/main/en/reference/models#smolagents.InferenceClientModel):** [Hugging Face 인프라](https://huggingface.co/docs/api-inference/index) 또는 다양한 [서드파티 추론 제공업체](https://huggingface.co/docs/huggingface_hub/main/en/guides/inference#supported-providers-and-tasks)를 통한 [서버리스 추론](https://huggingface.co/docs/huggingface_hub/main/en/guides/inference) 호출을 지원합니다.
- **[LiteLLMModel](https://huggingface.co/docs/smolagents/main/en/reference/models#smolagents.LiteLLMModel):** [LiteLLM](https://www.litellm.ai/)을 활용한 경량 모델 연동을 지원합니다.
- **[OpenAIServerModel](https://huggingface.co/docs/smolagents/main/en/reference/models#smolagents.OpenAIServerModel):** OpenAI API 인터페이스를 제공하는 모든 서비스와 연결할 수 있습니다.
- **[AzureOpenAIServerModel](https://huggingface.co/docs/smolagents/main/en/reference/models#smolagents.AzureOpenAIServerModel):** Azure OpenAI 배포와의 통합을 지원합니다.

이러한 유연성 덕분에 개발자는 각자의 용도에 가장 적합한 모델과 서비스를 선택할 수 있으며, 실험도 쉽게 할 수 있습니다.

이제 smolagents를 왜, 언제 써야 하는지 이해했으니, 이 강력한 라이브러리를 더 깊이 탐구해봅시다!

## 참고 자료

- [smolagents 블로그](https://huggingface.co/blog/smolagents) - smolagents와 코드 상호작용 소개

