? 멋진 검색 증강 생성(RAG)
이 저장소에는 Generative AI의 RAG(Retrieval-Augmented Generation) 애플리케이션에 대한 선별된 Awesome List 및 일반 정보가 포함되어 있습니다.
RAG(검색 증강 생성)는 LLM(대형 언어 모델)의 생성 프로세스를 강화하기 위해 외부 소스에서 추가 컨텍스트를 검색하는 생성 AI의 기술입니다. 이 접근 방식을 통해 LLM은 사전 교육 데이터만으로는 부족할 수 있는 최신, 특정 또는 민감한 정보를 통합할 수 있습니다.
콘텐츠
- RAG에 대한 일반 정보
- 구혼
- ? RAG를 촉진하는 프레임워크
- 기법
- 측정항목
- ? 데이터베이스
RAG에 대한 일반 정보
전통적인 RAG 접근 방식에서는 LLM 프롬프트의 컨텍스트를 풍부하게 하는 문서를 검색하기 위해 기본 프레임워크가 사용됩니다. 예를 들어, 집을 개조하기 위한 자재에 대해 문의할 때 LLM은 개조에 대한 일반적인 지식을 갖고 있지만 특정 주택에 대한 구체적인 세부 정보가 부족할 수 있습니다. RAG 아키텍처를 구현하면 청사진과 같은 관련 문서를 빠르게 검색하고 검색하여 보다 맞춤화된 응답을 제공할 수 있습니다. 이를 통해 LLM은 개조 요구 사항에 대한 특정 정보를 통합하여 응답의 정확성을 향상시킵니다.
일반적인 RAG 구현은 다음과 같은 주요 단계를 따릅니다.
- 지식 기반 나누기: 문서 모음을 더 작고 관리 가능한 덩어리로 나눕니다.
- 임베딩 생성: 임베딩 모델을 적용하여 이러한 텍스트 청크를 벡터 임베딩으로 변환하고 의미론적 의미를 포착합니다.
- 벡터 데이터베이스에 저장: 임베딩을 벡터 데이터베이스에 저장하여 의미 유사성을 기반으로 빠른 검색이 가능합니다.
- 사용자 쿼리 처리: 텍스트 청크에 적용된 것과 동일한 모델을 사용하여 사용자 쿼리를 임베딩으로 변환합니다.
- 관련 데이터 검색: 의미론적 유사성을 기반으로 쿼리 임베딩과 밀접하게 일치하는 임베딩을 벡터 데이터베이스에서 검색합니다.
- 프롬프트 강화: 가장 관련성이 높은 텍스트 덩어리를 LLM의 프롬프트에 통합하여 응답 생성을 위한 귀중한 컨텍스트를 제공합니다.
- 응답 생성: LLM은 증강된 프롬프트를 활용하여 사용자의 쿼리에 정확하고 맞춤화된 응답을 제공합니다.
구혼
RAG 구현은 간단한 문서 검색부터 반복 피드백 루프와 도메인별 향상 기능을 통합하는 고급 기술에 이르기까지 복잡성이 다양합니다. 접근 방식에는 다음이 포함될 수 있습니다.
- 수정 RAG(CRAG): LLM 응답에 통합하기 전에 검색된 정보를 수정하거나 구체화하는 방법입니다.
- RAFT(Retrieval-Augmented Fine-Tuning): 특히 향상된 검색 및 생성 작업을 위해 LLM을 미세 조정하는 기술입니다.
- Self Reflective RAG: 모델 성능 피드백을 기반으로 검색 전략을 동적으로 조정하는 모델입니다.
- RAG Fusion: 향상된 컨텍스트 통합을 위해 여러 검색 방법을 결합하는 기술입니다.
- TAR(Temporal Augmented Retrieval): 검색 프로세스에서 시간에 민감한 데이터를 고려합니다.
- Plan-then-RAG(PlanRAG): 복잡한 작업을 위해 RAG를 실행하기 전 계획 단계와 관련된 전략입니다.
- GraphRAG: 향상된 컨텍스트 통합 및 추론을 위해 지식 그래프를 사용하는 구조화된 접근 방식입니다.
- FLARE - 응답 품질을 향상시키기 위해 능동 검색 및 증강 생성을 통합하는 접근 방식입니다.
- 상황별 검색 - 검색 전에 문서 청크에 관련 컨텍스트를 추가하여 검색을 개선하고 대규모 지식 기반에서 검색된 정보의 관련성을 향상시킵니다.
? RAG를 촉진하는 프레임워크
- Haystack - 사용자 정의 가능하고 프로덕션에 즉시 사용 가능한 LLM 애플리케이션을 구축하기 위한 LLM 조정 프레임워크입니다.
- LangChain - LLM 작업을 위한 다목적 프레임워크입니다.
- Semantic Kernel - Generative AI 애플리케이션 개발을 위한 Microsoft의 SDK입니다.
- LlamaIndex - 사용자 정의 데이터 소스를 LLM에 연결하기 위한 프레임워크입니다.
- Cognita - 모듈식 및 프로덕션 지원 애플리케이션을 구축하기 위한 오픈 소스 RAG 프레임워크입니다.
- Verba - 즉시 사용 가능한 RAG용 오픈 소스 애플리케이션입니다.
- Mastra - AI 애플리케이션 구축을 위한 Typescript 프레임워크입니다.
기법
데이터 정리
- 데이터 정리 기술: 입력 데이터를 정제하고 모델 성능을 향상시키는 전처리 단계입니다.
격려
- 전략
- 태깅 및 라벨링: 관련성을 높이기 위해 검색된 데이터에 의미론적 태그 또는 라벨을 추가합니다.
- 이유 및 행동(ReAct)(ReAct): 검색된 컨텍스트를 기반으로 LLM 응답을 안내하는 추론 기능을 통합합니다.
- CoT(사고 사슬): 답변을 제공하기 전에 모델이 문제를 단계별로 생각하도록 장려합니다.
- CoVe(검증 체인): 정확성에 대한 추론의 각 단계를 검증하도록 모델에 요청합니다.
- 자기 일관성: 다양한 추론 경로를 생성하고 가장 일관된 답변을 선택합니다.
- 제로샷 프롬프트(Zero-Shot Prompting): 예시 없이 모델을 안내하는 프롬프트를 디자인합니다.
- Few-Shot Prompting: 원하는 응답 형식을 보여주기 위해 프롬프트에 몇 가지 예를 제공합니다.
- 캐싱
- 프롬프트 캐싱: 미리 계산된 주의 상태를 저장하고 재사용하여 LLM을 최적화합니다.
청킹
- 고정 크기 청킹
- 효율적인 처리를 위해 텍스트를 일관된 크기의 세그먼트로 나눕니다.
- 크기와 겹침을 기준으로 텍스트를 덩어리로 분할합니다.
- 예: 문자별로 분할(LangChain).
- 예: SentenceSplitter(LlamaIndex).
- 재귀적 청킹
- 복잡한 문서 구조에 대해 재귀 알고리즘을 사용한 계층적 분할.
- 예: 문자별로 반복적으로 분할(LangChain).
- 문서 기반 청킹
- 목표 분석을 위해 메타데이터 또는 서식 단서를 기반으로 문서를 분할합니다.
- 예: MarkdownHeaderTextSplitter(LangChain).
- 예: OpenCLIP과 같은 모델을 사용하여 이미지 및 텍스트 임베딩을 처리합니다.
- 의미론적 청킹
- 임의의 경계가 아닌 의미적 관련성을 기반으로 의미 있는 섹션을 추출합니다.
- 에이전트 청킹
- LLM이 분할을 안내하는 대화형 청킹 방법입니다.
임베딩
- 임베딩 모델 선택
- MTEB 리더보드 : 모델 임베딩 평가를 위한 Hugging Face의 벤치마크를 살펴보세요.
- 맞춤형 임베딩 : 특정 도메인이나 작업에 대한 맞춤형 임베딩을 개발하여 모델 성능을 향상합니다. 사용자 정의 임베딩은 도메인별 용어와 미묘한 차이를 포착할 수 있습니다. 기술에는 TensorFlow 또는 PyTorch와 같은 프레임워크를 사용하여 자체 데이터세트에서 사전 훈련된 모델을 미세 조정하거나 처음부터 임베딩을 훈련하는 것이 포함됩니다.
검색
- 검색 방법
- 벡터 스토어 플랫 인덱스
- 간단하고 효율적인 검색 형태.
- 콘텐츠는 벡터화되어 플랫 콘텐츠 벡터로 저장됩니다.
- 계층적 인덱스 검색
- 계층적으로 데이터를 다양한 수준으로 좁힙니다.
- 계층적 순서에 따라 검색을 실행합니다.
- 가설적인 질문
- 데이터베이스 청크와 쿼리 간의 유사성을 높이는 데 사용됩니다(HyDE와 동일).
- LLM은 각 텍스트 덩어리에 대한 특정 질문을 생성하는 데 사용됩니다.
- 이러한 질문을 벡터 임베딩으로 변환합니다.
- 검색하는 동안 이 질문 벡터 인덱스에 대해 쿼리를 일치시킵니다.
- 가설 문서 임베딩(HyDE)
- 데이터베이스 청크와 쿼리 간의 유사성을 높이는 데 사용됩니다(가설 질문과 동일).
- LLM은 쿼리를 기반으로 가상 응답을 생성하는 데 사용됩니다.
- 이 응답을 벡터 임베딩으로 변환합니다.
- 쿼리 벡터를 가상 응답 벡터와 비교합니다.
- 소규모에서 대규모 검색
- 검색에는 더 작은 청크를 사용하고 컨텍스트에는 더 큰 청크를 사용하여 검색을 향상시킵니다.
- 더 작은 하위 청크는 더 큰 상위 청크를 나타냅니다.
- 순위 재지정 : 처음에 검색된 문서를 재정렬하고 의미상 쿼리와 가장 관련된 문서의 우선순위를 지정하여 RAG 파이프라인의 검색 결과를 향상합니다.
측정항목
검색 측정항목
이러한 지표는 임베딩 간의 유사성을 측정하는 데 사용되며, 이는 RAG 시스템이 외부 문서 또는 데이터 소스를 얼마나 효과적으로 검색하고 통합하는지 평가하는 데 중요합니다. 적절한 유사성 지표를 선택하면 RAG 시스템의 성능과 정확성을 최적화할 수 있습니다. 또는 특정 도메인이나 틈새시장에 맞는 맞춤형 측정항목을 개발하여 도메인별 미묘한 차이를 파악하고 관련성을 높일 수도 있습니다.
코사인 유사성
- 다차원 공간에서 두 벡터 사이의 각도의 코사인을 측정합니다.
- 벡터 방향이 의미 정보를 나타내는 텍스트 임베딩을 비교하는 데 매우 효과적입니다.
- 쿼리 임베딩과 문서 임베딩 간의 의미론적 유사성을 측정하기 위해 RAG 시스템에서 일반적으로 사용됩니다.
내적
- 두 개의 숫자 시퀀스에 해당하는 항목의 곱의 합을 계산합니다.
- 벡터가 정규화될 때 코사인 유사성과 동일합니다.
- 간단하고 효율적이며 대규모 계산을 위해 하드웨어 가속과 함께 자주 사용됩니다.
유클리드 거리
- 유클리드 공간에서 두 점 사이의 직선 거리를 계산합니다.
- 임베딩과 함께 사용할 수 있지만 "차원성의 저주"로 인해 고차원 공간에서는 효율성이 떨어질 수 있습니다.
- 차원 축소 후 K-평균과 같은 클러스터링 알고리즘에 자주 사용됩니다.
자카드 유사성
- 두 유한 집합 사이의 유사성을 교차점의 크기를 집합의 합집합 크기로 나눈 값으로 측정합니다.
- Bag-of-Words 모델이나 n-gram 비교와 같이 토큰 세트를 비교할 때 유용합니다.
- LLM에서 생성된 연속 임베딩에는 덜 적용 가능합니다.
참고: 코사인 유사성과 내적은 일반적으로 고차원 임베딩 간의 유사성을 측정하는 가장 효과적인 측정항목으로 간주됩니다.
응답 평가 지표
이러한 측정항목은 RAG 시스템에서 생성된 답변의 품질과 관련성을 평가하여 답변의 정확성, 상황에 맞는 적절성, 신뢰성을 평가합니다. 이러한 평가 지표를 적용하면 시스템 성능에 대한 통찰력을 얻고 개선이 필요한 영역을 식별할 수 있습니다.
- 자동화된 벤치마킹
- 판사로서의 인간
- 모델이 심사위원으로 활동
도구
이러한 도구는 사용자 피드백 추적부터 쿼리 상호 작용 로깅, 시간 경과에 따른 여러 평가 지표 비교에 이르기까지 RAG 시스템의 성능을 평가하는 데 도움이 될 수 있습니다.
- LangFuse : LLM 지표, 관찰 가능성 및 신속한 관리를 추적하기 위한 오픈 소스 도구입니다.
- Ragas : RAG 파이프라인을 평가하는 데 도움이 되는 프레임워크입니다.
- LangSmith : 프로덕션 수준의 LLM 응용 프로그램을 구축하기 위한 플랫폼을 사용하면 응용 프로그램을 면밀히 모니터링하고 평가할 수 있습니다.
- Hugging Face Evaluate : 텍스트 품질을 평가하기 위해 BLEU 및 ROUGE와 같은 측정항목을 계산하는 도구입니다.
- 가중치 및 편향 : 실험을 추적하고 측정항목을 기록하며 성능을 시각화합니다.
? 데이터베이스
아래 목록에는 RAG(Retrieval Augmented Generation) 애플리케이션에 적합한 여러 데이터베이스 시스템이 나와 있습니다. 이는 다양한 RAG 사용 사례를 다루며 응답 또는 권장 사항을 생성하기 위한 벡터의 효율적인 저장 및 검색을 지원합니다.
벤치마크
분산 데이터 처리 및 제공 엔진:
- Apache Cassandra: 분산 NoSQL 데이터베이스 관리 시스템.
- MongoDB Atlas: 통합 벡터 검색 기능을 갖춘 전 세계적으로 분산된 다중 모델 데이터베이스 서비스입니다.
- Vespa: 실시간 애플리케이션용으로 설계된 오픈 소스 빅 데이터 처리 및 서비스 엔진입니다.
벡터 기능을 갖춘 검색 엔진:
- Elasticsearch: 기존 검색 기능과 함께 벡터 검색 기능을 제공합니다.
- OpenSearch: Elasticsearch에서 분리된 분산 검색 및 분석 엔진입니다.
벡터 데이터베이스:
- Chroma DB: AI 기반 오픈 소스 임베딩 데이터베이스입니다.
- Milvus: AI 기반 애플리케이션을 위한 오픈 소스 벡터 데이터베이스입니다.
- Pinecone: 기계 학습 워크플로에 최적화된 서버리스 벡터 데이터베이스입니다.
- Oracle AI 벡터 검색: 벡터 임베딩을 기반으로 한 의미론적 쿼리를 위해 Oracle 데이터베이스 내에 벡터 검색 기능을 통합합니다.
관계형 데이터베이스 확장:
- PgVector: PostgreSQL의 벡터 유사성 검색을 위한 오픈 소스 확장입니다.
기타 데이터베이스 시스템:
- Azure Cosmos DB: 통합 벡터 검색을 갖춘 전 세계적으로 분산된 다중 모델 데이터베이스 서비스입니다.
- Couchbase: 분산형 NoSQL 클라우드 데이터베이스입니다.
- 랜턴(Lantern): 개인정보를 보호하는 개인 검색 엔진입니다.
- LlamaIndex: 신속한 실험을 위해 간단한 메모리 내 벡터 저장소를 사용합니다.
- Neo4j: 그래프 데이터베이스 관리 시스템.
- Qdrant: 유사성 검색을 위해 설계된 오픈 소스 벡터 데이터베이스입니다.
- Redis 스택: 데이터베이스, 캐시 및 메시지 브로커로 사용되는 메모리 내 데이터 구조 저장소입니다.
- SurrealDB: 시계열 데이터에 최적화된 확장 가능한 다중 모델 데이터베이스입니다.
- Weaviate: 오픈 소스 클라우드 기반 벡터 검색 엔진입니다.
벡터 검색 라이브러리 및 도구:
- FAISS: 대규모 데이터 세트를 처리하도록 설계되고 가장 가까운 이웃을 빠르게 검색하도록 최적화된 효율적인 유사성 검색 및 조밀한 벡터의 클러스터링을 위한 라이브러리입니다.