지난 문서에서 가장 유사한 문장을 검색(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 기준) |
Q4_K_M (VRAM 6~8GB에서 작동)llama-cpp-pythonpip 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
아래와 같은 메시지 출력.
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 값을 적절히 늘리면 된다 🤣
설정값 (n_ctx) | VRAM 소모 | 추천 |
|---|---|---|
| 2048 | ★☆☆☆☆ | 기본 실험용 |
| 4096 | ★★☆☆☆ | 문단 요약 등 |
| 8192 이상 | ★★★★☆ | 긴 문서, 긴 대화 필요시 |
40대에 진입하니 단순 따라 하는 것만 해도 꽤 힘들다. GPT 는 간략하게 설명하기 때문에 관련 단어나 내용에 대해 스스로 생각해보고 한단계 한단계 더 깊이 질문하는 케이스도 다반사 발생하며 진행하다보니 머리가 아프다. 질문 했던 내용을 계속 기억하게 될지는 모르겠지만, 일단 한발 한발 진행해보자.