Advanced RAG
02 Jan 2024 | Development
- 1. Dev summary
- 2. Data
- 3. Model
- 3.1 Embedding Model
- 4. Chat application programming interface (API)
- 5. Naive-RAG 이외 적용 기술
- 6. Chat 관련 추가 기능
- 7. Problems and Solutions
1. Dev summary
Project
Summary of the project Related Pages
RAG + Chatbot
base model:
- openai gpt-4
- LLaMa 2 13B
Related Paper Review (LLaMa 2)
RAG
Chat history

Illustrated by the author
2. Data
2.1 RAG data 출처
- 대한민국 갈등 사례(갈등 - 원인 - 이해관계자 -해결) 검색 chat을 위한 대한민국 갈등 사례 보고서 및 논문 (한국 행정 연구원으로부터 데이터 수령)
- 대한민국 국방 관련 검색 chat을 위한 국방 보고서 및 논문 (한국 국방 연구원으로부터 데이터 수령)
2.2 PDF data parsing
-
parsing 방식:
Rule-base parsing
-
사용 라이브러리 :
langchain.document_loaders.PyPDFDirectoryLoader
3. Model
- openai gpt-4-turbo
- LLaMa2 -> fine tuning model (fine-tuning log)
- Mistral -> fine tuning model (fine-tuning log)
- Solar -> fine tuning model (fine-tuning log)
3.1 Embedding Model
text-embedding-ada-002(chunk size=1000)
4. Chat application programming interface (API)
- gradio (LLM tuning 결과 개인 확인용 api)
- Fastapi (협업 백엔드 개발자 선호에 맞춰 개발)
- Flask (협업 백엔드 개발자 선호에 맞춰 개발)
5. Naive-RAG 이외 적용 기술
5.1 Pre-Retrieval
- binary vectorstore(document type)
5.2 Enhanced indexing strategy
-
binary vectorstore(document type)
document type에 따라 2-3개의 vector db에 분류하여 저장
-
metadata filtering을 위한 Hierarchical index retrieval
chunk별 요약 결과 metadata로 저장
-
hierarchical similarity search -> 3단계
(1. query <-> document summary similarity search
- vectorstore내에서 1번에서 검색된 document를 기반으로 similarity search (속도 향상을 위한 filtering)
- retriever 정의 시 2번에서 검색된 document를 기반으로 similarity search)
5.3 Retrieval
- diverse Prompts(query type)
query type별로 다른 prompt 적용
5.4 Post-Retrieval
- translate(en->ko)
LLM 영어 답변 반환 시 번역
- similarity-based reordering
6. Chat 관련 추가 기능
- return source file
- 좋아요 싫어요 버튼 추가
- [답변 일시, 소요 시간, 질문, 답변, 사용자 ip] 저장 기능 추가
- RAG 기반 질문-대답 챗
- Weaviate의 retrieval 결과를 받아 prompt와 함께 LLM에 입력 후 결과 반환
- RAG 이후 LLM 답변 시 참조된 문서 요약(source 번호 입력)
- 질의응답 내용과 참조 문서 정보를 저장하여 참조 문서 번호 입력 시 해당 문서에 대한 요약 결과 반환
- 문서 제목 입력 후 문서 요약
-문서 제목 입력 시 문서 요약 결과 반환
- 문서 전체 길이에 따라 LLM 입력 횟수 증가+Json 형식 답변 반환
- 표 출력을 위한 json 형식 반환
- “표“, “json” 포함 질문 입력 시 json 형식 반환 prompt와 함께 LLM에 입력 후 결과 반환
7. Problems and Solutions
- 속도 문제
- LLM 추론 속도 문제: vllm 적용
- similarity search 연산 속도 문제: 문서가 많아 시간이 생각보다 많이 소요되어 binary vectorstore, metadata filtering, hierarchical similarity search 적용
- query 유형에 따라 LLM 추론 품질이 상이한 문제
- query 유형 분류를 통해 다른 prompt를 타도록 pipeline 구성
- LLM 영어 반환 문제
- port-retrieval 과정으로 영어 답변 반환 시 번역 과정 추가
- LLM 답변 정확도 및 품질 저하 문제
- similarity-based reordering을 통해 검색된 chunk 중 가장 관련 있는 문서를 더 많이 참조하도록 조정
- 1. Dev summary
- 2. Data
- 3. Model
- 3.1 Embedding Model
- 4. Chat application programming interface (API)
- 5. Naive-RAG 이외 적용 기술
- 6. Chat 관련 추가 기능
- 7. Problems and Solutions
1. Dev summary
Project | Summary of the project | Related Pages |
---|---|---|
RAG + Chatbot |
|
|
2. Data
2.1 RAG data 출처
- 대한민국 갈등 사례(갈등 - 원인 - 이해관계자 -해결) 검색 chat을 위한 대한민국 갈등 사례 보고서 및 논문 (한국 행정 연구원으로부터 데이터 수령)
- 대한민국 국방 관련 검색 chat을 위한 국방 보고서 및 논문 (한국 국방 연구원으로부터 데이터 수령)
2.2 PDF data parsing
-
parsing 방식:
Rule-base parsing -
사용 라이브러리 :
langchain.document_loaders.PyPDFDirectoryLoader
3. Model
- openai gpt-4-turbo
- LLaMa2 -> fine tuning model (fine-tuning log)
- Mistral -> fine tuning model (fine-tuning log)
- Solar -> fine tuning model (fine-tuning log)
3.1 Embedding Model
text-embedding-ada-002(chunk size=1000)
4. Chat application programming interface (API)
- gradio (LLM tuning 결과 개인 확인용 api)
- Fastapi (협업 백엔드 개발자 선호에 맞춰 개발)
- Flask (협업 백엔드 개발자 선호에 맞춰 개발)
5. Naive-RAG 이외 적용 기술
5.1 Pre-Retrieval
- binary vectorstore(document type)
5.2 Enhanced indexing strategy
-
binary vectorstore(document type)
document type에 따라 2-3개의 vector db에 분류하여 저장 -
metadata filtering을 위한 Hierarchical index retrieval
chunk별 요약 결과 metadata로 저장 -
hierarchical similarity search -> 3단계
(1. query <-> document summary similarity search- vectorstore내에서 1번에서 검색된 document를 기반으로 similarity search (속도 향상을 위한 filtering)
- retriever 정의 시 2번에서 검색된 document를 기반으로 similarity search)
- vectorstore내에서 1번에서 검색된 document를 기반으로 similarity search (속도 향상을 위한 filtering)
5.3 Retrieval
- diverse Prompts(query type)
query type별로 다른 prompt 적용
5.4 Post-Retrieval
- translate(en->ko)
LLM 영어 답변 반환 시 번역 - similarity-based reordering
6. Chat 관련 추가 기능
- return source file
- 좋아요 싫어요 버튼 추가
- [답변 일시, 소요 시간, 질문, 답변, 사용자 ip] 저장 기능 추가
- RAG 기반 질문-대답 챗
- Weaviate의 retrieval 결과를 받아 prompt와 함께 LLM에 입력 후 결과 반환
- Weaviate의 retrieval 결과를 받아 prompt와 함께 LLM에 입력 후 결과 반환
- RAG 이후 LLM 답변 시 참조된 문서 요약(source 번호 입력)
- 질의응답 내용과 참조 문서 정보를 저장하여 참조 문서 번호 입력 시 해당 문서에 대한 요약 결과 반환
- 질의응답 내용과 참조 문서 정보를 저장하여 참조 문서 번호 입력 시 해당 문서에 대한 요약 결과 반환
- 문서 제목 입력 후 문서 요약
-문서 제목 입력 시 문서 요약 결과 반환
- 문서 전체 길이에 따라 LLM 입력 횟수 증가+Json 형식 답변 반환
- 표 출력을 위한 json 형식 반환
- “표“, “json” 포함 질문 입력 시 json 형식 반환 prompt와 함께 LLM에 입력 후 결과 반환
7. Problems and Solutions
- 속도 문제
- LLM 추론 속도 문제: vllm 적용
- similarity search 연산 속도 문제: 문서가 많아 시간이 생각보다 많이 소요되어 binary vectorstore, metadata filtering, hierarchical similarity search 적용
- query 유형에 따라 LLM 추론 품질이 상이한 문제
- query 유형 분류를 통해 다른 prompt를 타도록 pipeline 구성
- LLM 영어 반환 문제
- port-retrieval 과정으로 영어 답변 반환 시 번역 과정 추가
- LLM 답변 정확도 및 품질 저하 문제
- similarity-based reordering을 통해 검색된 chunk 중 가장 관련 있는 문서를 더 많이 참조하도록 조정