#
smolagents를 써야 하는 이유

이 모듈에서는 smolagents를 사용할 때의 장단점을 살펴보고, 여러분의 필요에 맞는 프레임워크인지 판단할 수 있도록 도와드립니다.

##
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 액션의 차이를 다시 보고 싶다면 Unit 1의 액션 섹션을 참고하세요.

###
smolagents의 에이전트 유형

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

각 `MultiStepAgent`는 다음을 수행합니다:

- 한 번의 생각(thought)
- 한 번의 도구 호출 및 실행

주요 에이전트 타입으로 CodeAgent를 사용하며, 도구 호출을 JSON으로 작성하는 ToolCallingAgent도 지원합니다.

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

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

###
smolagents의 모델 통합

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

- TransformersModel: 로컬 `transformers` 파이프라인을 구현해 손쉬운 통합을 지원합니다.
- InferenceClientModel: Hugging Face 인프라 또는 다양한 서드파티 추론 제공업체를 통한 서버리스 추론 호출을 지원합니다.
- LiteLLMModel: LiteLLM을 활용한 경량 모델 연동을 지원합니다.
- OpenAIServerModel: OpenAI API 인터페이스를 제공하는 모든 서비스와 연결할 수 있습니다.
- AzureOpenAIServerModel: Azure OpenAI 배포와의 통합을 지원합니다.

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

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

##
참고 자료

- smolagents 블로그 - smolagents와 코드 상호작용 소개

Update on GitHub