728x90
반응형
[PDF 기반 퀴즈 생성기] 구현하기 (feat. Streamlit, RAG)
1. PDF 파일 업로드streamlit의 'file_uploader'를 통해 파일 업로드type 지정으로, pdf 파일만 업로드 할 수 있도록 제한uploaded_file = st.file_uploader(label="PDF 업로드", type=["pdf"])2. OpenAI API KEY 입력streamlit의 'text
swwho.tistory.com
embedding 모델 배치 활용
- 현재 분할한 문장을 한 문장씩 embedding 모델에 넣어 결과를 가져오고 있음
- 이를 100문장 단위로 embedding 모델 호출
- 임베딩 후 퀴즈 생성까지 약 40s → 9s 로 단축
# 한문장씩
for text in texts:
try:
emb = self.embed_text(text)
embeddings.append(emb)
except Exception as e:
print(f"[오류] '{text[:30]}...': {e}")
embeddings.append(np.zeros(1536, dtype=np.float32))
return np.array(embeddings, dtype=np.float32)
# 100문장 단위
for i in range(0, len(texts)//100+1, 100):
emb = self.client.embeddings.create(input=texts[i:i+100], model=self.model)
embeddings.append(np.array(emb.data[0].embedding, dtype=np.float32))
return np.array(embeddings, dtype=np.float32)
pdf 문서에서 입력한 주제로 검색한 자료 활용
- 입력한 주제와 연관이 있는 pdf 문서를 기존에는 퀴즈 생성 프롬프트에만 활용
- ‘참고자료’ 버튼을 추가하고, st.session_state에 저장해둔 context를 확인할 수 있도록 구성
@st.dialog("참고자료", width="large")
def get_references(reference):
st.write(reference)
references = st.button(label="참고자료")
if references:
get_references(st.session_state['context'])
'ML_DL > MUJAKJUNG (무작정 시리즈)' 카테고리의 다른 글
텍스트 분할 (Text Spliter) (0) | 2025.05.08 |
---|---|
[PDF 기반 퀴즈 생성기] 구현하기 (feat. Streamlit, RAG) (0) | 2025.05.07 |
[PDF 기반 퀴즈 생성기] 구성하기 (0) | 2025.05.02 |
[LangChain] 모델 파라미터 설정 (0) | 2025.04.09 |
[LangChain] 챗봇 구성하기 (0) | 2025.04.03 |