AInfo: 공공 데이터 자동 수집 및 ChromaDB 벡터 저장 파이프라인
AInfo 프로젝트에서 구현한 API 기반 공공 데이터 수집, PDF 분석, 벡터 저장 및 자동화 파이프라인을 소개합니다.
AInfo: 공공 데이터 자동 수집 및 ChromaDB 벡터 저장 파이프라인
정책 추천을 위한 데이터 파이프라인
AInfo 프로젝트는 정부24, 고용24, 청년정책 API, K-Startup PDF 등 다양한 출처의 데이터를 수집하고 이를 벡터화하여 ChromaDB에 저장합니다. 이 데이터는 향후 AI 챗봇의 추천과 검색에 활용됩니다. 이 글에서는 API와 PDF를 대상으로 한 데이터 수집, 전처리, 임베딩, 벡터 저장 및 주기적 자동화를 위한 Celery 활용 흐름을 정리합니다.
전체 흐름 요약
graph LR
A[공공 API or PDF] --> B[데이터 파싱 및 전처리]
B --> C[LangChain Document 변환]
C --> D[메타데이터 정리 및 Embedding 생성]
D --> E[ChromaDB 컬렉션에 저장]
dataload/common.py
: 공통 유틸리티 (Chroma, 임베딩, 로깅 등)dataload/load_*.py
: 출처별 데이터 파서 및 저장 로직 (PDF, 정부24, 고용24, 청년정책 등)dataload/load_data.py
: 모든 로더를 CLI로 통합 실행 가능하도록 구성dataload/tasks.py
: Celery를 통한 주기적 자동화 지원config/celery.py
: 주간 단위 스케줄링 설정 (수요일 새벽 자동 실행)
공통 유틸리티 (common.py)
get_embeddings()
: OpenAI Embedding 인스턴스 반환get_chroma_collection()
: 컬렉션 이름으로 Chroma 객체 반환clear_collection()
: 기존 컬렉션 문서 삭제sanitize_metadata()
: None, dict 등을 문자열로 정제save_documents_with_progress()
: 배치 저장 + 진행률 표시run_loader()
: 에러 핸들링 포함 로더 실행 함수
PDF 정책 데이터 파서
- 정책 책자 내 목차 분석 → 제목 및 시작 페이지 추출
- 실제 내용과 매칭되는 페이지 오프셋 자동 계산
langchain.Document
형태로 변환하여 저장- 정책명/페이지/본문 정보를 메타데이터에 포함
공공 API 데이터 파서
각 출처마다 다음과 같은 특성을 갖습니다:
출처 | 주요 필드 | 저장 컬렉션 | 기타 |
---|---|---|---|
정부24 | 서비스ID, 서비스명, 분야, 지원대상 등 | gov24_service_list , gov24_service_detail | 목록 + 상세 2개 저장 |
고용24 | 프로그램명, 운영기관, 일정 등 | employment_programs | XML 기반 파싱 |
청년정책 | 정책명, 신청기한, URL 등 | youth_policy_list | JSON 기반 |
모든 데이터는 langchain.Document
로 변환되며, 메타데이터는 sanitize_metadata()
를 통해 정리됩니다.
Celery를 통한 자동화
accounts/tasks.py
: 메일 발송용 비동기 처리dataload/tasks.py
: 데이터 로딩 Celery 태스크 정의config/celery.py
: 다음과 같은 스케줄 등록
1
2
3
4
5
app.conf.beat_schedule = {
"load-employment-data-every-wednesday-1am": {...},
"load-youth_policy-data-every-wednesday-1.5am": {...},
"load-gov24-data-every-wednesday-2am": {...},
}
수요일 새벽마다 자동으로 최신 데이터를 수집하여 ChromaDB에 반영합니다.
마무리
이 파이프라인을 통해 AInfo는 수시로 갱신되는 정부 공공 데이터를 자동으로 수집하고, 향후 AI 챗봇의 검색 기반 추천에 활용할 수 있는 구조를 갖췄습니다.
This post is licensed under CC BY 4.0 by the author.