Agentic RAG

이영진·2025년 4월 22일
0

LLM

목록 보기
9/25

#1. Agentic RAG

1) AI Agentic Workflow

Goal →Planning →Execution →Reflection →(Iteration) →Collaboration


1. Planning (계획 수립)

  • 복잡한 목표를 단계적으로 나누어 AI가 실행할 수 있도록 계획을 수립하는 과정입니다.

  • 예시:

    • 목표 작성 → 정보 수집 → 초안 작성 → 검토 → 최종화
  • 핵심 포인트: 좋은 계획을 유도하기 위해 인간의 의도 전달이 중요합니다.

    • Human: 계획 설계자
    • AI: 계획 실행자이자 보완자

2. Reflection (자기 피드백)

  • AI가 자신의 결과물을 검토하고, 오류를 발견하거나 개선점을 찾아 수정하는 루프를 구성합니다.

  • 예시:

    • 초안 오류 발견 → 재검토 및 재작성

3. Collaboration (다중 에이전트 협업)

  • 하나의 AI 에이전트가 모든 작업을 담당하지 않고, 역할을 나누어 전문화된 에이전트들 간 협업을 수행합니다.

  • 예시:

    • 검색 에이전트 → 요약 에이전트 → 결과 검토 에이전트

추가 설명

  • 인간과 AI의 협력 구조를 강조하며, 초기 설계와 전략적 개념은 인간의 의도를 Prompt(프롬프트)를 통해 전달하여 AI가 이를 바탕으로 실행 및 보완 역할을 수행합니다.

- Reflection

AI 에이전트가 자신이 수행한 작업에 대해 스스로 평가하고 분석하는 과정(루프 자체도 자동화)

Agentic Workflow는 명확한 성능 향상을 만든다!!

1. Tree Search 구조

  • AI는 다양한 응답을 생성하며 분기(branch)를 만듭니다.

  • 각 분기에서 스스로 평가하여 더 나은 가치를 탐색해 나가는 방식입니다.

  • 이러한 구조는 문제 해결을 위해 여러 가능성을 동시에 고려할 수 있도록 설계되었습니다.

2. Reflection 기반 평가

  • 단순히 응답을 생성하는 데 그치지 않고, 생성된 응답이 적절한지 스스로 피드백을 통해 판단합니다.

  • 이를 통해 점진적으로 더 나은 결과를 도출할 수 있습니다.

3. Exploration → Evaluation → Pruning Loop

  • Exploration(탐색): 다양한 답변을 먼저 생성합니다.

  • Evaluation(평가): 생성된 답변을 비교하고 적합성을 평가합니다.

  • Pruning(제거): 불필요하거나 가치 없는 경로를 제거하여 효율성을 높입니다.

4. Tool 사용 및 Planning과의 결합

  • AI가 도구를 활용하거나 계획 수립 능력을 추가적으로 적용하여 더 지능적인 판단 구조를 구성

- Collaboration

여러 에이전트가 협력하여 복잡한 작업을 수행하는 구조

각각의 에이전트가 서로 다른 관점과 기능을 제공하여, 단일 에이전트가 할 수 없는 복잡한 과업을 분할/협력하여 처리

1. Parallel Collaboration (병렬 협업)

  • 여러 AI 에이전트가 동시에 작업을 수행하며, 각각의 결과를 통합하여 최종 결과를 도출하는 방식

  • 특징:

    • 작업이 병렬로 진행되어 속도가 빠릅니다.
    • 다양한 아이디어와 접근법을 한 번에 수집할 수 있습니다.
  • 예시:

    • 여러 에이전트가 서로 다른 아이디어를 제안 → 통합 에이전트가 이를 정리하여 최적의 결과를 도출.

2. Sequential Collaboration (순차 협업)

  • 에이전트들이 단계 별로 작업을 수행하며, 이전 단계의 결과를 다음 단계로 전달하는 방식

  • 특징:

    • 단계별로 깊이 있는 작업 수행 가능.
    • 각 단계에서 전문성을 가진 에이전트를 활용.
  • 예시:

    • 분석 → 요약 → 피드백 순서로 에이전트 연결.

3. Negotiation & Debates (협상 및 토론 기반 협업)

  • 서로 다른 의견이나 접근 방식을 가진 에이전트들이 토론과 협상을 통해 최적의 결론을 도출하는 방식

  • 특징:

    • 다양한 관점을 반영하여 더 나은 결정을 내릴 수 있습니다.
    • 의사결정 루프를 포함하여 최종 결정을 도출.
  • 예시:

    • 여러 에이전트가 각자의 의견을 제시하고 토론 → 합의를 통해 최종 결론 도출.

요약

  • 병렬, 순차, 협상 기반 협업은 각각의 상황과 문제에 따라 적합하게 활용될 수 있는 AI 설계 패턴입니다.

  • 이러한 구조는 AI 시스템의 효율성과 문제 해결 능력을 극대화하는 데 중요한 역할을 합니다.


from langgraph.graph import StateGraph
# Define your agent functions
def researcher(state): ...
def analyzer(state): ...
def strategist(state): ...
def writer(state): ...

# Define the graph
builder = StateGraph()
builder.add_node("researcher", researcher)
builder.add_node("analyzer", analyzer)
builder.add_node("strategist", strategist)
builder.add_node("writer", writer)

# Define agent flow
builder.set_entry_point("researcher")
builder.add_edge("researcher", "analyzer")
builder.add_edge("analyzer", "strategist")
builder.add_edge("strategist", "writer")
graph = builder.compile()
output = graph.invoke({"user_input": "EV 시장침체개선전략"})

⇒ 4개의 에이전트로 구성됨


2) Agentic RAG 필요성

단순 검색 도구가 아니라, 목적 지향적 사고를 수행하는 AI Agent에게 필요한 도구

⇒ 검색하는 과정에서 Agent가 다양한 DB와 Tool을 사용해서 검색하는 과정을 진행

(검색 전략을 스스로 세우고, 해당 전략을 검토하여 피드백을 진행함)


3) Agentic RAG란?

  • AI agent-based implementation of RAG

  • AI가 정보를 검색하고 생성하는 방식에서 Agent 처럼 동작하도록 설계된 개념

반복적인 검색과 생성 과정


4). Agentic RAG 프로세스


5) 특징 – Traditional vs Agentic, Single vs Multi

Traditional vs Agentic

구분Traditional RAGAgentic RAG
정보 검색 방식정적이고 단일 단계의 검색반복적이고 능동적인 검색
응답 생성 과정단순히 검색된 정보를 바탕으로 응답 생성검색된 정보를 요약, 통합, 분석 후 응답 생성
복잡한 요청 처리제한적인 특질성 처리다단계 요청을 처리하며, 불확실성 해결하도록 반복 처리
실시간성최신 정보 반영 어려움 (확보된 문서 기준 처리)최신 정보와 실시간 데이터 반영 가능
적용 사례Simple Q&A, FAQIn-depth Q&A, 검색 기반 보고서 생성


요약

  • Traditional RAG: 단순하고 정적이며 제한적인 방식으로 정보를 처리.

  • Agentic RAG: 반복적이고 능동적인 접근으로 복잡한 요청과 실시간 데이터를 처리하며 더 심층적인 응답 생성 가능.


Single vs Multi

구분Single (Vanilla) AgentMulti Agent
프로세스하나의 에이전트가 모든 작업(정보 검색, 생성, 판단 등)을 수행.여러 에이전트가 각각 다른 역할을 맡아 협력하며 작업 수행.
구조새로운 도구나 기능을 추가하려면 기존 에이전트의 기능을 확장해야 함.각 에이전트의 역할이 분리되어 있어 새로운 도구를 에이전트 단위로 구분하여 설계 추가 가능.
유연성/확장성단일 에이전트가 모든 작업을 처리.각 에이전트가 전문화된 작업을 병렬로 수행.
성능복잡한 작업에서는 성능 저하나 비효율 발생 가능.복잡한 작업에서도 성능을 확보하며 높은 효율성 유지 가능.
예시에이전트는 두 개 이상의 지식 소스를 검색하는 Router 역할 수행.메인 에이전트가 여러 특화 에이전트를 조율하여 다양한 소스(내부, 웹사이트, SNS, 이메일 등)에서 정보를 검색하고 통합하여 응답 생성.


요약

  • Single Agent: 단순한 구조로 모든 작업을 하나의 에이전트가 처리하며 확장성이 제한적.

  • Multi Agent: 전문화된 역할 분담과 협력을 통해 복잡한 작업에서도 효율적이고 유연한 성능 발휘 가능.


#3. AI Agent 구현

#3-1. Crew AI

Crew AI 핵심 개념 요약

1. Agent (에이전트)

  • 정의: CrewAI에서 특정 작업을 수행하도록 프로그래밍된 자율적인 AI.

  • 역할: 특정 능력과 역할을 통해 팀의 목표 달성에 기여.

  • 예시:

    • 데이터 분석 에이전트: 대규모 데이터를 처리하고 통계적 분석 수행.
    • 웹 검색 에이전트: 인터넷에서 필요한 정보를 빠르게 수집.

2. Tools (도구)

  • 정의: 에이전트가 작업을 수행하는 데 사용하는 소프트웨어, API, 데이터베이스 등.

  • 중요성: 적절한 도구 선택은 작업 효율성과 정확성에 큰 영향을 미침.

  • 예시:

    • 웹 검색 에이전트: Google API 활용.
    • 데이터 분석 에이전트: Python의 pandas 라이브러리 사용.

3. Task (태스크)

  • 정의: 에이전트가 수행해야 할 구체적인 과제나 작업.

  • 구성 요소: 작업의 세부 사항, 수행 방법, 필요한 도구 포함.

  • 예시:

    • "최신 트렌드 정보 검색 후 요약 보고서 작성"이라는 태스크는 웹 검색 에이전트와 텍스트 요약 에이전트가 협력하여 수행.

4. Process (프로세스)

  • 정의: 에이전트들이 태스크를 효율적으로 수행할 수 있도록 작업 흐름을 조정하는 역할.

  • 특징:

    • 태스크의 우선순위를 정하고 각 단계를 체계적으로 관리.
    • 각 단계에서 필요한 조치를 취함.
  • 예시:

    • 마케팅 캠페인을 위한 데이터 분석 프로세스:

      1. 데이터 수집
      2. 데이터 처리 및 분석
      3. 결과 보고서 작성

#3-2. Autogen

2개의 Agent 대화 방식


LangChain Expression Language (LCEL) 정리

  • *LCEL(LangChain Expression Language)**은 LangChain 프레임워크에서 사용되는 언어로, 언어 모델을 활용한 워크플로우를 효율적으로 구성하고 실행하기 위해 설계되었습니다.

  • 이를 통해 언어 모델 기반의 다양한 응용 프로그램을 생성하고 관리할 수 있습니다.


LCEL 주요 기능

  1. 스트리밍 지원

    • 개요: 체인의 중간 단계에서 빠르게 데이터를 받을 수 있음.
    • 용도: 웹 UI와 동일한 속도와 출력 제공.
  2. 비동기 지원

    • 개요: 비동기 API를 통해 체인의 실행 속도를 최적화.
    • 용도: 비동기 처리가 필요한 작업에 적합.
  3. 병렬 실행

    • 개요: 병렬 실행이 가능한 태스크를 자동으로 최적화.
    • 용도: 대규모 데이터 처리 및 성능 향상.
  4. 재시도 및 오류 처리

    • 개요: 오류가 발생한 체인을 자동으로 재시도하거나 복구.
    • 용도: 안정적인 워크플로우 보장.
  5. 중간결과 액세스

    • 개요: 체인의 중간 단계 결과에 접근 가능.
    • 용도: 사용자 상태 확인, 디버깅 등에 활용.
  6. 입/출력 스키마

    • 개요: 구조화된 데이터 처리를 위한 JSON Schema 지원.
    • 용도: 데이터 검증 및 일관성 유지.
  7. LangSmith 추적

    • 개요: 모든 단계에서 발생하는 API 처리 기록.
    • 용도: 디버깅 및 성능 분석.
  8. LangServe 배포

    • 개요: LCEL로 생성된 프로그램을 LangServe로 배포 가능.
    • 용도: 확장 가능한 서비스 배포.

- Agent Framework

Agent Framework 비교

항목CrewAIAutoGenLangGraph
주요 목적역할 기반 다중 에이전트 협업 시스템대화형 다중 에이전트 시나리오 자동화상태(State) 기반으로 에이전트 흐름 구성
핵심 구조Crew → Agents → Task + ProcessGroupChat, Assistant/Agent, UserProxy 등 모듈화Graph 구성요소: Node, Edge (Node=Agent, Edge=Flow)
흐름 제어 방식각 에이전트 역할과 순서 정의/선언대화 기반 흐름으로 상태 전이 자동/동적명시적 상태 전이를 통한 흐름 관리 (프로그래밍적 접근)
구현 편의성자연어 선언형 구성 용이대화 흐름 설계 필요프로그래밍 기반 설계/개발 필요
에이전트 메모리단기 기억 위주 (Task 단위로 Context 유지)상태 추적 지원 (모듈 기반 메모리 확장 가능)State와 Memory, Context를 자유롭게 설계 가능
확장성기본 구조는 고정모듈 기반 구성State 기반 구성
외부 연동LangChain 기반으로 RAG 등과 연동 가능API 호출, 함수 실행, 사용자 피드백 포함LangChain 생태계와 연결

사용 사례

  • CrewAI: 빠르고 직관적인 다중 에이전트 협업 도구가 필요할 때 적합. 역할 기반 협업 및 명확한 작업 분담에 유리.

  • AutoGen: 대화형 인터페이스와 반복 피드백 구조가 필요한 경우 적합. 사용자 참여형 시나리오 설계에 유리.

  • LangGraph: 복잡한 상태 관리와 흐름 제어가 필요한 프로세스 자동화에 적합. 명시적 상태 전이를 통한 정밀한 흐름 관리 가능.



LangGraph


[추가-1] 평가자, Query Transform(Rewrite)

[추가-2] 추가 검색기를 통하여 문맥(context) 보강

[추가-3] 문서-답변 간 관련성 여부를 판단하는 ’평가자2’를 추가하여 검증


LangGraph 구성 요소

구성 요소목적역할
Node어떤 작업(task)을 수행할지 정의특정 로직 수행 또는 상태 업데이트(입력으로 현재 상태를 받고, 업데이트된 상태 반환)
Edge다음으로 실행할 동작 정의워크플로우의 흐름 제어
조건부 라우팅, 다음에 실행할 노드 결정
Conditional Edge조건에 따른 분기 처리워크플로우의 흐름 제어
조건부 라우팅, 다음에 실행할 노드 결정
State현재의 상태값을 저장 및 전달전체 워크플로우의 컨텍스트 유지, 노드 간 정보 공유
  • State

LangGraph 전체 흐름의 기억 저장소이며, 노드 간 연결성과 판단을 위한 핵심 데이터 구조

⇒ State는 노드를 거치면서 “Overwrite 방식”으로 업데이트

  • Node

LangGraph의 각 단계를 수행하는 작업 유닛(함수)

⇒ LangGraph 내에서 실제로 어떤 행동(작업)을 수행하는 단위로 각 노드는 하나의 함수로 정의

  • Edge
    • Edge : A 다음에 B와 같이 순서를 연결하는 연결선
    • Conditional Edge : 신호등을 보고 갈림길을 선택하는 로직과 같이 에이전트가 상황을 보고 다음 행동을 판단/실행

# 데코레이터 추가하여 함수 -> 도구로 변환 
# LLM이 함수를 호출할 때 함수의 역할을 확인할 수 있도록 주석을 반드시 추가 (in English)

@tool
def add_numbers(a: int, b: int) -> int:
    """ Add two numbers
    """
    return a + b

@tool
def mult_numbers(a: int, b: int) -> int:
    """ Multiply two numbers
    """
    return a * b
    
add_numbers.invoke({'a': 10, 'b':5})

LLM 없이 작동하는 Tool 만들어보기

해당 코드는 LangChain에서 제공하는 @tool 데코레이터를 사용해서 "함수를 LangChain Tool로 등록" 한 것입니다.

하지만 여기서 보이는 add_numbers.invoke(...), mult_numbers.invoke(...) 는 그냥 Python 함수 호출처럼 실행되는 거고, LLM은 호출되지 X.


0개의 댓글