[3์ฃผ์ฐจ] RAG์ ๊ตฌ์ฑ ์์์ ์ค์ต
๊ฐ์
์ด๋ฒ ์๊ฐ์ RAG(Retrieval-Augmented Generation)๊ฐ ๋ฌด์์ด๊ณ , ์ด๋ค ๊ตฌ์ฑ ์์๋ก ์ด๋ฃจ์ด์ ธ ์๋์ง๋ฅผ ์กฐ์ฌํ๋ค. ์ค์ต์์๋ LangChain ๊ธฐ๋ฐ RAG ํ์ดํ๋ผ์ธ์ ์ง์ ๊ตฌํํด๋ณด๋ ๊ฒ์ด ๋ชฉํ์ด๋ค.
ํ์ ์กฐ์ฌ ํญ๋ชฉ
1. RAG ๋
Retrieval-Augmented Generation์ ์ฝ์๋ก ์ธ๋ถ ์ง์์ ๊ฒ์ํ์ฌ LLM์ ์๋ต ์์ฑ์ ํ์ฉํ๋ ๊ตฌ์กฐ์ด๋ค.
RAG ํ์ดํ๋ผ์ธ์ ์ ์ฒด ํ๋ฆ :
- Indexting(๋ฌธ์ -> ์ฒญํฌ -> ๋ฒกํฐ -> ์ ์ฅ) + Retrieval(์ง๋ฌธ -> ๊ฒ์ -> ์์ฑ)

RAG๋ฅผ ์ฌ์ฉํ๋ ์ด์
- ์ต์ ๋ฐ ์ธ๋ถ ๋ฐ์ดํฐ ํ์ฉ๊ฐ๋ฅ
- ๊ธฐ์กด LLM์ ํ์ต ๋ฐ์ดํฐ์ ์ ํ๋์ง๋ง, RAG๋ ์ต์ ์ ๋ณด ๋ฐ ์ฌ๋ด ๋ฐ์ดํฐ(PDF, DB, Wiki ๋ฑ) ํ์ฉ ๊ฐ๋ฅ
- ํ๊ฐ(Hallucination) ๊ฐ์ ๋ฐ ์ ํ๋ ํฅ์
- ์ค์ ๋ฌธ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ต๋ณํ์ฌ ์๋ ์ ๋ณด๋ฅผ ์์ฑํ๋ ๋ฌธ์ ๋ฅผ ์ค์
- ๊ทผ๊ฑฐ ๊ธฐ๋ฐ ์๋ต ์ ๊ณต
- ๋ต๋ณ์ ์ถ์ฒ๋ฅผ ๋ช ํํ ์ ์ํ ์ ์์ด ์ ๋ขฐ์ฑ ํ๋ณด
System Prompt ๋ฐฉ์๊ณผ ์ฐจ์ด
- System Prompt ๋ฐฉ์์ ์ ์ฒด ๋ฌธ์๋ฅผ ํ๋กฌํํธ์ ํฌํจํ๊ธฐ ๋๋ฌธ์ ๋ถํ์ํ ์ปจํ ์คํธ๊น์ง ์ฒ๋ฆฌํ๊ฒ ๋์ด ํ ํฐ ๋น์ฉ์ด ์ฆ๊ฐํ๊ณ , ์ ๋ณด ๊ณผ๋ถํ๋ก ์ธํด ๋ชจ๋ธ์ ์๋ต ์ ํ๋ ๋ํ ์ ํ๋ ์ ์๋ค.
- RAG๋ ํ์ํ ๋ฐ์ดํฐ๋ง ๊ทธ๋๊ทธ๋ ๊ฒ์ํด์ ๊ทธ ๊ธฐ๋ฐ์ผ๋ก LLM์ด ๋ต์ ์์ฑํ๋ ๊ตฌ์กฐ์ด๋ค.
์ฐธ๊ณ ์๋ฃ:
https://arxiv.org/abs/2005.11401
Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks
Large pre-trained language models have been shown to store factual knowledge in their parameters, and achieve state-of-the-art results when fine-tuned on downstream NLP tasks. However, their ability to access and precisely manipulate knowledge is still lim
arxiv.org
https://arxiv.org/abs/2312.10997
Retrieval-Augmented Generation for Large Language Models: A Survey
Large Language Models (LLMs) showcase impressive capabilities but encounter challenges like hallucination, outdated knowledge, and non-transparent, untraceable reasoning processes. Retrieval-Augmented Generation (RAG) has emerged as a promising solution by
arxiv.org
2. RAG ์์ ์ฌ์ฉ๋๋ ์ฉ์ด
| ์ฉ์ด | ์กฐ์ฌ ๋ด์ฉ |
| Chunking | ๋ฌธ์๋ฅผ ๋ถํ ํ๋ ๋ฐฉ๋ฒ. chunk_size = ์ฒญํฌ ๊ธธ์ด, chunk_overlap = ๊ฒน์น๋ ๊ตฌ๊ฐ |
| Embedding | ํ ์คํธ๋ฅผ ๋ฒกํฐ๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ ex. ๊ฐ์์ง๋ ๊ฐ๋ ์ ์ฌํ ๋ฒกํฐ๊ฐ |
| Vector Store | ๋ฒกํฐ๋ฅผ ์ ์ฅํ๊ณ ์ ์ฌ๋ ๊ฒ์ํ๋ ์ ์ฅ์ FAISS, Chroma ๋ฑ |
| Retriever | ์ง๋ฌธ๊ณผ ์ ์ฌํ ์ฒญํฌ๋ฅผ ๊ฑฐ ใ ์ํ๋ ์ปดํฌ๋ํธ. Top-L = ๊ฐ์ฅ ์ ์ฌํ ๋ฌธ์ K๊ฐ |
| Generation | ๊ฒ์๋ ์ฒญํฌ๋ฅผ ๋ฐํ์ผ๋ก LLM์ด ๋ต๋ณ์ ์์ฑํ๋ ๋จ๊ณ |
์ฐธ๊ณ ์๋ฃ :
OpenAI Embeddings Guide
https://developers.openai.com/api/docs/guides/embeddings
Vector embeddings | OpenAI API
Learn how to turn text into numbers, unlocking use cases like search, clustering, and more with OpenAI API embeddings.
developers.openai.com
FAISS Getting Started
https://github.com/facebookresearch/faiss/wiki/Getting-started
Getting started
A library for efficient similarity search and clustering of dense vectors. - facebookresearch/faiss
github.com
3. LangChain ๊ธฐ๋ฐ RAG ํ์ดํ๋ผ์ธ ๊ตฌ์กฐ ๊ฐ๋
| ๋จ๊ณ | LangChain ์ปดํฌ๋ํธ |
| ๋ฌธ์ ๋ก๋ฉ | Document Loader (PyPDFLoader ๋ฑ) |
| ์ฒญํน | Text Splitter (RecursiveCharactoerTextSpliter ๋ฑ) |
| ์๋ฒ ๋ฉ | Embeddings (OpenAIEmbeddings ๋ฑ) |
| ๋ฒกํฐ ์ ์ฅ | Vector Store (FAISS, Chroma ๋ฑ) |
| ๊ฒ์ + ์์ฑ | Retriever + Chain |
- ๋ฌธ์ ๋ก๋ฉ
- ์ญํ : ์ธ๋ถ ๋ฐ์ดํฐ๋ฅผ LangChain์ด ์ฒ๋ฆฌํ ์ ์๋ ํํ๋ก ๋ณํ
- ๋ํ ์ปดํฌ๋ํธ :
- PyPDFLoader -> PDF
- TextLoader -> txt
- CSVLoader -> CSV
- WebBaseLoader -> ์นํ์ด์ง
- ์ฒญํน(Chunking)
- ์ญํ : ๊ธด ๋ฌธ์๋ฅผ LLM์ด ์ฒ๋ฆฌ ๊ฐ๋ฅํ ์์ ๋จ์๋ก ๋ถํ
- ๋ํ ์ปดํฌ๋ํธ :
- RecursiveCharacterTextSplitter
- ํ์ํ ์ด์ :
- LLM ํ ํฐ ์ ํ ๋๋ฌธ
- ๊ฒ์ ์ ํ๋ ํฅ์
- ์๋ฒ ๋ฉ(Embedding)
- ์ญํ : ํ
์คํธ -> ์๋ฏธ ๊ธฐ๋ฐ ๋ฒกํฐ ๋ณํ
- ๋จ์ด๊ฐ ์๋๋ผ ์๋ฏธ ์ ์ฌ๋ ๊ธฐ๋ฐ ๊ฒ์ ๊ธฐ๋ฐ
- ๋ํ ์ปดํฌ๋ํธ :
- OpenAIEmbeddings
- HuggingFaceEmbeddings
- ์ญํ : ํ
์คํธ -> ์๋ฏธ ๊ธฐ๋ฐ ๋ฒกํฐ ๋ณํ
- ๋ฒกํฐ ์ ์ฅ (Vector Store)
- ์ญํ : ์๋ฒ ๋ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ + ๊ฒ์ ๊ฐ๋ฅํ๊ฒ ๋ง๋ฆ
- ๋ํ ์ปดํฌ๋ํธ :
- FAISS (๋ก์ปฌ, ๋น ๋ฆ)
- Chroma (๊ฐํธ, ๋ก์ปฌ DB)
- Pinecone (ํด๋ผ์ฐ๋)
- ๊ฒ์ + ์์ฑ (Retrieval + Generation)
- Retrieval : ์ง๋ฌธ -> ๊ด๋ จ ๋ฌธ์ ๊ฒ์
- Chain : LLM ์ฐ๊ฒฐ. ๊ฒ์๋ ๋ฌธ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ต๋ณ ์์ฑ
- ๋ํ ์ฒด์ธ
- RetrievalQA
- ConversationRetrievalChain
- ๋ํ ์ฒด์ธ
์ฐธ๊ณ ์๋ฃ :
https://docs.langchain.com/oss/python/langchain/rag
Build a RAG agent with LangChain - Docs by LangChain
Build a RAG agent with LangChain
docs.langchain.com
https://developers.llamaindex.ai/python/framework/getting_started/starter_example/
Starter Tutorial (Using OpenAI)
As you can see, we are using async python functions. Many LLMs and models support async calls, and using async code is recommended to improve performance of your application. To learn more about async code and python, we recommend this short section on asy
developers.llamaindex.ai
์ค์ต ์งํ
1. ์ฌ์ฉ ๋ฐ์ดํฐ
- 2024 ์๊ธฐ ์ฌ์ด ์๋ฃ๊ธ์ฌ์ ๋ pdf
2. ๊ฐ์ค
- RAG ๋ฐฉ์์ ๊ธฐ์กด System Prompt ๋ฐฉ์๊ณผ ๋น๊ตํ์ ๋, ์ ์ฒด ๋ฌธ์๋ฅผ ์ ๋ ฅํ์ง ์๊ณ ์ง๋ฌธ๊ณผ ๊ด๋ จ๋ ์ ๋ณด๋ง ์ ๋ณํ์ฌ ํ์ฉํ๊ธฐ ๋๋ฌธ์ ํ ํฐ ์ฌ์ฉ๋๊ณผ ๋น์ฉ์ด ํฌ๊ฒ ๊ฐ์ํ ๊ฒ์ผ๋ก ์์๋๋ค.
- ๋ํ, ๊ฒ์๋ ๊ทผ๊ฑฐ ๋ฌธ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ต๋ณ์ ์์ฑํ๊ธฐ ๋๋ฌธ์ ๋ต๋ณ์ ๊ทผ๊ฑฐ๊ฐ ๋ช ํํด์ง๊ณ ์ ๋ขฐ๋๊ฐ ํฅ์๋ ๊ฒ์ด๋ค.
- ๋ค๋ง ์ ํ๋๋ ๋ค์ ์์์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์๋ค.
- Chunking ์ ๋ต
- Embedding ๋ชจ๋ธ ์ฑ๋ฅ
- Retriever์ Top-K ์ค์
- LLM ๋ชจ๋ธ์ ์ดํด ๋ฐ ์์ฑ ๋ฅ๋ ฅ
- ์๋ฃ๊ธ์ฌ PDF๋ ํ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ ์ด ๊ธฐ๋ฐ ๋ฌธ์ฅ์ ์๋ฏธ ๋จ์๋ก ์ ์งํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ด๋ ค์ธ ๊ฒ์ด๋ค.
- *Golden Dataset ์ค hard ๋ถ๋ถ์ผ๋ก ๊ฐ ์๋ก ๊ทผ๊ฑฐ ์ถ์ถ์ ์คํจํ ๊ฐ๋ฅ์ฑ์ด ์๋ค.
- Golden Dataset ์ RAG ํ์ดํ๋ผ์ธ์ ๊ฐ๊ด์ ํ์ง ์งํ์ด๋ค. ์ด๊ฒ์ด ์์ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ํฉ ๋ฐ์
- ์ฒญํน ์ ๋ต์ ๋ฐ๊ฟจ๋๋ฐ, ์ข์์ง ๊ฑด์ง ๋๋น ์ง ๊ฑด์ง ์ ์ ์์
- ์๋ฒ ๋ฉ ๋ชจ๋ธ์ ๊ต์ฒดํ๋๋ฐ, ๋น์ฉ๋ง ๋๊ณ ๊ฐ์ ์ ์์๋์ง ํ์ธํ ๋ฐฉ๋ฒ์ด ์์
- ๋ชจ๋ธ ๊ต์ฒด, ํ๋กฌํํธ ๋ณ๊ฒฝ, ์ปจํ ์คํธ ๊ฒ์ ๋ฐฉ์ ๋ณ๊ฒฝ ๋ฑ์ผ๋ก ๋ฌธ์ ๋ฐ์์ ํ์ธํ ๋ฐฉ๋ฒ์ด ์์
- Golden Dataset ์ RAG ํ์ดํ๋ผ์ธ์ ๊ฐ๊ด์ ํ์ง ์งํ์ด๋ค. ์ด๊ฒ์ด ์์ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ํฉ ๋ฐ์
3. ์ค์ต ์งํ
Step 1 : Golden Dataset ๊ตฌ์ถ
- easy : 2(๋จ์ผ ์กฐ๊ฑด), medium: 2(2-3๊ฐ ์กฐ๊ฑด ์กฐํฉ), hard: 1(๋ค์ค ์กฐ๊ฑด + ๊ณ์ฐ or ์์ธ)
- ๊นํ๋ธ golden_dataset.jsonl ์ฐธ๊ณ
Step 2 : RAG Indexing ํ์ดํ๋ผ์ธ ๊ตฌ์ถ ๋ ๊ฐ์ง ๋ฐฉ์ ์งํ
- PDF
- PyPDFLoader ์ฌ์ฉํ์ฌ pdf ๋ก๋
- ์ฒญํน
- chunk_size=300
- chunk_overlap=50
- ์๋ฒ ๋๋ ์งํ
- OpenAIEmbeddings ์ฌ์ฉ
- FAISS์ ๋ฒกํฐ ์ ์ฅ

- ๋งํฌ๋ค์ด(md)
- TextLoader ์ฌ์ฉํ์ฌ md ๋ก๋
- ์ฒญํน
- chunk_size=300
- chunk_overlap=50
- "---"๋ก ์์ ๋ชฉ ๊ธฐ์ค์ผ๋ก ๊ตฌ๋ถํ์ฌ ์ฒญํน
- ์๋ฒ ๋๋ ์งํ
- OpenAIEmbeddings ์ฌ์ฉ
- FAISS์ ๋ฒกํฐ ์ ์ฅ

Step 3 : ๊ฒ์ ํ์ง ํ์ธ
- ์ฒซ ๋ฒ์งธ(pdf) ํ ์คํธ ์์ฝ
| ์ง๋ฌธ | ๋์ด๋ | ๊ฒ์ ๊ฒฐ๊ณผ |
| q1 | easy | Top 1 ์์ ์ ํํ ๊ทผ๊ฑฐ๋ฅผ ๊ฐ์ ธ์์ผ๋ฏ๋ก ์ฑ๊ณต |
| q2 | easy | ๊ฒ์ ์คํจ |
| q3 | medium | Top 1 ์์ ํ์ ์ ๋์ง๋ง ๊ทผ๊ฑฐ๋ ์ด์ง ๋ถ์กฑํจ |
| q4 | medium | ๊ฒ์ ์คํจ |
| q5 | hard | ์ ์ฒด์ ์ผ๋ก ๊ทผ๊ฑฐ๊ฐ ์ ๋งคํจ ์คํจ๋ผ๊ณ ๋ด์ผ ํ ๋ฏ |
- ์์ธํ ๊ฒฐ๊ณผ๋ ๊นํ๋ธ retrieval_results_pdf.txt ์ฐธ๊ณ
- ๋ ๋ฒ์งธ(md) ํ
์คํธ ์์ฝ
- md๋ก ํ์ฑ ํ, --- ๊ตฌ๋ถ์๋ก ์ฒญํฌ ๋๋
| ์ง๋ฌธ | ๋์ด๋ | ๊ฒ์ ๊ฒฐ๊ณผ |
| q1 | easy | Top 1 ์์ ์ ํํ ๊ทผ๊ฑฐ๋ฅผ ๊ฐ์ ธ์์ผ๋ฏ๋ก ์ฑ๊ณต |
| q2 | easy | ๊ฒ์ ์คํจ |
| q3 | medium | Top 1 ์์ ์ ํํ ๊ทผ๊ฑฐ๋ฅผ ๊ฐ์ ธ์์ผ๋ฏ๋ก ์ฑ๊ณต |
| q4 | medium | ๊ฒ์ ์คํจ |
| q5 | hard | ์๋์ ๋ํด์๋ง ๋ง๊ณ ๋ฐ์ ํ๋ฆผ |
- ์์ธํ ๊ฒฐ๊ณผ๋ ๊นํ๋ธ retrieval_results_md.txt ์ฐธ๊ณ
md๋ก ๋ฐ๊พผ ์ฌ์ดํธ ์ฐธ๊ณ
https://huggingface.co/PaddlePaddle/PaddleOCR-VL-1.5?ref=blog.aibox.today
PaddlePaddle/PaddleOCR-VL-1.5 · Hugging Face
We’re on a journey to advance and democratize artificial intelligence through open source and open science.
huggingface.co
4. ์ค์ต ๊ฒฐ๊ณผ
- ์์๋๋ก easy, medium์์ ์ ๋ต์ด ๋์๋ค.
- ์คํจ ํ ๊ฒ๋ค์ ๋ณด๋ฉด ์์ธ์ ์ด 2๊ฐ์ง๋ก ํ์
์ด ๋๋ค.
- ๋ก๋ ์ด์
- pdf ๋ฐฉ์์ผ๋ก ํ ๋ ๋ก๋ ์์ฒด๊ฐ ๊ธฐ๋ณธ์ด๋ฉด ํ๋ฅผ ์ ๋๋ก ์ธ์ ๋ชปํ๋ค.
- ํด๊ฒฐ
- ๋งํฌ๋ค์ด์ผ๋ก ๋ฐ๊พผ ํํ๋ก ๋ก๋๋ฅผ ์ฌ์ฉ
- ๋ก๋ ๋ชจ๋ธ ๋ณ๊ฒฝ -> pdfplumber (ํ ์ถ์ถ์ ๊ฐ์ )
- chunk ์ด์
- ์ฒซ ๋ฒ์งธ ํ ์คํธ ์ฒ๋ผ pdf๋ก ๋ก๋๋ฅผ ์งํํ๋ฉด ํ๋ ๊นจ์ง๋ ๊ฒฝ์ฐ๊ฐ ์์ด, chunking์ ํ๊ณ๊ฐ ์์
- ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ ๋ฒ์งธ ํ ์คํธ๋ md๋ก ํ ์ด๋ธ์ ํฌํจํ ์์ ๋ชฉ ์์ฃผ๋ก ๊ตฌ๋ถํด์ chunking์ ์๋ ํ์ง๋ง, ์ด๋ฒ์๋ ๋ฒ์๊ฐ ๋๋ฌด ์ปค์ ์ ํ๋๊ฐ ํฌ๊ฒ ํฅ์๋์ง๋ ๋ชปํ๋ค.
- ๋ก๋ ์ด์
5. ์ธ์ฌ์ดํธ
- ์๋ฃ ๊ธ์ฌ๋ ํ ํํ๊ฐ ๋ง์ ํ ๋จ์๋ก ์ฒญํนํด์ผ ํ๋ค. ํ๋ฅผ ์ผ๋ฐ ํ ์คํธ ์ฒ๋ผ ๊ณ ์ ํฌ๊ธฐ๋ก ์๋ฅด๋ฉด ํ/์ด ๊นจ์ง๋ค.
- ์๋ฃ ๊ธ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋งํฌ๋ค์ด์ผ๋ก ๋ฐ๊พธ๋ ๊ฒ์ด ํจ์ฌ ํจ๊ณผ์ ์ด๋ค. ๋๋ ๋ก๋๋ฅผ ๋ฐ๊พธ๋ ๊ฒ์ด ์ข๋ค.
- chunking ๋ฒ์๋ฅผ ์ฌ๋ฌ ๋ฒ ๋ณ๊ฒฝ ํด๋ณด๋ฉด์ ๊ฐ์ฅ ์ต์ ์ ์ฑ๋ฅ์ ๋ณด์ด๋ ์ง์ ์ ์ฐพ์์ผ ํ๋ค.
- ๋๋ฌด ํฌ๋ฉด ๊ด๋ จ ์๋ ์ ๋ณด๊ฐ ์์
- ๋๋ฌด ์์ผ๋ฉด ๋ฌธ๋งฅ ๋๊น
ํ ์คํธ ๊นํ๋ธ ์ฃผ์
https://github.com/jasonpark112/aiagent-repo/tree/jasonpark112/week-3/jasonpark112
aiagent-repo/week-3/jasonpark112 at jasonpark112 · jasonpark112/aiagent-repo
Contribute to jasonpark112/aiagent-repo development by creating an account on GitHub.
github.com
'AI > AI agent' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [2์ฃผ์ฐจ] ํ๋กฌํํธ ์์ง๋์ด๋ง ๊ธฐ๋ฒ ์กฐ์ฌ ๋ฐ ์ค์ต (2) | 2026.03.29 |
|---|---|
| [1์ฃผ์ฐจ] LLM ํธ์ถ์ ํ ์คํธํ๊ณ ์ดํดํ๊ธฐ (0) | 2026.03.22 |
๋๊ธ