Hugging Face CodeAgents + Structure: 구조화된 생성으로 에이전트 신뢰성 향상
Hugging Face는 코드 기반 행동의 표현력과 구조화된 생성의 신뢰성을 결합하여 AI 에이전트의 신뢰성을 향상시키는 방법을 도입했습니다. CodeAgents가 내부 추론(생각)과 실행 가능한 Python 코드를 구조화된 JSON 블롭 안에서 모두 생성하도록 강제함으로써, 에이전트는 기존의 도구 호출 방식이나 표준 코드 생성 접근법에 비해 여러 벤치마크에서 훨씬 높은 성공률을 달성합니다.
에이전트 행동의 진화
AI 에이전트는 일반적으로 다음 세 가지 주요 패러다임 중 하나를 통해 행동을 실행합니다:
- Traditional JSON Agents: 이 에이전트들은 미리 정의된 도구 중에서 선택하고 JSON 형식의 호출을 생성합니다. 신뢰성은 높지만 조합성이 부족하고 미리 정의된 행동 집합에 제한되어 있어, 여러 호출에 걸쳐 중간 상태 관리를 필요로 하는 작업을 수행하는 데 어려움을 겪습니다.
- Code Agents: 이 에이전트들은 실행 가능한 Python 코드를 직접 작성하여 루프, 함수, 조건문 내에서 도구를 호출할 수 있게 합니다. 이는 무한한 유연성과 상태 유지 능력을 제공하지만, 마크다운 블록에서 생성된 코드를 파싱하는 과정에서 오류가 발생하기 쉽습니다.
- Structured CodeAgents: 이 접근 방식은 추론을 위한
thoughts필드와 실행을 위한code필드를 포함하는 JSON 객체 생성을 강제합니다. 이는 구조화된 파싱의 신뢰성과 Python 코드의 완전한 표현력을 결합합니다.
벤치마크 결과 및 성능 향상
GAIA, MATH, SimpleQA, Frames 등 다양한 벤치마크에서 테스트한 결과, 코드 행동과 구조화된 생성의 결합이 능력 있는 모델에서 일관되게 성능을 향상시키는 것으로 나타났습니다. 평균적으로 구조화된 접근 방식은 일반 CodeAgents보다 2~7 퍼센트 포인트 더 높은 성능을 보였습니다.
모델군별 주요 관찰 결과는 다음과 같습니다:
- OpenAI models: 특히 추론 중심 작업에서 가장 큰 개선을 보였습니다.
- Claude models: 강력한 결과를 보였으며, 특히 Claude 3.7 Sonnet이 매우 우수한 성능을 나타냈습니다.
- Qwen models: 전반적으로 개선되었지만, 작은 모델에서는 "구조 세금" 현상이 나타나기 시작했습니다.
구조화된 생성이 성공률을 높이는 이유
파싱 문제 제거
마크다운 기반 코드 추출에서 발생하는 파싱 오류는 에이전트 실패로 이어지는 경우가 많습니다. 15,724개의 에이전트 트레이스를 분석한 결과, 2.4%의 트레이스가 첫 호출에서 파싱 오류를 겪은 것으로 나타났습니다. 이러한 오류의 영향은 심각합니다:
- 파싱 오류가 없는 트레이스: 성공률 51.3%.
- 파싱 오류가 있는 트레이스: 성공률 42.3%.
파싱 오류가 없는 에이전트 트레이스는 오류가 있는 경우보다 21.3% 더 높은 성공률을 보입니다. 또한 파싱 오류는 문제 해결에 필요한 평균 단계 수를 3.18에서 4.63으로 증가시킵니다.
강제된 추론 과정
thoughts 필드를 요구함으로써, 에이전트는 코드를 실행하기 전에 자신의 추론을 명확히 표현하도록 강제됩니다. 이는 보다 체계적인 계획을 가능하게 하고, 에이전트가 과정 초기에 논리적 오류를 포착하도록 돕습니다.
"구조 세금"과 모델 능력
구조화된 생성이 항상 유리한 것은 아닙니다. 모델이 인스트럭션을 따르고 JSON 사전 학습이 충분히 이루어져야 인지 부하를 감당할 수 있는 능력 임계점이 존재합니다.
작은 모델(예: mistralai/Mistral-7B-Instruct-v0.3)은 "구조 세금"을 겪을 수 있는데, JSON 구문을 유지하면서 동시에 Python 코드를 작성하는 부담이 구문 오류가 있는 코드(예: 잘못된 문자열이나 여분의 쉼표)를 초래하여 즉각적인 SyntaxError 실패로 이어집니다.
구현 및 사용법
smolagents 라이브러리 사용자는 CodeAgent를 초기화할 때 use_structured_outputs_internally=True를 설정하여 구조화된 출력을 활성화할 수 있습니다.
권장 사용 사례
구조화된 CodeAgents를 사용할 때:
- 능력 있는 모델(최신 모델 또는 32B 이상 파라미터를 가진 모델)을 사용할 경우.
- 복잡한 추론 및 코드 실행이 필요한 작업을 수행할 경우.
- 에이전트 출력의 신뢰할 수 있는 파싱이 필요할 경우.
다음 경우에는 대안을 고려하세요:
- 구조화된 생성에 어려움을 겪는 작은 모델을 사용할 경우.
- 간단하고 미리 정의된 워크플로우만으로 충분한 경우.
구현 팁
- 명확한 프롬프트: 프롬프트는 기대되는 JSON 구조를 명시적으로 지정해야 합니다.
- 모델 선택: 구조화된 생성 능력이 뛰어난 모델을 선택하세요.
- 제공자 지원: OpenAI 또는 Anthropic과 같이 구조화된 생성을 기본적으로 지원하는 API 제공자를 사용하여 최대 신뢰성을 확보하세요.