RAG(검색 증강 생성)는 ChatGPT와 같은 채팅 완료 모델의 기능을 증강하여 정보 검색 단계를 추가하고, 답변 수식화를 위해 독점적인 엔터프라이즈 콘텐츠를 통합하는 디자인 패턴입니다. 엔터프라이즈 솔루션의 경우, 생성형 AI를 엔터프라이즈 콘텐츠에 완전히 제한할 수 있습니다.
LLM에 대한 입력을 결정하므로 사용할 정보 검색 시스템에 대한 결정이 중요합니다. 정보 검색 시스템은 다음을 제공해야 합니다.
필요한 빈도로 모든 콘텐츠에 대해 대규모로 로드 및 새로 고침하는 인덱싱 전략입니다.
쿼리 기능 및 관련성 튜닝 시스템은 LLM(대규모 언어 모델) 입력의 토큰 길이 요구 사항을 충족하는 데 필요한 단축 형식으로 관련 결과를 반환해야 합니다. 쿼리 처리 시간은 최대한 빨라야 합니다.
데이터 및 작업 모두에 대한 보안, 글로벌 도달률 및 안정성.
인덱싱을 위한 포함 모델 및 검색을 위한 채팅 모델 또는 언어 이해 모델과의 통합
Azure AI 검색은 RAG 아키텍처에서 정보 검색을 위한 검증된 솔루션입니다. Azure 클라우드의 인프라 및 보안과 함께 인덱싱 및 쿼리 기능을 제공합니다. 코드 및 기타 구성 요소를 통해 독점 콘텐츠에 대한 생성 AI의 모든 요소를 포함하는 포괄적인 RAG 솔루션을 디자인할 수 있습니다.
RAG 워크로드에 대한 두 가지 방법, 즉 에이전트 검색 또는 클래식 RAG의 원래 쿼리 아키텍처 중에서 선택할 수 있습니다.
Note
부조종사 및 RAG 개념이 새로운가요? 생성 AI 앱에 대한 벡터 검색 및 최신 상태 검색을 확인하세요.
에이전트 기반 검색을 사용하는 현대 RAG
이제 Azure AI Search는 RAG 패턴을 위해 특별히 설계된 특수 파이프라인, 즉 Agentic Retrieval을 제공합니다. 이 방법은 큰 언어 모델을 사용하여 복잡한 사용자 쿼리를 집중된 하위 쿼리로 지능적으로 분석하고, 병렬로 실행하고, 채팅 완성 모델에 최적화된 구조적 응답을 반환합니다.
에이전트 검색은 기존 단일 쿼리 RAG 패턴에서 다중 쿼리 지능형 검색으로의 진화를 나타내며 다음을 제공합니다.
- 대화 기록을 사용하여 컨텍스트 인식 쿼리 계획
- 여러 포커스가 있는 하위 쿼리의 병렬 실행
- 접지 데이터, 인용 및 실행 메타데이터를 사용하는 구조적 응답
- 최적의 관련성을 위한 내장된 의미 기반 순위
- 쿼리 응답에서 LLM으로 수식화된 대답을 사용하는 선택적 응답 합성입니다.
이 파이프라인에는 하나 이상의 기술 자료, 지식 에이전트 및 애플리케이션 코드에서 호출하는 검색 작업(예: 에이전트와 함께 작동하는 도구)의 새 개체가 필요합니다.
새 RAG 구현의 경우 에이전트 검색부터 시작하는 것이 좋습니다. 기존 솔루션의 경우 향상된 정확도와 컨텍스트 이해를 활용하도록 마이그레이션하는 것이 좋습니다.
Azure AI Search에 대한 클래식 RAG 패턴
RAG 솔루션은 원래 쿼리 실행 아키텍처를 사용하여 Azure AI Search에서 구현할 수 있습니다. 이 방법을 사용하면 애플리케이션이 단일 쿼리 요청을 Azure AI Search로 보내고, 검색 엔진이 요청을 처리하고, 검색 결과를 호출자에게 반환합니다. 쿼리 계획 또는 답변 공식화를 위해 LLM을 우회할 필요가 없습니다. 응답에는 쿼리 실행 세부 정보가 없으며, 인덱스에 부모 문서 이름 또는 페이지를 제공하는 필드가 있는 경우에만 인용이 응답에 기본 제공됩니다. 이 방법은 더 적은 수의 구성 요소로 더 빠르고 간단합니다. 애플리케이션 요구 사항에 따라 최상의 선택이 될 수 있습니다.
Azure AI Search를 기반으로 하는 클래식 RAG 패턴에 대한 대략적인 요약은 다음과 같습니다.
- 사용자 질문 또는 요청(프롬프트)으로 시작합니다.
- Azure AI Search에 쿼리 요청으로 보내 관련 정보를 찾습니다.
- 최상위 검색 결과를 LLM에 반환합니다.
- LLM의 자연어 이해 및 추론 기능을 사용하여 초기 프롬프트에 대한 응답을 생성합니다.
Azure AI 검색은 LLM 프롬프트에 입력을 제공하지만 모델을 학습하지는 않습니다. 기존의 RAG 패턴에서는 추가 학습이 없습니다. LLM은 공용 데이터를 사용하여 미리 학습되지만, 검색기(이 경우 Azure AI 검색)에서 제공된 정보에 따라 보강된 응답을 생성합니다.
Azure AI 검색을 포함하는 RAG 패턴에는 다음 그림에 표시된 요소가 있습니다.
- 사용자 환경을 위한 앱 UX(웹앱)
- 앱 서버 또는 오케스트레이터(통합 및 조정 계층)
- Azure AI 검색(정보 검색 시스템)
- Azure OpenAI(생성 AI용 LLM)
웹앱은 프레젠테이션, 컨텍스트 및 사용자 상호 작용을 제공하는 사용자 환경을 제공합니다. 사용자의 질문 또는 프롬프트는 여기에서 시작합니다. 입력은 통합 계층을 통과하여 먼저 정보 검색으로 이동하여 검색 결과를 가져올 뿐만 아니라 LLM으로 이동하여 컨텍스트와 의도를 설정합니다.
앱 서버 또는 오케스트레이터는 정보 검색과 LLM 간의 핸드오프를 조정하는 통합 코드입니다. 일반적인 솔루션에는 워크플로를 조정하기 위한 Azure 의미 체계 커널 또는 LangChain이 포함됩니다. LangChain은 Azure AI 검색과 통합되어 Azure AI 검색을 워크플로에 검색자로 쉽게 포함할 수 있습니다. LlamaIndex 및 의미 체계 커널도 다른 옵션입니다.
정보 검색 시스템은 검색 가능한 인덱스, 쿼리 논리 및 페이로드(쿼리 응답)를 제공합니다. 검색 인덱스에는 벡터 또는 비벡터 콘텐츠가 포함될 수 있습니다. 대부분의 샘플 및 데모에는 벡터 필드가 포함되어 있지만 요구 사항은 아닙니다. 쿼리는 키워드(또는 용어) 및 벡터 쿼리를 처리할 수 있는 Azure AI 검색의 기존 검색 엔진을 사용하여 실행됩니다. 인덱스는 사용자가 정의한 스키마를 기반으로 미리 만들어지고 파일, 데이터베이스 또는 스토리지에서 제공되는 콘텐츠와 함께 로드됩니다.
LLM은 원래 프롬프트와 Azure AI 검색의 결과를 받습니다. LLM은 결과를 분석하고 응답을 작성합니다. LLM이 ChatGPT인 경우 사용자 상호 작용은 여러 대화 턴으로 구성될 수 있습니다. Azure 솔루션은 Azure OpenAI를 사용할 가능성이 높지만 이 특정 서비스에 대한 하드 종속성은 없습니다.
Azure AI 검색에서 검색 가능한 콘텐츠
Azure AI 검색에서 검색 가능한 모든 콘텐츠는 검색 서비스에 호스트되는 검색 인덱스로 저장됩니다. 검색 인덱스는 응답 시간이 밀리초인 빠른 쿼리를 위해 설계되었기 때문에 해당 목표를 지원하기 위해 내부 데이터 구조가 존재합니다. 이를 위해 검색 인덱스는 전체 PDF 또는 이미지와 같은 전체 콘텐츠 파일이 아닌 인덱싱된 콘텐츠를 저장합니다. 내부적으로 데이터 구조에는 토큰화된 텍스트의 반전된 인덱스, 포함을 위한 벡터 인덱스 및 축자 일치가 필요한 경우(예: 필터, 유사 항목 검색, 정규식 쿼리) 변경되지 않은 일반 텍스트가 포함됩니다.
RAG 솔루션에 대한 데이터를 설정할 때 Azure AI 검색에서 인덱스 만들기 및 로드 기능을 사용합니다. 인덱스로는 원본 콘텐츠를 복제하거나 나타내는 필드가 포함됩니다. 인덱스 필드는 단순 전송(원본 문서의 제목 또는 설명이 검색 인덱스의 제목 또는 설명이 됨)이거나, 이미지의 표현이나 텍스트 설명을 생성하는 벡터화 또는 기술 처리와 같은 외부 프로세스의 출력을 필드에 포함할 수 있습니다.
검색하려는 콘텐츠 종류를 알고 있으므로 각 콘텐츠 형식에 적용할 수 있는 인덱싱 기능을 고려합니다.
| 콘텐츠 형식 | 인덱싱됨 | Features |
|---|---|---|
| text | 토큰, 변환되지 않은 텍스트 | 인덱서는 Azure Storage 및 Cosmos DB와 같은 다른 Azure 리소스에서 일반 텍스트를 가져올 수 있습니다. JSON 콘텐츠를 인덱스로 푸시할 수도 있습니다. 진행 중인 텍스트를 수정하려면 분석기 및 정규화를 사용하여 인덱싱하는 동안 어휘 처리를 추가합니다. 동의어 맵은 원본 문서에 쿼리에 사용될 수 있는 용어가 누락된 경우에 유용합니다. |
| text | 벡터 1 | 텍스트를 인덱서 파이프라인에 청크 및 벡터화하거나 외부적으로 처리한 다음, 인덱스 내의 벡터 필드로 인덱싱할 수 있습니다. |
| image | 토큰, 변경되지 않은 텍스트 2 | OCR 및 이미지 분석을 위한 기술은 텍스트 인식 또는 이미지 특성에 대한 이미지를 처리할 수 있습니다. 기술에는 인덱서 요구 사항이 있습니다. |
| image | 벡터 1 | 이미지는 인덱서 파이프라인에 벡터화하거나 이미지 콘텐츠의 수학 표현을 위해 외부에서 처리한 다음, 인덱스의 벡터 필드로 인덱싱할 수 있습니다. Azure AI Vision 다중 모달 또는 OpenAI CLIP과 같은 오픈 소스 모델을 사용하여 텍스트와 이미지를 동일한 포함 공간에 벡터화할 수 있습니다. |
1 Azure AI 검색은 통합 데이터 청크 및 벡터화를 제공하지만 인덱서 및 기술 세트에 종속되어 있습니다. 인덱서를 사용할 수 없는 경우 Microsoft의 의미 체계 커널 또는 기타 커뮤니티 제품을 통해 전체 스택 솔루션을 사용할 수 있습니다. 두 방법을 모두 보여 주는 코드 샘플은 azure-search-vectors-sample 리포지토리를 참조하세요.
2 이미지 설명은 검색 가능한 텍스트로 변환되어 인덱스에 추가됩니다. 이미지 자체는 인덱스에 저장되지 않습니다. Applied AI에 기술이 기본적으로 지원됩니다. 이미지 설명 및 언어화를 위해 인덱싱 파이프라인은 Azure OpenAI 또는 Azure AI Vision에 대한 내부 호출을 수행합니다. 이러한 기술은 처리를 위해 추출된 이미지를 전달하고 Azure AI Search에서 인덱싱된 텍스트로 출력을 받습니다. 기술은 통합 데이터 청크 및 포함에도 사용됩니다.
벡터는 콘텐츠가 수학 표현으로 보편적으로 표현되기 때문에 서로 다른 콘텐츠(여러 파일 형식 및 언어)에 가장 적합한 숙박 시설을 제공합니다. 벡터는 벡터 쿼리와 가장 유사한 좌표에서 일치하는 유사성 검색도 지원합니다. 토큰화된 용어와 일치하는 키워드 검색(또는 용어 검색)에 비해 유사성 검색은 더 미묘합니다. 콘텐츠 또는 쿼리에 모호성 또는 해석 요구 사항이 있는 경우 더 나은 선택입니다.
Azure AI 검색의 콘텐츠 검색
데이터가 검색 인덱스로 저장되면 Azure AI 검색의 쿼리 기능을 사용하여 콘텐츠를 검색합니다.
비 RAG 패턴에서 쿼리는 검색 클라이언트에서 왕복합니다. 쿼리가 제출되고, 검색 엔진에서 실행되며, 응답이 클라이언트 애플리케이션에 반환됩니다. 응답 또는 검색 결과는 인덱스의 축자 콘텐츠로만 구성됩니다.
클래식 RAG 패턴에서 쿼리 및 응답은 검색 엔진과 LLM 간에 조정됩니다. 사용자의 질문 또는 쿼리는 검색 엔진과 LLM에 프롬프트로 전달됩니다. 검색 결과는 검색 엔진에서 돌아와 LLM으로 리디렉션됩니다. 사용자에게 반환되는 응답은 LLM의 합계 또는 답변인 생성 AI입니다.
최신 에이전트 검색 RAG 패턴에서 쿼리 및 응답은 쿼리 계획 및 선택적 답변 공식에 대한 도움을 받기 위해 LLM과 통합됩니다. 쿼리 입력은 채팅 기록과 사용자의 질문으로 더 풍부할 수 있습니다. LLM은 인덱싱된 콘텐츠에 대해 최상의 범위를 위해 하위 쿼리를 설정하는 방법을 결정합니다. 응답에는 검색 결과뿐만 아니라 쿼리 실행 세부 정보 및 원본 문서가 포함됩니다. 선택적으로 쿼리 파이프라인 외부에서 발생하는 다른 패턴에서 발생하는 응답 공식을 포함할 수 있습니다.
쿼리를 작성하는 데 사용되는 Azure AI 검색의 기능은 다음과 같습니다.
| 쿼리 기능 | Purpose | 사용하는 이유 |
|---|---|---|
| 에이전트 검색(미리 보기) | 여러 개의 하위 쿼리로 구성된 병렬 쿼리 실행 파이프라인으로, RAG 워크로드와 에이전트 소비자를 위해 설계된 응답을 반환합니다. 쿼리는 벡터 쿼리나 키워드 검색이 될 수 있습니다. 의미 체계 순위는 하위 쿼리의 가장 좋은 결과가 최종 응답 구조에 포함되도록 보장합니다. 이는 Azure AI 검색 기반 RAG 패턴에 권장되는 방식입니다. | |
| 키워드 검색 | 텍스트 및 비벡터 숫자 콘텐츠에 대한 쿼리 실행 | 전체 텍스트 검색은 유사한 일치 항목보다는 정확한 일치 항목에 가장 적합합니다. 전체 텍스트 검색 쿼리는 BM25 알고리즘을 사용하여 순위가 매겨지고 점수 매기기 프로필을 통한 관련성 튜닝을 지원합니다. 필터 및 패싯도 지원합니다. |
| 벡터 검색 | 쿼리 문자열이 하나 이상의 벡터인 유사성 검색을 위해 벡터 필드에 대한 쿼리 실행 | 벡터는 모든 형식의 콘텐츠를 모든 언어로 나타낼 수 있습니다. |
| 하이브리드 검색 | 위의 쿼리 기술을 모두 결합합니다. 벡터 및 비벡터 쿼리는 병렬로 실행되며 통합된 결과 집합에 반환됩니다. | 정밀도 및 재현율에서 가장 큰 이득은 하이브리드 쿼리를 통해서입니다. |
| 필터 및 패싯 | 텍스트 또는 숫자(비벡터) 필드에만 적용됩니다. 포함 또는 제외 조건에 따라 검색 노출 영역을 줄입니다. | 쿼리에 정밀도를 추가합니다. |
쿼리 응답 구조화
쿼리의 응답은 LLM에 대한 입력을 제공하므로 검색 결과의 품질이 성공에 매우 중요합니다. 결과는 테이블 형식 행 집합입니다. 결과의 컴퍼지션 또는 구조는 다음에 따라 달라집니다.
- 응답에 포함되는 인덱스의 부분을 결정하는 필드.
- 인덱스의 일치 항목을 나타내는 행.
특성이 "검색 가능"인 경우 검색 결과에 필드가 표시됩니다. 인덱스 스키마의 필드 정의에는 특성이 있으며 응답에 필드가 사용되는지 여부를 결정합니다. "검색 가능한" 필드만 전체 텍스트 또는 벡터 쿼리 결과에 반환됩니다. 기본적으로 "검색 가능한" 모든 필드가 반환되지만 "선택"을 사용하여 하위 집합을 지정할 수 있습니다. "검색 가능" 외에 필드에는 제한이 없습니다. 필드는 길이 또는 형식일 수 있습니다. 길이와 관련하여 Azure AI 검색에는 최대 필드 길이 제한이 없지만 API 요청의 크기에는 제한이 있습니다.
행은 쿼리와 일치하며 관련성, 유사성 또는 둘 다에 따라 순위가 매겨집니다. 기본적으로 결과는 전체 텍스트 검색의 상위 50개 일치 항목 또는 벡터 검색의 k 가장 인접한 일치 항목으로 제한됩니다. 기본값을 변경하여 최대 1,000개의 문서까지 제한을 늘리거나 줄일 수 있습니다. 위쪽 및 페이징 매개 변수를 건너뛰어 결과를 일련의 페이징된 결과로 검색할 수도 있습니다.
관련성 및 재현율 최대화
복잡한 프로세스, 많은 양의 데이터 및 밀리초 응답에 대한 기대치를 사용하는 경우 각 단계에서 가치를 추가하고 최종 결과의 품질을 향상시키는 것이 중요합니다. 정보 검색 쪽에서 관련성 튜닝은 LLM에 전송된 결과의 품질을 향상시키는 작업입니다. 가장 관련성이 있거나 가장 유사한 문서만 결과에 포함되어야 합니다.
관련성 및 재현율을 극대화하기 위한 몇 가지 팁은 다음과 같습니다.
키워드(비벡터) 검색 및 벡터 검색을 결합하는 하이브리드 쿼리는 입력이 동일한 경우 최대 재현율을 제공합니다. 하이브리드 쿼리에서 동일한 입력을 두 배로 줄이면 텍스트 문자열과 해당 벡터가 키워드 및 유사성 검색에 대한 병렬 쿼리를 생성하여 통합된 결과 집합의 각 쿼리 형식에서 가장 관련성이 큰 일치 항목을 반환합니다.
하이브리드 쿼리는 광범위할 수도 있습니다. 동일한 요청에서 자세한 청크 분할 콘텐츠에 대해 유사성 검색을 실행하고 이름에 대해 키워드 검색을 실행할 수 있습니다.
관련성 튜닝은 다음을 통해 지원됩니다.
일치 항목이 특정 검색 필드 또는 다른 조건에 있는 경우 검색 점수를 높이는 점수 매기기 프로필입니다.
Bing의 의미 체계 모델을 사용하여 초기 결과 집합의 순위를 다시 매기는 의미 순위매기기는 원래 쿼리에 더 적합한 의미 체계를 위해 결과를 다시 정렬합니다.
미세 조정을 위한 쿼리 매개 변수. 벡터 쿼리의 중요도를 높이거나 하이브리드 쿼리 응답에서 BM25 순위 결과의 양을 조정할 수 있습니다. 벡터 쿼리에서 낮은 점수 매기기 결과를 제외하도록 최소 임계값을 설정할 수도 있습니다.
비교 및 벤치마크 테스트에서 텍스트 및 벡터 필드가 있는 하이브리드 쿼리는 의미 체계 순위로 보완되어 가장 관련성이 높은 결과를 생성합니다.
통합 코드 및 LLM
Azure AI 검색을 포함하는 RAG 솔루션은 기본 제공 데이터 청크 및 벡터화 기능을 활용하거나 의미 체계 커널, LangChain 또는 LlamaIndex와 같은 플랫폼을 사용하여 직접 빌드할 수 있습니다.
Azure OpenAI 및 Azure AI Search를 사용하는 전체 스택 RAG 채팅 앱의 예제를 보려면 Azure OpenAI 데모를 사용하는 것이 좋습니다.
시작하는 방법
코드 우선 솔루션 및 데모를 포함하여 시작하는 방법에는 여러 가지가 있습니다.
에이전트 검색과 클래식 RAG 중에서 선택하는 데 도움이 필요하면 사용자 고유의 데이터를 사용하여 개발 노력을 이해하고 결과를 비교하는 몇 가지 빠른 시작을 시도해 보세요.
RAG에 대한 새롭고 권장되는 방식을 살펴보려면 이 에이전트 검색 빠른 시작을 시도해 보세요.
검색 인덱스로 채팅 모델과 쿼리 통합의 데모를 보려면 이 클래식 RAG 빠른 시작을 사용해 보세요.
인덱싱 개념 및 전략을 검토하여 데이터를 수집하고 새로 고치는 방법을 결정합니다. 벡터 검색, 키워드 검색 또는 하이브리드 검색을 사용할지 여부를 결정합니다. 검색해야 하는 콘텐츠의 종류와 실행하려는 쿼리 유형에 따라 인덱스 디자인이 결정됩니다.
검색 요청 구문과 요구 사항에 대해 자세히 알아보려면 쿼리 만들기를 검토합니다.
Note
일부 Azure AI 검색 기능은 인간 상호 작용을 위한 것이며 RAG 패턴에서는 유용하지 않습니다. 특히 자동 완성이나 제안과 같은 기능을 건너뛸 수 있습니다. 패싯 및 orderby와 같은 다른 기능은 유용할 수 있지만 RAG 시나리오에서는 일반적이지 않습니다.