본문 바로가기
Study/논문 리뷰

[논문 리뷰] A-RAG: Scaling Agentic Retrieval-Augmented Generation viaHierarchical Retrieval Interfaces

by kimdaepa 2026. 7. 13.

기존 RAG 방법

  • 그래프 구조의 사용 여부와 상관없이, 무조건 문서를 검색 후 모델 입력에 사용하는 프로세스
  • 워크플로를 미리 정의하고 모델이 여러 반복 단계에서 이를 차례대로 수행하도록 프롬프트 하는 방식

⇒ 서로 다른 상호작용 전략을 선택, 충분한 근거가 수집 되었는지는 스스로 판단하진 않는다.

AgentRAG의 핵심 구성 요소

1. 계층적 인덱스

  • 효율적인 다중 입도 검색을 가능하기 위해, 코퍼스 정보를 서로 다른 추상화 수준으로 설계
  • 색인 절차는 가볍고, 청킹과 임베딩의 두 단계로 구성

1-1. 청킹

  • LinearRAG의 설정을 따라, 코퍼스는 약 1,000토큰 단위의 청크로 분할
  • 단, 문장 경계와 맞도록 하여 의미적 일관성 보존
    • 각 청크가 독립적인 의미 단위가 되게 함

1-2. 임베딩

  • 각 청크를 규칙 기반 문장 분할을 사용하여 재분해
  • 이후 사전 학습된 문장 인코더 사용하여 밀집 벡터 표현으로 게산

1-3. 키워드

  • 사전 색인은 피함.
  • 단순 코퍼스와 텍스트 매칭을 수행

2. 계층적 검색 인터페이스

2-1. Keyword Search

  • 특정 용어를 포함하는 청크를 찾기 위해 정확한 어휘 매칭 수행
  • 에이전트는 키워드 목록 및 개수를 반환
  • 청크 c_i의 관련도 점수 = (키워드가 청크 텍스트 T_i에 등장하는 빈도) x (키워드 길이)
    • 긴 키워드는 일반적으로 더 구체적이므로 더 높은 가중치를 받음
  • 매칭된 각 청크에 대해서도 적어도 하나의 키워드를 포함하는 문장만 추출하여 축약 스니펫 구성
    • 예시
      • 현재 키워드가 ["상대성이론", "1905"]이고 3번 청크가 아래와 같다면
      문장1: 20세기 물리학은 큰 전환기를 맞았다.
      문장2: 아인슈타인은 1905년 특수 상대성이론을 발표했다.   **← "1905" 있음 ✓**
      문장3: 이는 뉴턴 역학의 한계를 드러냈다.
      문장4: 이후 1915년 일반 상대성이론으로 확장되었다.       **← "상대성이론" 있음 ✓**
      문장5: 당시 학계는 이를 쉽게 받아들이지 못했다.
      
      • 키워드를 하나라도 포함한 2번, 4번만 뽑아서 스니펫 구성
      청크 ID: c_3
      스니펫: "아인슈타인은 1905년 특수 상대성이론을 발표했다.
      이후 1915년 일반 상대성이론으로 확장되었다."
      
  • 도구 Return (상위 k개 청크 ID, 스니펫)
  • 에이전트는 이를 통해 다음 행동을 자율적으로 결정

2-2. Semantic Search

  • 밀집 검색을 사용해 의미적으로 유사한 구절을 찾음
  • 자연어 쿼리 q가 주어지면, 이를 임베딩 후 모든 문장 임베딩과 코사인 유사도를 계산
  • 최상위 문장을 검색 후 부모 청크 기준으로 집계
  • 각 청크의 관련도 점수는 그 청크 안에서 가장 높은 점수를 받은 문장으로 결정
  • 도구 Return (상위 k개 청크 ID, 각 청크에서 매칭된 문장(스니펫)

2-3. Chunk Read

  • 키워드 검색과 의미 검색이 반환한 스니펫을 바탕으로 에이전트는 어떤 청크를 전체 읽기해야 하는지 결정
  • 이 도구는 해당 청크의 전체 내용을 제공
  • 필요한 경우, 에이전트는 인접 청크도 읽어 추가 문맥을 수집할 수 있음

3. 에이전트 루프

3-1. React 방식

  • [생각 → 행동 → 결과 확인 → 다시 생각 → … ] 를 반복하는 가장 기본적인 방식
    • 예시
    • 생각: "연도를 정확히 찾아야겠다" 행동: keyword_search(["상대성이론", "1905"], k=5) 호출 관찰: 스니펫 5개 받음 생각: "c_3이 유력한데 문맥이 더 필요하네" 행동: chunk_read(c_3) 호출 관찰: 원문 읽음 생각: "이제 답할 수 있다" → 답변 생성
  • 중요: 최대 반복 횟수를 정해놔야 함.

3-2. 문맥 추적기

  • 중복 문서 검색과 불필요한 토큰 소비를 막기 위해, 검색 과정에서 이미 읽은 청크를 기록하는 문맥 추적기를 유지
  • 이미 접근한 청크 ID 집합을 C_read = {c_i1, c_i2, … , c_ik}라고 한다면, 에이전트가 C_read에 속한 청크를 다시 읽으려 할 때, chunk_read 도구는 전체 텍스트를 다시 반환하는 대신 “이 청크는 이전에 읽었습니다”라는 알림 메시지를 반환하여 추가 토큰을 소비하지 않게 함.