이제 RAG, 텍스트 청킹, 임베딩의 기본 사항을 다루었으니, 전체 RAG 파이프라인을 단계별로 살펴보겠습니다. 이 예제는 이러한 모든 요소가 어떻게 함께 작동하여 관련 정보를 검색하고 응답을 생성하는지 정확히 보여줄 것입니다.
1단계: 소스 텍스트 청킹
먼저, 소스 문서를 가져와 관리하기 쉬운 청크로 나눕니다. 이 예제에서는 두 개의 간단한 텍스트 섹션을 사용하겠습니다:
- 섹션 1: 의학 연구 - "올해는 이전에 본 적 없는 '버그'인 XDR-47에 대한 이해에서 중요한 진전이 있었습니다."
- 섹션 2: 소프트웨어 엔지니어링 - "이 부서는 분산 시스템에서 다양한 감염 경로를 연구하는 데 상당한 노력을 기울였습니다"
2단계: 임베딩 생성
다음으로, 임베딩 모델을 사용하여 각 텍스트 청크를 숫자 임베딩으로 변환합니다. 이를 더 쉽게 이해하기 위해, 항상 정확히 두 개의 숫자를 반환하는 완벽한 임베딩 모델이 있고, 각 숫자가 무엇을 나타내는지 알고 있다고 가정해 보겠습니다.

이 가상의 모델에서:
- 첫 번째 숫자는 텍스트가 의학 분야에 대해 얼마나 많이 이야기하는지를 나타냅니다
- 두 번째 숫자는 텍스트가 소프트웨어 엔지니어링에 대해 얼마나 많이 이야기하는지를 나타냅니다
의학 연구 섹션의 경우, [0.97, 0.34]를 얻을 수 있습니다 - 매우 의학 중심적이지만 "버그"라는 단어로 인해 약간의 소프트웨어 요소가 있습니다. 소프트웨어 엔지니어링 섹션의 경우, [0.30, 0.97]을 얻습니다 - 소프트웨어 중심적이지만 "감염 경로"로 인한 의학적 함의가 있습니다.
정규화
임베딩 API는 일반적으로 각 벡터의 크기를 1.0으로 조정하는 정규화 단계를 수행합니다. 여기서 수학에 대해 걱정할 필요는 없습니다 - 자동으로 처리됩니다. 이는 [0.944, 0.331]과 [0.295, 0.955]와 같은 정규화된 벡터를 제공합니다.

이러한 임베딩을 단위 원에서 시각화할 수 있으며, 각 점은 텍스트 청크 중 하나를 나타냅니다.

3단계: 벡터 데이터베이스에 저장
이러한 임베딩을 벡터 데이터베이스에 저장합니다 - 임베딩과 같은 긴 숫자 목록을 저장, 비교, 검색하는 데 최적화된 특수 데이터베이스입니다.

이 시점에서 잠시 멈춥니다. 지금까지의 모든 작업은 미리 수행되는 전처리였습니다. 이제 사용자가 쿼리를 제출하기를 기다립니다.
4단계: 사용자 쿼리 처리
사용자가 "회사에 대해 궁금합니다. 특히, 소프트웨어 엔지니어링 부서가 올해 무엇을 했나요?"와 같은 질문을 하면, 동일한 임베딩 모델을 통해 쿼리를 실행합니다.

이 쿼리는 [0.1, 0.89]와 같이 임베딩됩니다 - 낮은 의학 점수, 높은 소프트웨어 엔지니어링 점수. 정규화 후, [0.112, 0.993]을 얻습니다.
5단계: 유사한 임베딩 찾기
사용자의 쿼리 임베딩을 벡터 데이터베이스로 보내고 가장 유사한 저장된 임베딩을 찾도록 요청합니다.

데이터베이스는 사용자가 질문한 내용과 가장 가까운 일치이기 때문에 소프트웨어 엔지니어링 섹션을 반환합니다.
유사성 작동 방식: 코사인 유사도
벡터 데이터베이스는 코사인 유사도를 사용하여 어떤 임베딩이 가장 유사한지 결정합니다. 이는 두 벡터 사이의 각도의 코사인을 측정합니다.

코사인 유사도에 대한 주요 사항:
- 결과는 -1에서 1까지의 범위입니다
- 1에 가까운 값은 높은 유사성을 의미합니다
- -1에 가까운 값은 매우 다름을 의미합니다
- 0은 수직(관계 없음)을 의미합니다
이 예제에서, 사용자 쿼리와 소프트웨어 엔지니어링 청크 간의 코사인 유사도는 0.983입니다 - 매우 높은 유사성입니다. 의학 연구 청크와의 유사성은 0.398에 불과합니다 - 훨씬 낮습니다.
코사인 거리
벡터 데이터베이스 문서에서 "코사인 거리"를 자주 볼 수 있습니다. 이는 단순히 (1 - 코사인 유사도)로 계산됩니다. 코사인 거리를 사용하면:
- 0에 가까운 값은 높은 유사성을 의미합니다
- 값이 클수록 유사성이 낮음을 의미합니다
이 조정은 많은 맥락에서 숫자를 해석하기 더 쉽게 만듭니다.
6단계: 최종 프롬프트 생성
마지막으로, 사용자의 질문과 찾은 가장 관련성 있는 텍스트 청크를 가져와 프롬프트로 결합하고 응답을 위해 Claude에 전송합니다.

프롬프트는 다음과 같을 수 있습니다:
Answer the user's question about the financial document.
<user_question>
How many bugs did engineers fix this year?
</user_question>
<report>
## Section 2: Software Engineering
This division dedicated significant effort to studying various infection vectors in our distributed systems
</report>이것이 완전한 RAG 파이프라인입니다! 시스템은 의미적 유사성을 기반으로 가장 관련성 있는 정보를 성공적으로 검색하고 정확한 응답을 생성하기 위한 컨텍스트로 제공했습니다.