인공지능(AI) 분야에서 대규모 언어 모델(LLM)을 활용한 에이전트 시스템의 구축은 점점 더 중요한 주제로 떠오르고 있습니다. 본 기사에서는 Anthropic의 “Building effective agents” 자료를 바탕으로 에이전트의 정의부터 구축 방법, 워크플로우 패턴, 구현 시 핵심 원칙 및 실무 사례까지 상세히 분석하여 소개합니다.
에이전트란 무엇인가?
에이전트(Agent)는 다양한 방식으로 정의될 수 있으며, 주로 두 가지 범주로 나뉩니다:
워크플로우(Workflows)
워크플로우는 사전에 정의된 코드 경로를 통해 LLM과 도구가 조율되는 시스템입니다. 예측 가능한 작업을 처리할 때 유용하며, 일관성과 안정성을 제공합니다.
에이전트(Agents)
에이전트는 LLM이 작업 수행 및 도구 사용을 동적으로 제어하는 시스템으로, 유연성과 자율성이 요구되는 대규모 작업에 적합합니다.
Anthropic에서는 이 두 가지를 에이전트 시스템(Agentic Systems)으로 분류하며, 유연성과 자율성에서 중요한 차이를 둡니다.
언제 에이전트를 사용해야 하는가?
애플리케이션 구축 시, 가능한 한 단순한 솔루션을 선택하고 복잡성은 필요할 때만 추가하는 것이 중요합니다.
- 워크플로우: 예측 가능한 작업을 처리할 때 유용하며, 일관성과 안정성을 제공합니다.
- 에이전트: 대규모에서 유연성과 모델 중심의 의사결정이 필요할 때 적합합니다.
대부분의 경우, 단순히 LLM 호출을 최적화하거나 컨텍스트 예제를 활용하는 것으로 충분합니다.
에이전트 구축을 위한 프레임워크
효과적인 에이전트 시스템 구축을 지원하는 대표적인 프레임워크는 다음과 같습니다:
- LangGraph (LangChain)
- Amazon Bedrock AI Agent
- Rivet
- Vellum
프레임워크의 장점
- LLM 호출 및 도구 정의의 간소화
- 호출 체인 관리의 용이성
프레임워크의 단점
- 복잡성 증가 및 디버깅 어려움
가장 추천할 만한 방법으로 직접 LLM API를 사용하여 시작하고, 프레임워크를 사용할 경우 기저 코드를 이해하는 것이 중요합니다.
에이전트 시스템의 구성 요소
증강된 LLM (Augmented LLM)
증강된 LLM은 검색, 도구 사용, 메모리 기능을 추가로 갖춘 LLM을 말합니다. 주요 특징은 다음과 같습니다:
- 검색 및 도구 사용: 외부 데이터 및 도구와의 통합
- 메모리 기능: 이전 상호작용을 기억하여 더 나은 응답 제공
anthropic의 경우 Model Context Protocol을 사용하여 타사 도구와 통합하는 것이 간단하고 문서화된 인터페이스 제공하는 방법입니다.
주요 워크플로우 패턴
효과적인 에이전트 시스템 구축을 위한 주요 워크플로우 패턴은 다음과 같습니다:
프롬프트 체이닝 (Prompt Chaining)
작업을 고정된 하위 단계로 나눠 순차적으로 처리하는 방법입니다. 예를 들어, 마케팅 문구 생성 후 번역하는 작업에 유용합니다.
라우팅 (Routing)
입력 데이터를 분류하여 적합한 작업으로 전달하는 방법입니다. 예를 들어, 고객 지원 문의를 일반 질문, 환불 요청, 기술 지원으로 분류할 수 있습니다.
병렬화 (Parallelization)
작업을 분리하거나 동일 작업을 여러 번 실행하여 처리 속도를 높이는 방법입니다. 예를 들어, 코드 취약점 검토 시 여러 프롬프트를 동시에 사용합니다.
오케스트레이터-워커 (Orchestrator-Workers)
중앙 LLM이 작업을 분해하여 워커 LLM에 할당하고 결과를 종합하는 방법입니다. 복잡한 코딩 작업에 유용합니다.
평가자-최적화 (Evaluator-Optimizer)
LLM 응답을 평가하고 피드백을 제공하여 반복적으로 개선하는 방법입니다. 문학 번역에서 번역 품질을 개선하는 데 사용됩니다.
에이전트 (Agents)
에이전트는 작업을 계획하고 독립적으로 실행하며, 필요 시 인간과 상호작용할 수 있는 시스템입니다. 예를 들어, 복잡한 코딩 작업을 수행하는 에이전트가 있습니다.
에이전트 구현 시 핵심 원칙
에이전트 시스템을 효과적으로 구현하기 위해 다음과 같은 핵심 원칙을 따르는 것이 중요합니다:
- 단순성 유지: 에이전트의 설계를 간단하게 유지합니다.
- 투명성 우선: 에이전트의 계획 단계를 명확히 드러냅니다.
- 에이전트-컴퓨터 인터페이스(ACI) 품질 개선: 도구 문서화와 테스트를 철저히 수행합니다.
고객 사례: 실무에서의 에이전트 활용
A. 고객 지원
고객 지원 에이전트는 자연스러운 대화 흐름과 외부 데이터 통합을 통해 효과적인 해결책을 제공합니다. 성공적 해결 비율로 측정 가능하며, 사용량 기반 가격 모델을 적용할 수 있습니다.
B. 코딩 에이전트
코딩 에이전트는 자동화된 테스트를 통해 코드 솔루션을 검증합니다. 문제 공간이 명확하고 구조적이기 때문에 높은 효율성을 발휘합니다. 예를 들어, GitHub 이슈를 해결하는 에이전트가 있습니다.
도구 프롬프트 엔지니어링
에이전트 시스템 구축 시 도구는 중요한 역할을 합니다. 도구 정의와 사양을 명확하게 작성하여 LLM이 효과적으로 사용할 수 있도록 해야 합니다. 다음은 도구 프롬프트 엔지니어링을 위한 몇 가지 제안입니다:
- 모델의 관점에서 생각하기: 도구 사용이 직관적인지 확인합니다.
- 매개변수 이름 및 설명 개선: 이해하기 쉽게 만듭니다.
- 도구 사용 테스트: 다양한 입력을 통해 모델의 사용 방식을 테스트하고 개선합니다.
- 포카요케(Poka-yoke) 적용: 실수를 방지할 수 있도록 도구의 인수를 설계합니다.
결론
LLM 기반 에이전트 시스템의 성공은 가장 복잡한 시스템을 구축하는 것이 아니라, 필요에 맞는 적합한 시스템을 만드는 데 달려 있습니다. 간단한 프롬프트로 시작하여 평가를 통해 최적화하고, 단순한 솔루션으로 부족할 때만 다단계 에이전트 시스템을 추가하는 것이 중요합니다. 단순성, 투명성, 도구 문서화 및 테스트를 우선시함으로써 신뢰할 수 있고 유지관리 가능한 에이전트를 구축할 수 있습니다.
참고 자료: Anthropic.com, “Building effective agents”