published : 2024-12-20
지난 1 년 동안, 우리는 산업 전역의 LLM (Lange Language Model) 에이전트를 구축하는 수십 명의 팀과 함께 일했습니다. 지속적으로 가장 성공적인 구현은 복잡한 프레임 워크 또는 전문 라이브러리를 사용하지 않았습니다. 대신, 그들은 단순하고 종합 가능한 패턴으로 건축했습니다.
이 게시물에서는 고객과 협력하여 배운 내용을 공유하고 에이전트를 구축하고 효과적인 에이전트 구축에 대한 개발자에게 실질적인 조언을 제공합니다.
"에이전트"는 여러 가지 방법으로 정의 될 수 있습니다. 일부 고객은 복잡한 작업을 수행하기 위해 다양한 도구를 사용하여 장기 동안 독립적으로 작동하는 완전 자율 시스템으로 에이전트를 정의합니다. 다른 사람들은이 용어를 사용하여 사전 정의 된 워크 플로를 따르는 더 많은 규범 구현을 설명합니다. Anthropic에서는 이러한 모든 변형을 에이전트 시스템으로 분류하지만 워크 플로와 에이전트간에 중요한 건축 적 구분을 가져옵니다.
아래에서는 두 가지 유형의 에이전트 시스템을 자세히 살펴볼 것입니다. 부록 1 (“실제로 에이전트”)에서 고객이 이러한 종류의 시스템을 사용하여 특정 가치를 찾은 두 가지 도메인을 설명합니다.
에이전트 시스템을 쉽게 구현할 수 있도록하는 많은 프레임 워크가 있습니다.
이러한 프레임 워크를 사용하면 LLMs호출, 도구 정의 및 구문 분석 및 통화를 체인하는것과 같은 표준 저수준 작업을 단순화하여 쉽게 시작 할수 있다.
But, 이들은 종종 기본 프롬프트와 응답을 가릴 수 있는 여분의 추상화 층을 만들어 debug하기 더 어려워진다.
So, 개발자는 LLM API를 직접 사용하여 시작하는 것이 좋다는 의견.
몇 줄의 코드로 많은 패턴을 구현 가능
프레임 워크를 사용하는 경우 기본 코드를 이해해야한다.
이 섹션에서는 생산에서 본 에이전트 시스템의 일반적인 패턴을 살펴 보겠습니다. 우리는 단순한 구성 워크 플로에서 자율적 인 에이전트에 이르기까지 기초 빌딩 블록 (증강 된 LLM)부터 시작하여 복잡성을 점차적으로 증가시킬 것입니다.
에이전트 시스템의 기본 빌딩 블록은 검색, 도구 및 메모리와 같은 증강으로 향상된 LLM임.
자체 검색 쿼리를 생성하고, 적절한 도구를 선택하고 유지해야할 정보를 결정 가능.

Figure. The augmented LLM
중점을 두어야할 구현의 두가지 주요 측면
특정 사용 사례에 맞게 기능 최적화
Retrieval, tools, memory 기능을 단순히 추가하는것이 아니라, 사용자의 특정 요구사항에 맞게 최적화
LLM이 쉽게 활용할 수 있도록 직관적이고 문서화된 인터페이스 제공
모델이 어떤 상황에서 Retrieval을 사용할지, Tools를 호출할지, Memory에 저장할지를, 명확하게 정의하고 관리할 수 있어야함.
Model Context Protocol(MCP) 같은 표준화 된 방식으로 구현 추천.
Prompt Chaining(프롬프트 체이닝)은 하나의 작업을 여러 개의 단계로 나누고, 각 LLM 호출이 이전 단계의 출력을 기반으로 다음 단계를 수행하는 방식이다.

주요 특징
프롬프트 체이닝이 적합한 경우
Routing(라우팅)은 입력을 특정 카테고리로 분류한 후, 해당 카테고리에 적절한 후속 작업을 수행하는 방식이다.
즉, 입력의 성격을 분석하여 최적의 LLM 호출이나 작업을 선택하는 구조이다.

주요 특징
Routing이 적합한 경우
적용 사례
Parallelization(병렬 처리)은 여러 개의 LLM 호출을 동시에 실행한 후, 그 결과를 Aggregator(집계기)에서 합쳐 최종 결과를 도출하는 방식이다.
즉, 하나의 큰 작업을 병렬로 실행해 속도를 높이거나, 다양한 관점에서 결과를 생성해 신뢰성을 높이는 방법이다.

When to use this workflow : 병렬화는 속도를 위해 분할 된 하위 작업을 병렬화 할 수 있거나 신뢰도가 높은 결과를 얻기 위해 여러 관점이나 시도가 필요한 경우 효과적입니다. 여러 고려 사항이있는 복잡한 작업의 경우 각 고려 사항이 별도의 LLM 호출로 처리 될 때 일반적으로 LLM이 더 잘 수행되어 각 특정 측면에 집중할 수 있습니다.
Examples where parallelization is useful:
오케스트레이터 노동자 워크 플로우에서 중앙 LLM은 작업을 동적으로 분해하고 작업자 LLM으로 위임하고 결과를 종합합니다.

When to use this workflow: 필요한 하위 작업을 예측할 수없는 복잡한 작업에 적합합니다 (예 : 변경해야 할 파일 수와 각 파일의 변경 특성은 작업에 의존). 지형적으로 유사하지만 병렬화와의 주요 차이점은 유연성입니다. 서브 타스크는 사전 정의되지 않았지만 특정 입력을 기반으로 오케스트레이터에 의해 결정됩니다.
Example where orchestrator-workers is useful :
Evaluator-Aptimizer Workflow에서 하나의 LLM 호출은 응답을 생성하는 반면 다른 LLM은 응답을 생성합니다. 다른 LLM은 루프에서 평가 및 피드백을 제공합니다.

When to use this workflow: 명확한 평가 기준이 있고 반복 정제가 측정 가능한 값을 제공 할 때 특히 효과적입니다. 우수한 두 가지 징후는 먼저 인간이 피드백을 표현할 때 LLM 반응이 명백히 개선 될 수 있다는 것입니다. 둘째, LLM은 그러한 피드백을 제공 할 수 있습니다. 이것은 세련된 문서를 제작할 때 인간 작가가 겪을 수있는 반복적 인 작문 과정과 유사합니다.
Examples where evaluator-optimizer is useful:
LLM이 주요 기능에서 LLM이 성숙함에 따라 생산에 등장하고 있습니다. 복잡한 입력을 이해하고, 추론 및 계획에 참여하고, 도구를 안정적으로 사용하고, 오류에서 복구하는. 에이전트는 인간 사용자와의 명령 또는 대화식 토론으로 작업을 시작합니다. 작업이 명확 해지면 에이전트는 독립적으로 계획하고 운영되며 잠재적으로 추가 정보 나 판단을 위해 인간에게 돌아갑니다. 실행하는 동안 에이전트가 각 단계 (예 : 도구 통화 결과 또는 코드 실행)에서 환경에서“진실”을 얻는 것이 진행 상황을 평가하는 것이 중요합니다. 그런 다음 에이전트는 체크 포인트 또는 차단제를 만날 때 인간의 피드백을 위해 일시 중지 할 수 있습니다. 작업은 종종 완료시 종료되지만 제어를 유지하기 위해 정지 조건 (예 : 최대 반복 수)을 포함하는 것이 일반적입니다.
에이전트는 정교한 작업을 처리 할 수 있지만 구현은 종종 간단합니다. 일반적으로 루프의 환경 피드백을 기반으로 한 도구를 사용하는 LLM입니다. 따라서 도구 세트와 문서를 명확하고 신중하게 디자인하는 것이 중요합니다. 우리는 부록 2 ( "신속한 엔지니어링 도구")에서 도구 개발을위한 모범 사례를 확장합니다.

When to use agents: 이전트는 필요한 단계를 예측하기가 어렵거나 불가능한 개방형 문제에 사용될 수 있으며 고정 경로를 하드 코딩 할 수없는 곳에서 사용될 수 있습니다. LLM은 잠재적으로 많은 턴 동안 운영 될 것이며 의사 결정에 대해 어느 정도의 신뢰를 가져야합니다. 에이전트의 자율성은 신뢰할 수있는 환경에서 작업을 확장하는 데 이상적입니다.
에이전트의 자율적 특성은 더 높은 비용과 복합 오류의 가능성을 의미합니다. 적절한 가드 레일과 함께 샌드 박스 환경에서 광범위한 테스트를 권장합니다.
Examples where agents are useful:
The following examples are from our own implementations:

이 빌딩 블록은 규범이 아닙니다. 그들은 개발자가 다른 사용 사례에 맞게 형성하고 결합 할 수있는 일반적인 패턴입니다. LLM 기능과 마찬가지로 성공의 핵심은 성능을 측정하고 구현을 반복하는 것입니다. 반복하려면 : 결과를 명백히 향상시킬 때만 복잡성을 추가하는 것을 고려해야합니다.
LLM 공간에서의 성공은 가장 정교한 시스템을 구축하는 것이 아닙니다. 그것은 당신의 요구에 맞는 적절한 시스템을 구축하는 것입니다. 간단한 프롬프트로 시작하여 포괄적 인 평가로 최적화 한 후 간단한 솔루션이 부족할 때만 멀티 단계 에이전트 시스템을 추가하십시오.
에이전트를 구현할 때는 세 가지 핵심 원칙을 따르려고 노력합니다.
에이전트 디자인의 단순성을 유지하십시오.
에이전트의 계획 단계를 명시 적으로 보여줌으로써 투명성 우선 순위를 정합니다.
철저한 도구 문서 및 테스트를 통해 ACI (Agent-Computer Interface)를 조심스럽게 작성하십시오.
프레임 워크는 신속하게 시작하는 데 도움이 될 수 있지만 주저하지 말고 추상화 레이어를 줄이고 생산으로 이동할 때 기본 구성 요소로 빌드하십시오. 이러한 원칙을 따르면 강력 할뿐만 아니라 신뢰할 수 있고 유지 가능하며 사용자가 신뢰할 수있는 에이전트를 만들 수 있습니다.