옵션명 타입 필수 여부 설명
model_path str 필수 GGUF 모델 파일의 경로.
n_ctx int 선택 컨텍스트 창 크기 (처리할 수 있는 최대 토큰 수)
n_gpu_layers int 선택 GPU에 오프로드할 모델 레이어 수 (-1은 모두 오프로드, 0은 CPU만 사용)
temperature float 선택 샘플링 온도 (0.0 ~ 2.0+). 낮을수록 결정론적, 높을수록 창의적
top_p float 선택 Top-P (nucleus) 샘플링. 누적 확률 P값 이내의 토큰만 고려
max_tokens int 선택 생성할 최대 토큰 수.
stopping_words List[str] 선택 생성 중단 문자열 목록.
verbose bool 선택 상세 로깅 출력 여부.
임베딩은 nomic-embed-text, llm은 exaone3.5:2.4b
from langchain_ollama import OllamaLLM, OllamaEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import FAISS
from langchain.prompts import ChatPromptTemplate
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain.chains import create_retrieval_chain
from langchain_core.documents import Document
table_data = """
ID 내용 설명 상태 비고
1 사용자 등록 요청, 처리되었으나 일부 정보↓누락추가 조치 필요 완료 이메일 재전송 필요 (7일 내)
2 백엔드 응답 지연 현상.로그 미수집 → 원인 불분명(조사중) 진행중 모니터링 포트 추가 필요
3 "사용자: 앱 느려요!" 라는 피드백이 있음. UX 개선 요구(특히 안드로이드) 🟡 대기 중 기획안 미확정
4 DB 마이그레이션 사전 준비중—현재 구성 백업 실패 사례 존재❗ 위험 ⚠️ 백업 로그 누락
5 문서 양식 통일 필요…팀 내 전달방식 불일치→ 혼란 발생 가능성 有 📌 필요 Notion 정책 검토
6 신규 기능 요청: 알림 커스터마이징 가능하게 (단, 중요도 분류 기준 모호) 검토 중 우선순위 낮음
7 서버 리소스 초과: Redis TTL 설정 누락 + 불필요한 캐시 유지 중 🚨 심각 일시적 scale-out 고려
8 iOS UI 깨짐 현상 발생 (iPhone SE 1세대 기준) ⏳ 분석 중 디바이스 해상도 차이 원인 추정
9 문장 끝에 공백 이슈 발생.유니코드 공백 문자( , )로 추정됨 🧪 테스트 중 다국어 입력기 영향 가능성
10 고객센터 응답지연: 평균 응답 3일↑ (정상은 24시간 이내) 🔴 이슈 인력 증원 요청됨
"""
# 마크다운 데이터를 Document 객체로 변환
documents = [Document(page_content=table_data, metadata={"source": "LlamaCpp_Options_Table"})]
# 2. 텍스트 분할 (청크 생성)
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = text_splitter.split_documents(documents)
print(f"원본 테이블 데이터 길이: {len(table_data)} 문자")
print(f"생성된 청크 수: {len(chunks)}")
# 3. 임베딩 및 벡터 저장소 생성 (Ollama Embeddings 및 FAISS 사용)
embeddings = OllamaEmbeddings(model="nomic-embed-text")
# FAISS.from_documents를 사용하여 벡터 저장소 생성
vectorstore = FAISS.from_documents(chunks, embeddings)
# 4. OllamaLLM 모델 초기화
llm = OllamaLLM(model="exaone3.5:2.4b")
# 5. RAG 체인 구축
# 5-1. 문서 결합 체인 (검색된 문서를 프롬프트에 삽입)
prompt = ChatPromptTemplate.from_template("""
주어진 컨텍스트를 사용하여 질문에 답변하세요.
만약 컨텍스트에 정보가 없다면, 모른다고 답하세요.
<context>
{context}
</context>
질문: {input}
""")
document_chain = create_stuff_documents_chain(llm, prompt)
# 5-2. 검색 체인 (질문 -> 검색 -> 문서 결합)
retriever = vectorstore.as_retriever()
retrieval_chain = create_retrieval_chain(retriever, document_chain)
# 6. RAG 쿼리 실행
question1 = "DB 마이그레이션 사전 준비중 상태는 무엇인가요?"
response1 = retrieval_chain.invoke({"input": question1})
print(f"\n--- 질문 1: {question1} ---")
print(f"답변: {response1['answer']}")
print(f"참조 문서: {response1['context'][0].page_content.strip().splitlines()[0]}...") # 첫 번째 참조 문서의 첫 줄 출력
뭔가 맞는거 같긴 한데...?
| ID | 내용 설명 | 상태 | 비고 |
|-----|--------------------------------------------|------------|------------------------------|
| 1 | 사용자 등록 요청, 처리되었으나 일부 정보↓누락<br>추가 조치 필요 | 완료 | 이메일 재전송 필요 (7일 내) |
| 2 | 백엔드 응답 지연 현상.로그 미수집 → 원인 불분명(조사중) | 진행중 | 모니터링 포트 추가 필요 |
| 3 | "사용자: 앱 느려요!" 라는 피드백이 있음. UX 개선 요구<br>(특히 안드로이드) | 🟡 대기 중 | 기획안 미확정 |
|4 | DB 마이그레이션 사전 준비중—현재 구성 백업 실패 사례 존재❗ | 위험 ⚠️ | 백업 로그 누락 |
|5 | 문서 양식 통일 필요…팀 내 전달방식 불일치<br>→ 혼란 발생 가능성 有 | 📌 필요 | Notion 정책 검토 |
|6 | 신규 기능 요청: 알림 커스터마이징 가능하게 (단, 중요도 분류 기준 모호) | 검토 중 | 우선순위 낮음 |
|7 | 서버 리소스 초과: Redis TTL 설정 누락 + 불필요한 캐시 유지 중 | 🚨 심각 | 일시적 scale-out 고려 |
|8 | iOS UI 깨짐 현상 발생 <br>(iPhone SE 1세대 기준) | ⏳ 분석 중 | 디바이스 해상도 차이 원인 추정 |
|9 | 문장 끝에 공백 이슈 발생 .<br>유니코드 공백 문자( , )로 추정됨 | 🧪 테스트 중 | 다국어 입력기 영향 가능성 |
|10 | 고객센터 응답지연: 평균 응답 3일↑ (정상은 24시간 이내) | 🔴 이슈 | 인력 증원 요청됨 |
비슷한 것처럼 보이지만 위험 상태라고 정확하게 응답해준다.
테이블 데이터는 마크다운으로 작성하자.