RAG + LLM 연동: 로컬 Mistral 모델로 자연어 응답 생성

SmartBear·2025년 6월 11일

AI

목록 보기
4/9

🎯 목표

지난 문서에서 가장 유사한 문장을 검색(RAG)하는 시스템을 구성했다.
이번 Step 2에서는 그 검색된 문장을 바탕으로 LLM이 자연스럽게 답변을 생성하도록 연결한다.

그리고 OpenAI API 대신, 로컬에서 실행 가능한 Mistral-7B-Instruct 모델을 사용해
비용 없이도 실용적인 질의응답 AI 구조를 체험한다.


🔧 구성 요약

구성 요소사용 도구
문장 검색 (RAG)sentence-transformers + FAISS
LLM 응답 생성llama-cpp-python + Mistral-7B-Instruct (GGUF 모델)
실행 환경Python, 로컬 GPU (RTX 4060 Ti 기준)

📥 모델 설치 & 실행 요약

pip install llama-cpp-python sentence-transformers faiss-cpu

💡프롬프트 개선

기본 프롬프트는 아래와 같았다:

[문서 내용]
...

[질문]
...

[답변]

하지만 정확도 개선을 위한 질문을 하니 아래와 같은 답변을 주었다.

너는 문서 기반 정보를 사용자에게 설명하는 AI야.
아래 문서를 참고해서 질문에 대해 부드럽고 정확하게 대답해줘.
답변은 반드시 문서 내용을 기반으로 해야 하고, 없는 정보는 추측하지 마.
답변은 2~3문장 이내로 간결하게 작성해줘.

[문서 내용]
...

[질문]
...

[답변]

🤖 프롬프트의 구조와 어투, 제약 조건을 설정함으로써
LLM의 출력 품질과 일관성이 확연히 향상되었다? 는 gpt 피셜이고,
실제 어떻게 되었는지는 아래 실습 코드 위치에 복사한 Output 을 참고하자.


실습 코드

Git: https://github.com/mybeang/sandbox/blob/main/python_projects/ai_study/step2/step2.py


🧠 학습한 점

  • 프롬프트 구성에 따라 LLM 응답 품질이 극적으로 달라진다
  • RAG 구조와 LLM 조합만으로도 유의미한 Q&A 시스템을 로컬에서 만들 수 있다
  • n_ctx 경고는 성능 제한이 아니라 컨텍스트 길이 최적화에 대한 힌트일 뿐이다

📌 다음 목표

  • 📄 PDF 문서 → 텍스트 자동 변환 후 RAG 연동
  • 🧩 여러 문장 조합 → 요약/추론형 프롬프트 설계
  • 🌐 Streamlit으로 웹 UI 구성

실습 중간 만난 문제?

아래와 같은 메시지 출력.
llama_context: n_ctx_per_seq (2048) < n_ctx_train (32768) -- the full capacity of the model will not be utilized

GPT 왈

✅ 요약하면
"모델은 최대 32,768 토큰까지 처리할 수 있는데,
당신은 지금 설정을 2,048 토큰까지만 주고 있으니
모델의 전체 능력을 다 쓰지 않고 있다"는 뜻입니다.

즉, 모델을 좀 더 잘 쓸수 있으니 잘 튜닝해봐 라는 의미! 😊

🔍용어 풀이

용어의미
n_ctx_per_seq지금 실행 시 사용하고 있는 최대 컨텍스트 길이 (입력+출력 길이)
n_ctx_train모델이 학습 당시 사용했던 최대 컨텍스트 길이
full capacity긴 문서나 긴 대화 등을 처리할 수 있는 능력

🛠️해결 방법

n_ctx 값을 적절히 늘리면 된다 🤣

⚠️주의: VRAM 사용량 증가

설정값 (n_ctx)VRAM 소모추천
2048★☆☆☆☆기본 실험용
4096★★☆☆☆문단 요약 등
8192 이상★★★★☆긴 문서, 긴 대화 필요시

휴..

40대에 진입하니 단순 따라 하는 것만 해도 꽤 힘들다. GPT 는 간략하게 설명하기 때문에 관련 단어나 내용에 대해 스스로 생각해보고 한단계 한단계 더 깊이 질문하는 케이스도 다반사 발생하며 진행하다보니 머리가 아프다. 질문 했던 내용을 계속 기억하게 될지는 모르겠지만, 일단 한발 한발 진행해보자.

profile
Python Dev with Infra -> Game Programmer

0개의 댓글