Skip to content

agent

TL;DR

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

Agent의 기본 구조

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

2. Plan & Execute 패턴

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

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

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

4. Conversational Agent (대화형)

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

5. Function Calling (OpenAI Functions)

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

Agent 패턴별 비교

패턴 특징 및 구체적 설명 사용 예
ReAct 추론과 행동을 결합하여 Tool 선택 후 실행.
예: zero-shot-react-description Agent
일반적인 Tool 기반 챗봇
Plan & Execute 문제를 여러 단계로 나누어 계획 수립 후 실행.
예: 데이터 분석, 멀티 API 호출
복잡한 멀티스텝 작업
Self-Reflection 초기 결과를 스스로 검토하고 수정하는 피드백 루프 적용. 오류 수정 및 품질 향상
Conversational 대화 이력을 활용하여 문맥을 유지함.
예: ConversationalBufferMemory
챗봇, 고객 지원
Function Calling 미리 정의된 API 호출만 수행하여 보안성과 예측 가능성을 높임. API 기반 시스템 (예약, 금융 데이터 등)

결론

LangChain의 Agent는 단순한 API 호출기를 넘어서 추론과 행동을 자동으로 수행하는 패턴을 따릅니다.

  • 기본적으로 ReAct 패턴을 사용하여 유연하게 도구를 선택 및 실행하지만,
  • 복잡한 작업에는 Plan & Execute 방식,
  • 결과의 정확성을 높이기 위해 Self-Reflection 접근법,
  • 연속적인 대화에서는 Conversational 패턴,
  • 특정 API에 한정된 작업에는 Function Calling 방식을 활용할 수 있습니다.

상황과 요구에 맞게 각 Agent의 특성을 이해하고 적절한 패턴을 선택하면, 보다 효율적이고 정확한 시스템 구축이 가능합니다.