Introducing smolagents: simple agents that write actions in code.
Quick Summary
smolagents는 언어 모델이 외부 도구를 코드로 조합·실행하도록 지원해, 복잡한 다단계 에이전트 워크플로를 단순하게 구축하는 라이브러리다.
🖼️ 인포그래픽
🖼️ 4컷 인포그래픽
💡 한 줄 요약
smolagents는 언어 모델이 외부 도구를 코드로 조합·실행하도록 지원해, 복잡한 다단계 에이전트 워크플로를 단순하게 구축하는 라이브러리다.
📌 핵심 요약
- 에이전트는 언어 모델의 출력이 프로그램의 흐름과 다음 행동을 통제하는 시스템이며, 에이전시의 정도는 단순 처리부터 도구 호출, 반복 실행, 다중 에이전트까지 연속적인 스펙트럼으로 볼 수 있다.
- 미리 정한 절차만으로 안정적으로 해결할 수 있는 문제에는 에이전트를 쓰지 않는 편이 낫지만, 여러 조건과 외부 정보가 얽혀 실행 경로를 사전에 결정하기 어려운 문제에는 다단계 에이전트가 유용하다.
- smolagents의 CodeAgent는 도구 이름과 인자를 JSON으로 나열하는 대신 행동을 코드로 작성하며, 이를 통해 조합성, 객체 관리, 표현 범위, 기존 코드 학습 데이터 활용 측면에서 이점을 얻는다.
- 에이전트를 만들 때 필요한 핵심 요소는 사용할 도구 목록과 실행을 이끌 언어 모델이며, 타입 힌트와 문서 문자열이 있는 함수를 @tool 데코레이터로 간단히 도구화할 수 있다.
- smolagents는 개방형·상용 모델을 폭넓게 지원하고 도구 공유 기능과 샌드박스 실행을 제공하며, 제시된 벤치마크에서는 코드 기반 에이전트와 개방형 모델의 경쟁력을 확인했다고 설명한다.
🧩 주요 포인트
- 에이전트는 언어 모델의 출력이 프로그램의 흐름과 다음 행동을 통제하는 시스템이며, 에이전시의 정도는 단순 처리부터 도구 호출, 반복 실행, 다중 에이전트까지 연속적인 스펙트럼으로 볼 수 있다.
- 미리 정한 절차만으로 안정적으로 해결할 수 있는 문제에는 에이전트를 쓰지 않는 편이 낫지만, 여러 조건과 외부 정보가 얽혀 실행 경로를 사전에 결정하기 어려운 문제에는 다단계 에이전트가 유용하다.
- smolagents의 CodeAgent는 도구 이름과 인자를 JSON으로 나열하는 대신 행동을 코드로 작성하며, 이를 통해 조합성, 객체 관리, 표현 범위, 기존 코드 학습 데이터 활용 측면에서 이점을 얻는다.
- 에이전트를 만들 때 필요한 핵심 요소는 사용할 도구 목록과 실행을 이끌 언어 모델이며, 타입 힌트와 문서 문자열이 있는 함수를 @tool 데코레이터로 간단히 도구화할 수 있다.
- smolagents는 개방형·상용 모델을 폭넓게 지원하고 도구 공유 기능과 샌드박스 실행을 제공하며, 제시된 벤치마크에서는 코드 기반 에이전트와 개방형 모델의 경쟁력을 확인했다고 설명한다.
🧠 상세 정리
1. 언어 모델에 현실 세계의 행동 능력이 필요한 이유
글은 효율적인 인공지능 시스템이 언어 모델에 외부 세계로 통하는 수단을 제공해야 한다는 문제의식에서 출발한다. 언어 모델이 검색 도구를 호출해 외부 정보를 얻거나 특정 프로그램을 조작해 과제를 해결하려면, 단순히 문장을 생성하는 것을 넘어 실제 워크플로에 영향을 미칠 수 있어야 한다. 이런 통로를 제공하는 것이 에이전트 프로그램이며, 글에서는 에이전트를 ‘언어 모델의 출력이 워크플로를 통제하는 프로그램’으로 정의한다. 따라서 핵심은 특정 제품이나 형식이 아니라 언어 모델의 판단이 실행 코드와 다음 단계에 얼마나 직접적으로 반영되는지에 있다. smolagents는 이러한 에이전트 기능을 복잡한 프레임워크 없이 간결한 구조로 사용할 수 있게 하려는 라이브러리로 소개된다.
2. 에이전시는 이분법이 아니라 연속적인 단계다
글은 어떤 시스템을 에이전트인지 아닌지 두 부류로 나누기보다, 언어 모델에 부여된 통제력의 크기에 따라 에이전시가 연속적으로 달라진다고 설명한다. 가장 낮은 단계에서는 모델의 출력이 프로그램 흐름에 영향을 주지 않고 단순 처리 대상으로만 사용되며, 그다음 단계에서는 모델의 판단이 두 경로 중 하나를 고르는 라우터 역할을 한다. 더 높은 단계에서는 모델이 실행할 함수와 인자를 선택하고, 다단계 에이전트에서는 반복 여부와 다음 행동까지 결정한다. 나아가 하나의 에이전트 워크플로가 다른 에이전트를 시작하는 다중 에이전트 구조도 가능하다. 이 구분은 에이전트 도입 여부뿐 아니라 실제 문제에 어느 정도의 자율성과 유연성이 필요한지를 판단하는 기준을 제공한다.
3. 다단계 에이전트의 반복 실행 구조
다단계 에이전트는 사용자 과제를 메모리에 넣고, 언어 모델이 계속 진행해야 한다고 판단하는 동안 새로운 행동을 선택해 실행하는 반복문으로 표현된다. 각 단계에서 모델은 다음 행동을 만들고, 시스템은 그 행동을 실행한 뒤 관찰 결과를 메모리에 추가한다. 이후 모델은 누적된 행동과 관찰을 바탕으로 다음 단계를 결정하며, 충분히 만족스러운 상태에 도달했다고 판단하면 실행을 끝낸다. 여기서 행동은 미리 등록된 함수 형태의 도구를 호출하는 작업일 수 있지만, 행동의 선택 순서와 반복 횟수는 문제 해결 과정에서 동적으로 결정된다. 이러한 구조 덕분에 한 번의 응답만으로 풀기 어려운 문제도 정보 수집, 계산, 결과 검토를 이어 가며 단계적으로 처리할 수 있다.
4. 에이전트를 써야 할 때와 피해야 할 때
글은 에이전트가 유용하다고 해서 모든 애플리케이션에 적용해야 하는 것은 아니며, 오히려 필요하지 않은 경우가 많다고 경고한다. 요청 유형과 처리 절차를 미리 정확하게 나눌 수 있다면 일반 코드로 결정론적 흐름을 구현하는 편이 단순하고 견고하며, 예측하기 어려운 언어 모델이 오류를 끼워 넣을 위험도 줄어든다. 서핑 여행 사이트에서 여행 정보를 찾는 요청은 지식 검색으로, 영업 상담 요청은 문의 양식으로 보내는 식의 두 가지 고정 절차가 모든 요청을 처리할 수 있다면 에이전트가 필요하지 않다. 반면 일정 변경 가능성, 장비 운송, 특정 날짜의 활동, 취소 보험처럼 여러 조건이 한 요청에 얽히면 사전에 정의한 분기만으로 처리하기 어려워진다. 글은 고정 워크플로가 반복적으로 실패할 만큼 현실의 변수가 많을 때 비로소 에이전트의 유연성을 도입하라고 권한다.
5. 복잡한 현실 과제에서 도구를 조합하는 방식
고정된 분기로 다루기 어려운 여행 요청을 해결하려면 에이전트가 여러 외부 정보원과 업무 시스템을 상황에 맞게 조합해야 한다. 글의 예에서는 날씨를 확인하는 API, 이동 거리를 계산하는 지도 API, 직원의 가용 시간을 보여 주는 대시보드, 내부 지식 기반을 검색하는 RAG 시스템을 하나의 다단계 에이전트에 제공할 수 있다고 설명한다. 에이전트는 모든 도구를 무조건 실행하는 것이 아니라 현재까지 얻은 관찰을 바탕으로 필요한 도구와 다음 순서를 선택한다. 이는 복잡성을 수많은 if/else 문으로 미리 열거하는 방식과 달리, 실행 중 드러나는 조건에 따라 워크플로를 구성하는 접근이다. 글은 합계 계산이나 최단 경로 탐색처럼 좁고 명확한 문제를 넘어, 사전에 모든 절차를 정의하기 어려운 현실 과제를 프로그램으로 다룰 수 있다는 점을 에이전트 시스템의 의미로 제시한다.
6. JSON 도구 호출보다 코드 행동을 강조하는 이유
일반적인 도구 호출 방식은 언어 모델이 사용할 도구 이름과 인자를 JSON 또는 유사한 텍스트 형식으로 출력하고, 프로그램이 이를 해석해 해당 도구를 실행하는 구조다. smolagents의 CodeAgent는 이와 달리 각 단계의 행동을 코드로 작성하도록 하며, 글은 여러 연구 결과를 근거로 코드 기반 행동이 더 나은 성능을 보인다고 설명한다. 코드는 여러 행동을 중첩하거나 함수로 묶어 재사용하기 쉬워 조합성이 높고, 이미지 생성 결과 같은 실행 중 객체를 변수에 저장하고 후속 단계에 전달하기도 자연스럽다. 또한 컴퓨터가 수행할 수 있는 일반적인 작업을 폭넓게 표현하도록 설계된 언어이므로 JSON 조각보다 표현력이 크다. 품질 높은 코드가 언어 모델의 학습 데이터에 이미 풍부하게 포함되어 있다는 점도 모델이 코드 행동을 생성하는 데 유리한 배경으로 제시된다.
7. smolagents의 설계 목표와 지원 범위
smolagents는 에이전트의 핵심 로직을 수천 줄 정도의 코드에 담고, 원시 코드 위에 놓이는 추상화를 최소화해 구조를 이해하고 사용하기 쉽게 만드는 것을 목표로 한다. 중심 기능은 행동을 코드로 작성하는 CodeAgent에 대한 일급 지원이며, 코드 실행의 보안을 위해 E2B를 통한 샌드박스 환경도 지원한다. 코드 방식만 강제하는 것은 아니어서 도구 호출을 JSON이나 텍스트 형태로 작성하는 표준 ToolCallingAgent도 함께 제공한다. 사용자는 Hub를 통해 도구를 공유하거나 불러올 수 있고, Hub 또는 추론 API에서 제공되는 모델뿐 아니라 LiteLLM 연동을 통해 여러 외부 언어 모델도 선택할 수 있다. 이 라이브러리는 transformers.agents의 후속으로 소개되며, 앞으로 기존 transformers.agents가 폐기되는 과정에서 이를 대체할 예정이다.
8. 도구 제작 사례와 개방형 모델의 가능성
에이전트를 구축하려면 실행 가능한 도구 목록과 에이전트의 판단을 담당할 언어 모델이라는 두 가지 요소가 최소한 필요하다. 글은 입력과 출력의 타입 힌트 및 인자 설명을 담은 문서 문자열이 있는 함수를 작성한 뒤 @tool 데코레이터를 붙여 사용자 정의 도구로 만드는 방식을 보여 준다. Google Maps에서 두 장소 사이의 이동 시간을 가져오는 함수를 CodeAgent에 제공한 사례에서는, 에이전트가 자전거 이동 시간 수집과 계산을 여러 단계에 걸쳐 수행해 파리의 하루 여행 일정을 구성한다. 작성한 도구는 Hub에 올려 공유할 수 있으며, 내부적으로는 공통 기반 구조인 Tool 클래스를 상속하는 형태로 내보내진다. 마지막으로 글은 여러 모델을 대상으로 한 벤치마크에서 코드 에이전트와 도구 호출 에이전트를 비교했으며 코드 방식이 더 나은 결과를 보였다고 밝히고, 개방형 모델도 우수한 폐쇄형 모델과 경쟁할 수 있는 수준에 도달했다고 평가한다.
🧾 핵심 주장 / 시사점
- 에이전트 도입의 핵심 판단 기준은 문제의 복잡성 자체가 아니라, 실행 경로를 사전에 안정적으로 정의할 수 있는지 여부다.
- 코드 기반 행동의 장점은 단순한 문법 선호가 아니라 여러 도구의 중첩·재사용, 중간 결과의 저장, 반복 계산을 하나의 실행 표현 안에서 자연스럽게 처리할 수 있다는 데 있다.
- smolagents는 최소한의 추상화, 다양한 모델 지원, 함수 기반 도구 제작과 공유를 결합해 에이전트 실험부터 실제 다단계 워크플로 구성까지의 진입 장벽을 낮추려 한다.
✅ 액션 아이템
- 사전 절차만으로 해결되지 않고 외부 조건이 얽힌 다단계 의사결정 문제에만 에이전트 적용 대상을 제한해 실행 범위를 정한다.
- CodeAgent의 코드 기반 행동 조합을 기존 JSON 방식과 비교해 조합성, 객체관리, 표현 범위 이점을 검증한다.
- 도구 목록과 실행을 이끌 모델을 먼저 선정하고, 타입 힌트·docstring을 갖춘 함수를 @tool로 도구화해 호출 인터페이스를 확정한다.
❓ 열린 질문
- 다단계 에이전트가 필요할 만큼 경로 불확실성이 높은 작업을 구분하는 객관적 트리거는 무엇인가?
- 코드 기반 행동 정의가 샘플 코드 학습 데이터 재사용성과 유지보수 효율에 주는 이점은 어떤 지표로 판별할 것인가?
- 개방형·상용 모델을 혼용할 때 벤치마크 성능을 운영 제약으로 전환하기 위한 비용·성능·안정성 판단 기준은 어디에 두어야 하는가?