Published on

AI 에이전트 개발: 단순성이 복잡성을 이긴다

저자
  • avatar
    이름
    Ajax
    Twitter

AI 에이전트 개발: 단순성이 복잡성을 이긴다

지능형 시스템의 정의

지능형 시스템은 다양한 방식으로 정의될 수 있습니다. 어떤 사람들은 이를 독립적으로 생각하고, 스스로 결정을 내리며, 복잡한 작업을 수행하기 위해 도구를 활용하는 '만능 집사'로 간주합니다. 반면에 다른 사람들은 미리 설정된 작업 흐름을 따르는 '규칙적인 직원'으로 생각합니다. Anthropic은 이 두 가지를 모두 지능형 시스템으로 분류하며, 워크플로우와 에이전트를 다음과 같이 구분합니다.

  • 워크플로우: 미리 정의된 코드 경로를 통해 대규모 언어 모델(LLM)과 도구를 조정하는 시스템입니다.
  • 에이전트: LLM이 자체 프로세스와 도구 사용을 동적으로 지시하는 시스템으로, 작업 완료 방식을 자율적으로 제어할 수 있습니다.

어떤 상황에서 에이전트를 선택해야 할까요?

Anthropic은 AI 애플리케이션을 개발할 때 '단순하게 할 수 있다면 복잡하게 만들지 말라'는 원칙을 따를 것을 권장합니다. 모든 시나리오에서 복잡한 지능형 시스템을 구축할 필요는 없습니다. 지능형 시스템은 강력한 기능을 제공하지만, 응답 속도가 느려지고 비용이 증가할 수 있습니다. 개발자는 기능과 효율성 사이에서 균형을 맞춰야 합니다.

  • 워크플로우: 예측 가능하고 일관성이 필요한 명확한 작업에 적합합니다.
  • 에이전트: 유연성과 모델 기반 의사 결정이 필요한 대규모 시나리오에 더 적합합니다.

많은 애플리케이션에서 좋은 프롬프트와 검색 및 컨텍스트 예제를 활용하여 대규모 모델에 직접 질문하는 것으로 충분할 수 있습니다.

프레임워크 사용에 대한 고려

현재 시중에는 AI 에이전트 구축을 돕는 다양한 프레임워크가 있습니다. 예를 들어:

  • LangChain의 LangGraph
  • Amazon Bedrock의 AI Agent 프레임워크
  • 드래그 앤 드롭 방식의 대규모 모델 워크플로우 구축 도구 Rivet
  • 복잡한 워크플로우를 구축하고 테스트하기 위한 GUI 도구 Vellum

이러한 프레임워크는 개발 프로세스를 단순화하지만, 코드 추상화 계층을 추가하여 기본 로직을 불투명하게 만들고, 디버깅을 어렵게 하며, 간단한 시나리오에서 과도하게 복잡한 솔루션을 도입할 수 있습니다.

Anthropic은 개발자가 대규모 모델의 API를 직접 사용하는 것부터 시작할 것을 권장합니다. 많은 패턴이 몇 줄의 코드만으로 구현될 수 있습니다. 프레임워크를 사용하기로 결정했다면, 반드시 그 기본 원리를 이해해야 합니다. 프레임워크의 기본 메커니즘에 대한 이해 부족은 개발 문제의 주요 원인입니다.

Anthropic의 쿡북은 구체적인 예시를 제공합니다.

빌딩 블록, 워크플로우 및 에이전트

기본 빌딩 블록: 향상된 LLM

지능형 시스템의 기본 빌딩 블록은 검색 및 기억과 같은 기능을 갖춘 향상된 LLM입니다. Anthropic의 모델은 검색 쿼리 생성, 도구 선택, 보존할 정보 결정과 같은 기능을 능동적으로 사용할 수 있습니다.

기능을 확장할 때는 다음 사항에 중점을 두어야 합니다.

  • 구체적인 애플리케이션 시나리오에 따라 기능을 맞춤화합니다.
  • 모델에 간단하고 문서화가 잘 된 인터페이스를 제공합니다.

Anthropic에서 최근 발표한 모델 컨텍스트 프로토콜은 AI 모델과 타사 도구 생태계의 통합을 단순화합니다.

워크플로우: 프롬프트 체인

프롬프트 체인은 복잡한 작업을 여러 단계로 분해하며, 각 단계에서 대규모 모델을 한 번 호출합니다. 후속 단계는 이전 단계의 결과를 기반으로 처리됩니다. 개발자는 중간 단계에 검사점을 추가하여 프로세스가 예상대로 진행되는지 확인할 수 있습니다.

프롬프트 체인은 복잡한 작업을 일련의 고정된 하위 작업으로 명확하게 분해할 수 있는 시나리오에 적합합니다. 각 모델은 간단한 작업을 완료하는 데 집중하며, 전체 응답 시간은 약간 길어질 수 있지만, 정확도는 크게 향상됩니다.

일반적인 애플리케이션 사례:

  • 마케팅 문구를 생성한 다음 다른 언어로 번역합니다.
  • 문서 개요를 작성하고 규정 준수 검사를 수행한 다음, 개요를 기반으로 전체 문서를 작성합니다.

워크플로우: 지능형 분류

분류 기술은 입력 작업 유형을 판단하고 해당 모듈에 할당합니다. 이러한 설계는 각 모듈이 특정 작업에 최적화되도록 하고, 서로 다른 작업 유형 간의 간섭을 방지합니다. 지능형 분류는 작업에 명확한 분류 특징이 있는 시나리오에 적합합니다. AI 시스템은 대규모 언어 모델 또는 기존 알고리즘을 통해 작업 유형을 정확하게 식별하고 분류할 수 있습니다.

일반적인 애플리케이션 사례:

  • 고객 서비스 시스템에서 일반 문의, 환불 요청 및 기술 지원과 같은 문제를 해당 프로세스로 각각 안내합니다.
  • 간단하고 일반적인 문제를 작은 모델에 할당하고, 어렵고 드문 문제를 더 강력한 모델에 할당하여 비용과 속도를 최적화합니다.

워크플로우: 병렬 처리

대규모 언어 모델은 작업을 동시에 처리하고 프로그래밍 방식으로 출력을 집계할 수 있습니다. 병렬 워크플로우의 특징은 다음과 같습니다.

  • 작업 분할: 작업을 병렬로 실행할 수 있는 하위 작업으로 분할하고, 마지막에 결과를 통합합니다.
  • 투표 메커니즘: 동일한 작업을 여러 번 실행하고 최적의 결과를 선택하거나 여러 답변을 종합합니다.

하위 작업을 병렬로 실행하여 속도를 높이거나, 더 높은 신뢰도의 결과를 얻기 위해 다각도로 시도해야 할 때 병렬 방법이 매우 효과적입니다. 복잡한 작업의 경우, 각 호출이 특정 측면을 처리하는 데 집중하도록 하면 더 나은 결과를 얻을 수 있습니다.

일반적인 애플리케이션 사례:

  • 작업 분할:
    • 보안 보호: 한 모델이 사용자 요청을 처리하고, 다른 모델이 콘텐츠 검토를 수행합니다.
    • 성능 평가: 서로 다른 모델이 시스템 성능 지표를 평가합니다.
  • 투표 메커니즘:
    • 코드 보안 검사: 여러 감지 모델이 함께 코드 취약점을 발견합니다.
    • 콘텐츠 검토: 여러 모델이 다양한 각도에서 콘텐츠 보안을 평가합니다.

워크플로우: 리더 - 실행자

중앙 대규모 언어 모델이 작업을 동적으로 분해하고, 실행자 모델에 할당하며, 결과를 요약합니다. 이러한 워크플로우는 구체적인 단계를 미리 결정하기 어려운 복잡한 작업에 적합합니다. 작업 분할은 고정되어 있지 않고, AI 시스템이 상황에 따라 동적으로 결정합니다.

일반적인 애플리케이션 사례:

  • 여러 파일을 복잡하게 수정해야 하는 프로그래밍 애플리케이션.
  • 여러 소스에서 관련 정보를 수집하고 분석해야 하는 검색 작업.

워크플로우: 평가 - 최적화

하나의 LLM 호출이 응답을 생성하고, 다른 LLM이 평가 및 피드백을 제공하여 루프를 형성합니다. 명확한 평가 기준이 있고, 반복적인 개선을 통해 상당한 가치를 창출할 수 있을 때 이 워크플로우가 특히 효과적입니다. LLM은 인간 작가가 반복적으로 수정하는 과정과 유사한 피드백을 제공할 수 있습니다.

일반적인 애플리케이션 사례:

  • 문학 번역: 평가 모델이 번역에서 누락된 언어 차이를 발견하고 수정 제안을 제공합니다.
  • 복잡한 검색: 평가 모델이 추가 검색이 필요한지 판단합니다.

에이전트

에이전트는 복잡한 입력 이해, 추론 계획, 도구 사용 및 오류 복구와 같은 핵심 기능에서 LLM이 성숙해짐에 따라 등장했습니다.

에이전트의 작업은 인간 사용자의 명령 또는 상호 작용 토론에서 시작됩니다. 작업이 명확해지면, 에이전트는 독립적으로 계획하고 작동하며, 인간에게 추가 정보를 요청하거나 판단을 내리도록 요청할 수 있습니다.

실행 과정의 각 단계에서 환경으로부터 '실제 상황'을 얻는 것이 매우 중요합니다. 에이전트는 검사점이나 차단에 직면했을 때 일시 중지하여 인간 피드백을 얻을 수 있습니다. 작업은 일반적으로 완료되면 종료되지만, 중지 조건도 포함될 수 있습니다.

에이전트는 복잡한 작업을 처리할 수 있지만, 구현은 일반적으로 간단합니다. 일반적으로 환경 피드백에 따라 도구를 사용하는 대규모 언어 모델의 루프일 뿐입니다. 따라서 도구 세트와 문서가 명확하고 신중하게 설계되어야 합니다.

에이전트는 필요한 단계 수를 예측하기 어렵고 고정된 경로를 하드 코딩할 수 없는 개방형 문제에 적합합니다. 에이전트의 자율성은 신뢰할 수 있는 환경에서 작업을 확장하는 데 이상적인 선택입니다. 에이전트의 자율성은 비용이 더 높고 오류 누적 위험이 있음을 의미합니다. 샌드박스 환경에서 광범위한 테스트를 수행하고 적절한 보호 조치를 설정하는 것이 좋습니다.

에이전트의 애플리케이션 예시:

  • 작업 설명에 따라 여러 파일을 편집하는 SWE-bench 작업을 해결하는 코드 에이전트.
  • Anthropic의 '컴퓨터 사용' 기능으로, Claude가 컴퓨터를 사용하여 작업을 완료합니다.

조합 및 맞춤화

이러한 빌딩 블록은 규정적인 것이 아니며, 개발자는 사용 사례에 따라 모양을 만들고 조합할 수 있습니다. 성공의 핵심은 성능을 측정하고 반복적으로 구현하는 것입니다. 더 간단한 솔루션으로 해결할 수 없을 때만 복잡성을 추가해야 합니다. LLM 분야에서 성공하는 것은 가장 복잡한 시스템을 구축하는 것이 아니라, 요구 사항에 맞는 시스템을 구축하는 것입니다. 간단한 프롬프트부터 시작하여 포괄적인 평가로 최적화하고, 더 간단한 솔루션으로 해결할 수 없을 때만 다단계 에이전트 시스템을 추가하십시오.

에이전트를 배포할 때는 다음 원칙을 따라야 합니다.

  • 에이전트 설계를 단순하게 유지합니다.
  • 에이전트의 투명성을 우선시하여 계획된 각 단계를 명확하게 보여줍니다.
  • 포괄적인 도구 문서 및 테스트를 통해 에이전트-컴퓨터 인터페이스(ACI)를 신중하게 제작합니다.