외국인 & 다문화 가정을 위한 챗봇을 구현중이다. 한국에서 생활하는 외국인 및 다문화 가정이 안정적으로 정착하려면 비자, 취업, 복지, 법적 보호 등의 정보를 쉽게 얻을 수 있어야 한다. 하지만 기존의 법률 정보는:
✅ 그래서!
국가법령정보 API를 활용하면 실시간으로 최신 법령 데이터를 가져와 벡터DB에 저장하고,
사용자의 질문에 맞춰 필요한 법령 정보를 쉽고 빠르게 검색할 수 있는 챗봇을 만들 수 있다!
🔥 Keep going~!
🔹 법률 데이터 수집 & 저장
🔹 자동 업데이트 기능
🔹 검색 기능 최적화
def fetch_all_data():
fetch_data_prec() # 판례 데이터 가져오기
fetch_data_law() # 법령 데이터 가져오기
fetch_data_ordin() # 조례 데이터 가져오기
# 데이터를 가져온 후 벡터 DB에 저장
save_files_to_vector_db()
📌 결과:
✅ 국가법령 정보 총 13,215개 외국인, 다문화 키워드로 텍스트 추출 완료
✅ 판례.xlsx, 법령.xlsx, 조례.xlsx 자동화 다운 → 경로 설정 완료
외국인의 prec 갯수: 1444
다문화의 prec 갯수: 26
총 1470 개
외국인의 law 갯수: 1544
다문화의 law 갯수: 93
총 1637 개
외국인의 ordin 갯수: 6502
다문화의 ordin 갯수: 3606
총 10108 개
##################################### 24시간마다 스케줄러 실행
scheduler = BackgroundScheduler()
scheduler.add_job(fetch_all_data, trigger='interval', hours=24)
# 서버 실행 설정
if __name__ == "__main__":
scheduler.start()
# FastAPI 서버 실행
uvicorn.run(app, host="0.0.0.0", port=8000)
📌 결과:
✅ 스케줄러 기능 적용, 24시간마다 데이터 업데이트 완료
✅ 13,215개 다운 소요 시간: 1분
# 벡터 DB에서 관련 문서 검색
query = input_data.messages[-1] # 최신 메시지 사용
docs = retriever.invoke(query)
# 검색된 문서를 LLM 입력에 추가
context = "\n\n".join([doc.page_content for doc in docs]) if docs else "관련 정보 없음"
input_data.messages.append(f"🔍 참고 정보:\n{context}")
# 챗봇 응답 생성
result["chatbot_response"] = chat_chain.invoke(input_data.messages)
📌 결과:
✅ 문서 청크 & 임베딩 완료
✅ 문서 메타데이터 정보 (문서 타입, 고유 ID, 파일명, 현재 시각) 저장 구현 완료
✅ 벡터 DB에 법령 데이터 저장 완료
🔍 "10ㆍ29 이태원 참사 피해자 권리보장과 진상규명 및 재발방지를 위한 특별법 시행령의 주요 조항은 어떤 것이 있나요?"
⏳ 기존 응답 속도: 2분 29초
🚀 벡터 DB 최적화 후: 5분 5초 (개선 필요)
"안녕하세요. 저는 Snail입니다.
10ㆍ29 이태원 참사 피해자 권리보장과 진상규명 및 재발방지를 위한 특별법 시행령의 주요 조항은 다음과 같습니다...
다음으로, 이 법률의 시행령은 2025년 1월 14일에 제정되었으며, 국민 제안 규정에 따라 일부 개정되었습니다.
더 궁금한 점이 있으시면 언제든지 물어보세요!"
📌 다음 목표:
✅ 검색 속도 개선 (stuff → map_reduce 체인 비교 테스트)
✅ OCR 활용하여 법령 문서 자동 분류
✅ PostgreSQL 연동하여 사용자 질문 & 응답 데이터 저장
🔹 법령 데이터 13,215개 자동 수집 & 벡터 DB 저장 성공!
🔹 법령 검색 챗봇 MVP 구현 완료
🔹 벡터 DB 검색 속도 개선 & 고도화 예정
🚀 다음 단계:
1. PostgreSQL 연동 → 사용자 질문 & 챗봇 응답 저장
2. 벡터 DB 검색 최적화 → 쿼리 속도 개선
3. OCR 기반 법령 문서 자동 분류 → 법령 문서 태깅 기능 추가
🔥 Keep going.......................~!