기존 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 도구는 전체 텍스트를 다시 반환하는 대신 “이 청크는 이전에 읽었습니다”라는 알림 메시지를 반환하여 추가 토큰을 소비하지 않게 함.