//
컨텍스트를 구성할 때 주로 검색 증강 생성(RAG)과 에이전트 두 가지 패턴을 사용한다.
RAG는 외부 메모리 소스에서 관련 정보를 검색하여 모델의 생성을 향상시키는 기술이다. 모든 질의에 동일한 컨텍스트를 사용하지 않고, 각 질의에 특화된 컨텍스트를 만들어낸다.
RAG는 검색기(Retriever)와 생성 모델(Generator) 두 가지 구성 요소로 이루어진다. 시스템의 성공은 검색기의 품질에 달려 있으며, 검색기에는 색인화(Indexing)와 질의(Query)라는 두 가지 주요 기능이 있다.
검색은 크게 두 가지로 나뉜다.
어휘적 검색(Lexical Retrieval), 즉 키워드 검색 방식이다.
TF-IDF를 활용한 대표적인 솔루션은 다음과 같다.
문서의 의미가 질의와 얼마나 가까운지를 기준으로 순위를 매기는 의미 기반 검색(Semantic Retrieval)을 수행한다. 색인화 시 청크를 임베딩으로 변환하여 벡터 데이터베이스에 저장한다.
# 코사인 유사도 계산 예시 (Python)
import numpy as np
def cosine_similarity(a, b):
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
query_emb = embed("RAG란 무엇인가?")
doc_emb = embed("검색 증강 생성은 외부 지식을...")
score = cosine_similarity(query_emb, doc_emb) # 0~1 사이 값
k-최근접 이웃(k-NN) 알고리즘은 코사인 유사도 등으로 계산하며, 정확하지만 느리기 때문에(O(N) 복잡도) 근사 최근접 이웃(ANN) 알고리즘을 사용하기도 한다. ANN은 100% 정확하지는 않지만 속도가 훨씬 빠르다.
대표적인 벡터 검색 알고리즘은 다음과 같다.
| 알고리즘 | 연도 | 방식 | 구현체 |
|---|---|---|---|
| LSH(지역 민감 해싱) | 1999 | 유사 벡터를 같은 버킷에 해싱 | FAISS, Annoy |
| HNSW(계층적 탐색 가능한 소규모 세계) | 2016 | 다중 레이어 그래프 탐색 | FAISS, Milvus |
| PQ(제품 양자화) | 2011 | 벡터를 저차원 하위 벡터로 분해 | FAISS 핵심 구성요소 |
| IVF(역파일 색인) | 2003 | K-평균 클러스터링으로 벡터 그룹화 | 다수 라이브러리 |
| Annoy(근사 최근접 이웃) | 2013 | 이진 트리 기반 공간 분할 | Annoy |
검색기 품질을 측정하는 주요 지표는 다음과 같다.
용어 기반 검색과 임베딩 기반 검색의 장점을 결합하는 방식이다.
두 번째 단계를 재순위화(Reranking)라고 한다. 서로 다른 알고리즘을 앙상블로 결합하기도 하며, RRF(Reciprocal Rank Fusion)는 서로 다른 검색 결과의 순위를 결합하는 대표적인 방법이다.
| 청킹 방식 | 특징 | 적합한 경우 |
|---|---|---|
| 고정 길이 분할 | 단순, 빠름 | 균일한 구조의 문서 |
| 재귀적 분할 | 문단/섹션 경계 존중 | 구조화된 문서 (기술 문서 등) |
| 의미 기반 분할 | 의미 단위로 분할 | 비구조화된 긴 텍스트 |
| Q&A 쌍 구성 | 질문-답변 쌍으로 변환 | FAQ, 고객 지원 |
실무에서 RAG 파이프라인을 구축할 때, 처음부터 복잡한 구성을 시도하기보다 BM25 + 고정 길이 청킹으로 시작하고 평가 결과를 보면서 점진적으로 개선하는 것이 효과적이다. 많은 경우 단순한 파이프라인이 놀라울 만큼 좋은 성능을 보인다.
에이전트는 자신의 환경을 인식하고 그 환경에서 행동할 수 있는 모든 것을 말한다. 작동하는 환경과 수행할 수 있는 행동들로 정의된다.
도구가 많을수록 에이전트의 능력은 향상되지만, 제대로 활용하는 것이 더 어려워진다. 세 가지 유형이 있다.
계획 수립의 기본 흐름은 다음과 같다.
성찰(Reflection)까지 적용하면 다음과 같이 확장된다.
계획만 세워서도 안 되고, 계획 없이 실행해서도 안 된다. 계획 수립은 본질적으로 탐색 문제이며, 탐색 과정에서 백트래킹이 필요한 경우가 많다. 이것이 에이전트가 단순한 프롬프트 체이닝과 다른 핵심적인 차이점이다.
복잡한 계획에는 순차 실행, 병렬 실행, 조건문, 반복문 등이 포함된다. 사실상 에이전트의 계획 수립은 프로그래밍의 제어 흐름과 유사하다.
성찰은 두 모듈로 나뉜다.
각 단계에서 평가와 성찰 후, 에이전트는 새로운 궤적(Trajectory)을 제안한다.
도구 선택의 품질을 높이기 위한 방법들이 있다.
가장 흔한 계획 수립 실패 유형은 도구 사용 실패이며, 다른 유형은 성찰 오류다.
AI 모델의 메모리는 세 가지로 나뉜다.
| 메모리 유형 | 비유 | 특성 | 예시 |
|---|---|---|---|
| 내부 지식 | 사람의 학습된 지식 | 학습 시 결정, 변경 불가 | 모델 파라미터에 인코딩된 세계 지식 |
| 단기 메모리 | 작업 기억 | 대화 내 유지, 컨텍스트 길이 제한 | 현재 대화의 이전 턴 내용 |
| 장기 메모리 | 노트 / 일기장 | 대화 간 유지, 외부 저장소 필요 | 사용자 선호도, 이전 대화 요약 |
메모리 시스템은 메모리 관리와 메모리 검색 두 가지 핵심 기능으로 구성된다.
효율적인 메모리 사용을 위해 선입선출(FIFO) 전략이 가장 간단하지만, 중요한 정보가 삭제될 수 있다. 중복 자동 감지를 통해 메모리 사용량을 절감하기도 한다. 최근에는 중요도 기반 필터링이나 요약 기반 압축 등 더 정교한 전략이 연구되고 있다.
RAG에 대해 보다 깊이 이해할 수 있었다. 특히 임베딩 기반 검색 부분이 도움이 되었고, 검색 최적화에서 질의 재작성과 컨텍스트 검색은 실무에서도 검토가 필요한 부분이다. 에이전트의 성찰(리플렉션)은 고도화 대상으로 유익했으며, 도구를 조합한 복합 도구의 가능성도 기능적으로 고려해볼 만하다.