이 프로젝트는 사용자 쿼리를 기반으로 컨텍스트 인식 권장 사항을 제공하기 위해 에이전트 검색 검색 세대 (RAG) 아키텍처를 활용하는 권장 엔진을 구축하는 것을 목표로합니다. MVP는 모듈성 및 확장성에 중점을 두면서 비용 효율성을 위해 오픈 소스 기술을 활용합니다.
제안 된 코드베이스 구조 :
ragsearch/
├── __init__.py
├── retrieval/
│ ├── __init__.py
│ ├── structured.py # For databases (e.g., DuckDB,sqlLite,MongoDB)
│ ├── unstructured.py # For document loaders (e.g., PDF, Word, HTML)
│ ├── base.py # Abstract base class
├── generation/
│ ├── __init__.py
│ ├── langchain.py # LangChain-based generation
│ ├── llamaindex.py # LlamaIndex-based generation
│ ├── base.py # Abstract base class
├── fusion/
│ ├── __init__.py
│ ├── simple_fusion.py # Simple query-context fusion
│ ├── attention.py # Advanced fusion strategies
│ ├── base.py # Abstract base class
├── reranking/
│ ├── __init__.py # Factory for reranking components
│ ├── bm25_reranker.py # Reranking based on BM25 scores
│ ├── neural_reranker.py # Reranking with neural models
│ ├── base.py # Abstract base class
├── llms/
│ ├── __init__.py # Factory for LLMs
│ ├── openai.py # OpenAI wrapper
│ ├── cohere.py # Cohere wrapper
│ ├── huggingface.py # HuggingFace wrapper
│ ├── base.py # Abstract base class
├── utils/
│ ├── __init__.py
│ ├── logger.py # Logging utilities
│ ├── config.py # Configuration utilities
│ ├── data.py # Data utilities
│ ├── metrics.py # Evaluation metrics
├── tests/
│ ├── __init__.py
│ ├── test_retrieval.py
│ ├── test_generation.py
│ ├── test_fusion.py
│ ├── test_reranking.py
│ ├── test_llms.py
├── main.py # Main entry point
├── config.yaml # Configuration file
├── README.md # Project documentation
├── RAG.md # Documentation for Retrieval-Augmented Generation
├── RAG-FAQ.md # FAQ for Retrieval-Augmented Generation
RAG (Restieval-Augmented Generation)는 큰 언어 모델의 출력을 최적화하는 프로세스이므로 응답을 생성하기 전에 교육 데이터 소스 외부의 권위있는 지식 기반을 참조합니다. 대형 언어 모델 (LLM)은 방대한 양의 데이터로 교육을 받고 수십억 개의 매개 변수를 사용하여 질문에 응답, 언어 번역 및 문장 완료와 같은 작업에 대한 원래 출력을 생성합니다. RAG는 이미 LLM의 강력한 기능을 모델을 재교육 할 필요없이 특정 도메인 또는 조직의 내부 지식 기반으로 확장합니다. LLM 출력을 개선하기위한 비용 효율적인 접근 방식으로 다양한 상황에서 관련성 있고 정확하며 유용합니다.
LLM은 주요 인공 지능 (AI) 기술로 지능형 챗봇 및 기타 자연 언어 처리 (NLP) 응용 프로그램을 강화합니다. 목표는 권위있는 지식 소스를 상호 참조하여 다양한 상황에서 사용자 질문에 답할 수있는 봇을 만드는 것입니다. 불행히도, LLM 기술의 특성은 LLM 응답에서 예측 불가능 성을 소개합니다. 또한 LLM 교육 데이터는 정적이며 지식에 대한 컷오프 날짜를 소개합니다.
답이 없을 때 잘못된 정보를 제시합니다. 사용자가 구체적인 현재 응답을 기대할 때 오래된 또는 일반 정보를 제시합니다. 비 승인 소스로부터 응답을 작성합니다. 용어 혼란으로 인해 부정확 한 응답을 생성하는데, 여기서 다른 교육 소스는 동일한 용어를 사용하여 다른 것들에 대해 이야기합니다. 대형 언어 모델을 현재의 사건에 대한 정보를 거부하지만 항상 모든 질문에 절대적인 신뢰로 모든 질문에 대답하는 과도한 열의 신입 사원으로 생각할 수 있습니다. 불행히도, 그러한 태도는 사용자 신뢰에 부정적인 영향을 줄 수 있으며 챗봇이 모방하기를 원하는 것이 아닙니다!
래그는 이러한 과제 중 일부를 해결하기위한 한 가지 방법입니다. 권위있는 사전 결정된 지식 소스에서 관련 정보를 검색하기 위해 LLM을 리디렉션합니다. 조직은 생성 된 텍스트 출력을 더 잘 제어 할 수 있으며 사용자는 LLM이 응답을 생성하는 방법에 대한 통찰력을 얻습니다.
RAG 기술은 조직의 생성 AI 노력에 몇 가지 이점을 제공합니다.
챗봇 개발은 일반적으로 기초 모델을 사용하여 시작합니다. FMS (Foundation Models)는 광범위한 일반화 및 표지되지 않은 데이터에 대해 훈련 된 API- 액세스 가능한 LLM입니다. 조직 또는 도메인 별 정보에 대한 FMS를 재교육하는 계산 및 재무 비용은 높습니다. Rag는 LLM에 새로운 데이터를 도입하는 데 더 많은 비용 효율적인 접근법입니다. 그것은 생성 인공 지능 (생성 AI) 기술을보다 광범위하게 접근하고 사용할 수있게 만듭니다.
LLM의 원래 교육 데이터 소스가 귀하의 요구에 적합하더라도 관련성을 유지하기가 어렵습니다. RAG를 통해 개발자는 생성 모델에 최신 연구, 통계 또는 뉴스를 제공 할 수 있습니다. RAG를 사용하여 LLM을 직접 연결하여 소셜 미디어 피드, 뉴스 사이트 또는 기타 자주 업데이트 된 정보 소스를 살 수 있습니다. LLM은 사용자에게 최신 정보를 제공 할 수 있습니다.
Rag는 LLM이 소스 속성으로 정확한 정보를 제공 할 수 있도록합니다. 출력에는 인용 또는 소스에 대한 참조가 포함될 수 있습니다. 사용자는 추가 설명이나 자세한 내용이 필요한 경우 소스 문서를 직접 찾을 수 있습니다. 이것은 생성 AI 솔루션에 대한 신뢰와 신뢰를 높일 수 있습니다.
Rag를 사용하면 개발자가 채팅 응용 프로그램을보다 효율적으로 테스트하고 개선 할 수 있습니다. LLM의 정보 소스를 제어하고 변경하여 변화하는 요구 사항 또는 교차 기능 사용에 적응할 수 있습니다. 개발자는 또한 민감한 정보 검색을 다른 승인 수준으로 제한하고 LLM이 적절한 응답을 생성 할 수 있습니다. 또한 LLM이 특정 질문에 대한 잘못된 정보 소스를 참조하면 문제를 해결하고 수정할 수도 있습니다. 조직은 광범위한 애플리케이션을 위해 생성 AI 기술을보다 자신있게 구현할 수 있습니다.
Rag가 없으면 LLM은 사용자 입력을 취하고 교육을받은 정보 또는 이미 알고있는 정보를 기반으로 응답을 만듭니다. Rag를 사용하면 사용자 입력을 사용하여 새로운 데이터 소스에서 정보를 먼저 가져 오는 정보 검색 구성 요소가 소개됩니다. 사용자 쿼리와 관련 정보는 모두 LLM에 제공됩니다. LLM은 새로운 지식과 교육 데이터를 사용하여 더 나은 응답을 만듭니다. 다음 섹션에서는 프로세스에 대한 개요를 제공합니다.
LLM의 원래 교육 데이터 세트 이외의 새로운 데이터를 외부 데이터라고합니다. API, 데이터베이스 또는 문서 리포지토리와 같은 여러 데이터 소스에서 나올 수 있습니다. 데이터는 파일, 데이터베이스 레코드 또는 긴 형식 텍스트와 같은 다양한 형식으로 존재할 수 있습니다. 언어 모델 임베딩이라고하는 또 다른 AI 기술은 데이터를 수치 표현으로 변환하여 벡터 데이터베이스에 저장합니다. 이 프로세스는 생성 AI 모델이 이해할 수있는 지식 라이브러리를 만듭니다.
다음 단계는 관련 검색을 수행하는 것입니다. 사용자 쿼리는 벡터 표현으로 변환되어 벡터 데이터베이스와 일치합니다. 예를 들어, 조직의 인적 자원 질문에 답변 할 수있는 스마트 챗봇을 고려하십시오. 직원이 검색하는 경우 "연간 휴가는 얼마입니까?" 이 시스템은 개별 직원의 과거 휴가 기록과 함께 연례 휴가 정책 문서를 검색합니다. 이 특정 문서는 직원이 입력 한 내용에 매우 적합하기 때문에 반환됩니다. 관련성은 수학적 벡터 계산 및 표현을 사용하여 계산 및 확립되었습니다.
다음으로 RAG 모델은 관련 검색된 데이터를 맥락에서 추가하여 사용자 입력 (또는 프롬프트)을 보강합니다. 이 단계는 신속한 엔지니어링 기술을 사용하여 LLM과 효과적으로 통신합니다. 증강 된 프롬프트를 사용하면 대형 언어 모델이 사용자 쿼리에 대한 정확한 답변을 생성 할 수 있습니다.
다음 질문은 외부 데이터가 오래되면 어떻게 될 수 있습니까? 검색을위한 최신 정보를 유지하려면 문서를 비동기로 업데이트하고 문서의 임베딩을 업데이트하십시오. 자동화 된 실시간 프로세스 또는 주기적 배치 처리를 통해이를 수행 할 수 있습니다. 이것은 데이터 분석에서 일반적인 과제입니다. 변화 관리에 대한 차분한 데이터 과학 접근법을 사용할 수 있습니다.
시맨틱 검색은 LLM 응용 프로그램에 방대한 외부 지식 소스를 추가하려는 조직의 Rag 결과를 향상시킵니다. Modern Enterprises는 다양한 시스템에서 매뉴얼, FAQ, 연구 보고서, 고객 서비스 안내서 및 인적 자원 문서 저장소와 같은 방대한 양의 정보를 저장합니다. 컨텍스트 검색은 규모에 따라 도전적이며 결과적으로 생성 출력 품질을 낮 춥니 다.
시맨틱 검색 기술은 대규모 이종 정보 데이터베이스를 스캔하고보다 정확하게 데이터를 검색 할 수 있습니다. 예를 들어, 그들은 "작년에 기계 수리에 얼마나 많은 비용이 소비 되었습니까?"와 같은 질문에 대답 할 수 있습니다. 질문을 관련 문서에 매핑하고 검색 결과 대신 특정 텍스트를 반환하면 해당 답변을 사용하여 LLM에 대한 더 많은 컨텍스트를 제공 할 수 있습니다.
Rag의 기존 또는 키워드 검색 솔루션은 지식 집약적 인 작업에 대한 제한된 결과를 생성합니다. 개발자는 또한 수동으로 데이터를 준비 할 때 단어 임베딩, 문서 청킹 및 기타 복잡성을 처리해야합니다. 대조적으로, 시맨틱 검색 기술은 지식 기반 준비의 모든 작업을 수행하므로 개발자는 필요하지 않습니다. 또한 RAG 페이로드의 품질을 극대화하기 위해 관련성에 의해 순서대로 의미 적으로 관련된 구절과 토큰 단어를 생성합니다.