Skip to content

pattern

TL;DR

  • Agent는 사용자의 입력을 받아 Tool을 실행하고, 결과를 바탕으로 답변을 생성하는 구조임.
  • ReAct, Plan & Execute, Self-Reflection, Conversational, Function Calling 등 여러 주요 패턴이 존재.
  • LangChain에서는 기본적으로 ReAct 패턴을 사용하며, 상황에 따라 적절한 패턴을 선택하여 활용할 수 있음.
  • LangGraph를 기반으로 한 Multi-Agent, Supervisor, Self-RAG, Tree of Thoughts 등의 고급 패턴도 존재함.

Agent의 기본 구조

  • 사용자 입력 수신: 사용자가 메시지를 입력함.
  • LLM 추론: 입력된 내용을 기반으로 어떤 Tool을 사용할지 결정하기 위해 추론함.
  • Tool 선택 및 실행: 적절한 Tool을 선택하고 실행하여 결과를 얻음.
  • 후속 행동 결정: 추가 행동이 필요한지 판단하여 반복 실행할지 결정함.
  • 최종 답변 반환: 모든 과정이 완료되면 사용자에게 최종 답변을 전달함.
graph LR;
    A[사용자의 입력] --> B[LLM 추론]
    B --> C[Tool 선택]
    C --> D[Tool 실행 및 결과 획득]
    D --> E{추가 행동 필요?};
    E -- 예 --> B;
    E -- 아니오 --> F[최종 답변 반환];

주요 Agent 패턴

1. ReAct (Reasoning + Acting) 패턴

  • 특징: LLM이 먼저 답변을 생성하기보다는 어떤 Tool을 사용할지 결정한 후 실행하는 방식임.
  • 구체적 사례: LangChain의 zero-shot-react-description Agent는 문맥 내에서 필요한 도구를 선택하고, 실행 후 도출된 결과를 바탕으로 다시 추론하여 최종 답변을 생성함.
  • 예시: 사용자 질문에 대해 단순 검색이나 계산이 필요한 경우, 해당 Tool을 실행하고 그 결과를 포함하여 답변하는 과정이 이에 해당됨.
graph LR;
    A[사용자의 입력] --> B[LLM 추론: 문제 이해 및 해결 방법 모색]
    B --> C[Tool 선택: 필요한 도구 결정]
    C --> D[Tool 실행: 선택한 도구를 호출]
    D --> E[결과 획득: 도구 실행 결과 수신]
    E --> F{추가 행동 필요?}
    F -- 예 --> B;
    F -- 아니오 --> G[최종 답변 반환]

2. Plan & Execute 패턴

  • Plan & Execute
  • 특징: 복잡한 멀티스텝 작업을 위해 계획(Plan) 수립과 실행(Execute) 단계를 명확하게 분리함.
  • 구체적 설명:
    • 계획 단계에서는 문제를 여러 단계로 나누어 어떤 순서로 Tool을 실행할지 계획을 세움.
    • 실행 단계에서는 계획에 따라 각 단계별로 Tool을 호출하고 결과를 종합함.
  • 사용 예: 복잡한 데이터 분석이나 여러 API를 순차적으로 호출해야 하는 작업에 효과적임.
  • 예시: 먼저 데이터를 수집(계획)한 후, 각각의 데이터를 가공 및 분석(실행)하여 최종 결과를 도출하는 작업 방식.
graph LR;
    A[사용자의 입력] --> B[계획 수립]
    B --> C[단계별 실행]
    C --> D[결과 종합]
    D --> E{추가 작업 필요?}
    E -- 예 --> F[계획 재검토 및 수정]
    F --> C
    E -- 아니오 --> G[최종 답변 반환]

3. Self-Reflection Agent (자기 점검)

  • Reflection
  • 특징: LLM이 스스로 생성한 결과를 검토하고, 오류를 점검하여 필요한 경우 수정하는 방식임.
  • 구체적 설명:
    • 피드백 루프: 초기 결과를 생성한 후, 이를 재검토하여 누락이나 오류가 있는지 확인하고, 필요 시 수정 과정을 거침.
    • LangChain에서는 직접적인 구현 예시는 없으나, 커스텀 Agent로 이러한 피드백 루프를 적용할 수 있음.
  • 사용 예: 복잡한 질문에 대해 결과의 정확성을 높이고자 할 때 유용함.
graph LR;
    A[첫 번째 결과 생성] --> B[결과 검토 및 수정]
    B --> C{결과가 정확한가?}
    C -- 예 --> D[최종 답변 반환]
    C -- 아니오 --> A

4. Conversational Agent (대화형)

  • 특징: 사용자의 이전 대화 이력을 기억하여 문맥을 유지하며 응답을 생성하는 방식임.
  • 구체적 설명:
    • Memory 활용: LangChain의 ConversationalBufferMemory 등을 사용하여, 이전 대화 내용을 저장 및 활용함.
    • 장점: 지속적인 대화에서 사용자 의도를 보다 정확하게 파악하고, 일관된 답변을 제공할 수 있음.
    • 단점: 메모리 관리가 제대로 이루어지지 않으면 대화 맥락이 불필요하게 누적될 수 있음.
  • 사용 예: 고객 지원 챗봇, 상담 시스템 등 연속 대화가 필요한 환경.
graph LR;
    A[사용자 입력] --> B[대화 이력 확인]
    B --> C[문맥 유지 후 응답 생성]
    C --> D[최종 답변 반환]

5. Function Calling (OpenAI Functions)

  • 특징: 미리 정의된 특정 API만을 실행하여, 보다 안전하고 예측 가능한 결과를 얻을 수 있는 방식임.
  • 구체적 설명:
    • 보안성 강화: 사용 가능한 함수가 미리 제한되어 있어 외부 API 호출 시 발생할 수 있는 위험을 줄임.
    • 예측 가능성: 특정 기능에 한정된 실행으로, 예상 가능한 결과를 도출할 수 있음.
  • 사용 예: 금융 데이터 조회, 예약 시스템 등 API 호출이 필요한 시스템.
graph LR;
    A[사용자의 입력] --> B[필요한 함수 식별]
    B --> C[해당 API 호출]
    C --> D[결과 반환]

6. Multi-Agent Collaboration

  • Hierarchical Agent Team / Network 와 같은 세부 패턴 존재
  • 특징: 여러 Agent가 병렬 또는 순차적으로 협력하여 문제를 해결함.
  • 구체적 설명:
    • 각 Agent는 특정 역할 또는 도메인에 특화되어 있으며, 상호작용을 통해 더 복잡한 문제를 해결할 수 있음.
  • 사용 예: 항공권 예약 + 호텔 검색 + 차량 렌탈을 분리된 Agent가 처리한 후 통합 결과 제공.
graph LR;
    A[사용자의 입력] --> B1[Agent A: 항공]
    A --> B2[Agent B: 호텔]
    A --> B3[Agent C: 렌터카]
    B1 --> C[통합 결과 집계]
    B2 --> C
    B3 --> C
    C --> D[최종 응답 생성]

7. Supervisor Agent

  • 특징: 상위 LLM이 여러 하위 Agent에게 작업을 분배하고 결과를 통합함.
  • 구체적 설명:
    • Supervisor는 전체 목표를 분석하고, 필요한 Agent에 태스크를 위임한 후, 그 결과를 수집하여 최종 응답 생성.
graph LR;
    A[사용자의 입력] --> B[Supervisor Agent]
    B --> C1[하위 Agent 1]
    B --> C2[하위 Agent 2]
    C1 --> D[결과 수집]
    C2 --> D
    D --> E[Supervisor가 최종 응답 생성]

8. Hierarchical Agent

  • 특징: 문제를 상위 목표와 하위 태스크로 나누어 단계적으로 해결함.
  • 구체적 설명:
    • Team 또는 Tree 구조로 Agent를 구성하여 계층적으로 분할 처리.
graph LR;
    A[상위 목표] --> B[하위 계획 A]
    A --> C[하위 계획 B]
    B --> D[세부 실행 A1]
    B --> E[세부 실행 A2]
    C --> F[세부 실행 B1]
    C --> G[세부 실행 B2]

9. Reflective Retrieval Agent (Self-RAG, Corrective RAG)

  • 특징: 검색된 정보의 품질을 평가하고, 필요 시 재검색하거나 스스로 판단을 교정함.
  • 구체적 설명:
    • 초기 검색 결과를 검토하고, 부족하거나 부정확하면 다시 검색을 시도하거나 정보를 필터링함.
graph LR;
    A[Query 입력] --> B[초기 Retrieval]
    B --> C[검색 품질 평가]
    C --> D{품질이 적절한가?}
    D -- 예 --> E[응답 생성]
    D -- 아니오 --> F[재검색 및 필터링] --> C

10. Tree of Thoughts (ToT)

  • 특징: 다양한 추론 경로를 생성하고, 각 경로를 평가하여 최적의 답을 선택함.
  • 구체적 설명:
    • 분기된 추론 경로를 탐색하고, 점수화 및 선택 과정에서 Reflection 기법 활용
graph LR;
    A[문제 입력] --> B1[아이디어 1]
    A --> B2[아이디어 2]
    B1 --> C1[세부 추론 1-1]
    B1 --> C2[세부 추론 1-2]
    B2 --> C3[세부 추론 2-1]
    B2 --> C4[세부 추론 2-2]
    C1 --> D[점수 평가 및 선택]
    C2 --> D
    C3 --> D
    C4 --> D
    D --> E[최종 응답 도출]

11. LLMCompiler / DAG Planning

  • 특징: 전체 플랜을 DAG(Directed Acyclic Graph)로 구성하고 병렬 및 순차 실행.
  • 구체적 설명:
    • 의존성이 있는 태스크는 순차 실행, 독립된 태스크는 병렬 처리하여 효율적으로 문제 해결
graph LR;
    A[시작 태스크] --> B[분석 단계]
    B --> C1[병렬 태스크 1]
    B --> C2[병렬 태스크 2]
    C1 --> D[결과 통합]
    C2 --> D
    D --> E[후처리 및 응답 생성]

Agent 패턴별 비교

패턴 특징 및 구체적 설명 사용 예
ReAct 추론과 행동을 결합하여 Tool 선택 후 실행. 일반적인 Tool 기반 챗봇
Plan & Execute 문제를 여러 단계로 나누어 계획 수립 후 실행. 복잡한 멀티스텝 작업
Self-Reflection 초기 결과를 스스로 검토하고 수정하는 피드백 루프 적용. 오류 수정 및 품질 향상
Conversational 대화 이력을 활용하여 문맥을 유지함. 챗봇, 고객 지원
Function Calling 미리 정의된 API 호출만 수행하여 보안성과 예측 가능성을 높임. API 기반 시스템
Multi-Agent 여러 Agent가 병렬 또는 순차로 협력함. 항공/호텔/렌터카 통합 지원
Supervisor Agent 상위 Agent가 하위 Agent에게 작업을 분배하고 결과를 통합함. 복잡한 워크플로우 조정
Hierarchical Agent 상-하위 계획으로 문제를 계층적으로 나눠 처리. 멀티 도메인 문제 해결
Reflective RAG 검색 결과의 품질을 검토하고 수정 또는 재검색하는 RAG 전략. RAG 기반 QA 시스템
Tree of Thoughts 추론 경로를 분기하여 탐색 후 점수를 기반으로 최적 경로 선택. 창의적 문제 해결, 의사결정
LLMCompiler DAG 기반 태스크 실행으로 효율적이고 병렬적인 작업 처리. 태스크 그래프 기반 시스템 구축

결론

LangChain과 LangGraph 기반의 Agent는 단순한 API 호출기를 넘어서 추론과 행동, 그리고 다단계 계획과 협력적 수행을 결합하는 강력한 지능형 시스템입니다.

  • 기본적으로 ReAct 패턴을 사용하여 유연하게 도구를 선택 및 실행하지만,
  • 복잡한 작업에는 Plan & Execute, LLMCompiler,
  • 결과의 정확성을 높이기 위해 Self-Reflection, Reflective RAG,
  • 연속적인 대화에서는 Conversational,
  • 특정 API에 한정된 작업에는 Function Calling,
  • 고도화된 협업 및 분산 처리가 필요한 경우 Multi-Agent, Supervisor, Hierarchical Agent, Tree of Thoughts 등의 패턴을 적용할 수 있습니다.