에이전트 둘러보기

에이전트 둘러보기 (Guided tour)

이 둘러보기에서는 에이전트를 어떻게 만들고, 실행하고, 사용 사례에 맞게 커스터마이즈하는지 배워요.

출처: 공식문서 - Agents Guided tour

에이전트 유형 고르기: CodeAgent vs ToolCallingAgent

smolagents는 두 에이전트 클래스를 제공해요. CodeAgentToolCallingAgent는 에이전트가 도구와 상호작용하는 두 가지 다른 패러다임을 나타냅니다. 핵심 차이는 동작을 어떻게 명시·실행하느냐 — 코드 생성인가 구조화된 도구 호출인가 — 에 있어요.

CodeAgent

  • 도구 호출을 Python 코드 스니펫으로 생성
  • 코드는 로컬(잠재적으로 안전하지 않음) 또는 보안 샌드박스에서 실행
  • 도구는 (바인딩을 통해) Python 함수로 노출
  • 도구 호출 예시:
result = search_docs("What is the capital of France?")
print(result)

장점:

  • 표현력이 높음: 복잡한 로직·제어 흐름을 지원하고 도구를 결합·루프·변환·추론 가능
  • 유연함: 모든 가능한 동작을 미리 정의할 필요 없이 새 동작/도구를 동적으로 생성
  • 창발적 추론: 다단계 문제·동적 로직에 이상적

한계:

  • 오류 위험: 문법 오류·예외를 처리해야 함
  • 예측 가능성 낮음: 예상치 못하거나 안전하지 않은 출력에 더 취약
  • 보안 실행 환경 필요

ToolCallingAgent

  • 도구 호출을 구조화된 JSON으로 작성
  • 많은 프레임워크(OpenAI API)에서 쓰는 일반적인 형식으로, 코드 실행 없이 구조화된 도구 상호작용을 지원
  • 도구는 JSON 스키마(이름, 설명, 파라미터 타입 등)로 정의
  • 도구 호출 예시:
{
  "tool_call": {
    "name": "search_docs",
    "arguments": {
      "query": "What is the capital of France?"
    }
  }
}

장점:

  • 신뢰성: 할루시네이션에 덜 취약, 출력이 구조화·검증됨
  • 안전: 인자를 엄격히 검증해 임의 코드 실행 위험 없음
  • 상호운용성: 외부 API·서비스에 매핑하기 쉬움

한계:

  • 표현력 낮음: 결과를 동적으로 결합·변환하거나 복잡한 로직·제어 흐름 수행 어려움
  • 유연성 낮음: 모든 가능한 동작을 미리 정의해야 하고 미리 정의된 도구로 제한
  • 코드 합성 없음: 도구 기능에 제한

언제 어떤 에이전트 유형을?

CodeAgent를 쓸 때:

  • 추론·체이닝·동적 구성이 필요할 때
  • 도구가 결합 가능한 함수일 때(예: 파싱 + 수학 + 조회)
  • 에이전트가 문제 해결사나 프로그래머일 때

ToolCallingAgent를 쓸 때:

  • 단순·원자적 도구가 있을 때(예: API 호출, 문서 가져오기)
  • 높은 신뢰성과 명확한 검증을 원할 때
  • 에이전트가 디스패처나 컨트롤러 역할일 때

CodeAgent

CodeAgent는 동작을 수행하고 작업을 해결하기 위해 Python 코드 스니펫을 생성해요. 기본적으로 Python 코드 실행은 로컬 환경에서 이뤄지는데, 호출할 수 있는 함수는 당신이 제공한 도구(특히 Hugging Face 도구뿐이라면)와 printfunction 같은 미리 정의된 안전 함수뿐이라 안전합니다.

더 알아보기 (Learn more)