Spaces:
Running
03. ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ
๋ชฉํ
PDF ์ ๋ก๋๋ถํฐ ๋ฌธ์ ์ ์ฅ๊น์ง์ ํ๋ฆ์ ์๋ํํ๋ ๊ฒ์ด ์ด ํ์ดํ๋ผ์ธ์ ๋ชฉํ์ ๋๋ค.
์ฌ์ฉ์๋ PDF๋ง ์ ๋ก๋ํ์ง๋ง, ๋ด๋ถ์์๋ ์ฌ๋ฌ ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ ๋ฌธ์ ๋ฐ์ดํฐ๊ฐ ๋ง๋ค์ด์ง๋๋ค.
์ ์ฒด ํ๋ฆ
- ์ฌ์ฉ์๊ฐ Streamlit์์ PDF๋ฅผ ์ ๋ก๋ํ๋ค.
- ์
๋ก๋ ์ ๋ณด๋ก
IngestionJob์ ๋ง๋ ๋ค. - Airflow DAG๊ฐ ๊ธด PDF ์ฒ๋ฆฌ ์์ ์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํํ๋ค.
- Airflow ์์ ์์์ PDF Ingestion Graph๊ฐ ์คํ๋๋ค.
- PDF๋ฅผ ํ ์คํธ์ ๋ฌธ์ ๋จ์๋ก ํ์ฑํ๋ค.
- ํ์ฑ ๊ฒฐ๊ณผ์ ํ์ง์ ๊ฒ์ฌํ๋ค.
- ํ์ง ๊ฒ์ดํธ๋ฅผ ํต๊ณผํ๋ฉด ๋ฌธ์ ๋ฅผ PostgreSQL์ ์ ์ฅํ๋ค.
- ํ์ํ๋ฉด ๋ฌธ์ ๋ฅผ Chroma์ ์์ธํ๋ค.
- ์ฌ์ฉ์๋ ์น์์ ์ ์ฅ๋ ๋ฌธ์ ๋ฅผ ํ ์ ์๋ค.
๋จ๊ณ๋ณ ์ค๋ช
1. PDF ์ ๋ก๋
์ฌ์ฉ์๋ Streamlit์ PDF ์ ๋ก๋ ํ๋ฉด์์ ์ํ๋ช ๊ณผ PDF ํ์ผ์ ์ ๋ ฅํฉ๋๋ค.
์ด๋ PDF ์์ฒด๋ ๋ฐํ์ ๋ฐ์ดํฐ ์์ญ์ ์ ์ฅ๋๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ์ฒ๋ฆฌ ์์ ์ ๋ณด๊ฐ ์ ์ฅ๋ฉ๋๋ค.
2. IngestionJob ์์ฑ
ingestion_jobs ํ
์ด๋ธ์๋ PDF ์ฒ๋ฆฌ ์์
์ ์ํ๊ฐ ์ ์ฅ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด ์๋ ๊ฐ์ ์ ๋ณด๋ฅผ ๊ฐ์ง๋๋ค.
- ์ํ๋ช
- PDF ๊ฒฝ๋ก
- ํ์ฌ ์ํ
- ํ์ฌ ๋จ๊ณ
- ์งํ๋ฅ
- ์ ์ฅ๋ ๋ฌธ์ ์
- ํ์ง ์ ์
- ์ค๋ฅ ๋ฉ์์ง
์ด ํ ์ด๋ธ์ด ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์๋ PDF ์ฒ๋ฆฌ ์ค ํ์ฌ ์ด๋๊น์ง ์งํ๋๋์ง ํ์ธํ ์ ์์ต๋๋ค.
3. Airflow DAG ์คํ
PDF ์ฒ๋ฆฌ๋ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆด ์ ์์ต๋๋ค. ๊ทธ๋์ ์น ํ๋ฉด ์์์ ๋ชจ๋ ์ฒ๋ฆฌ๋ฅผ ๋๋ด๊ธฐ๋ณด๋ค Airflow DAG๋ก ๋๊ธฐ๋ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
ํ์ฌ PDF ์ฒ๋ฆฌ DAG๋ dags/cert_study_pdf_ingestion_dag.py์ ์์ต๋๋ค.
Airflow๋ job_id๋ฅผ ๋ฐ์ ํด๋น ์์
์ ์คํํฉ๋๋ค.
Airflow์ ํต์ฌ ์ญํ ์ ์ง์ ๋ฌธ์ ๋ฅผ ์ ์ฅํ๋ ๊ฒ์ด ์๋๋ผ, ๊ธด ์ฒ๋ฆฌ ์์ ์ ์คํํ๊ณ ์คํจ ์ง์ ์ ์ถ์ ํ ์ ์๊ฒ ๋ง๋๋ ๊ฒ์ ๋๋ค. ์ค์ ํ์ฑ, ํ์ง๊ฒ์ฆ, ์ ์ฅ ํ๋ฆ์ ์ฑ ์ฝ๋์ PDF Ingestion Graph์์ ๋จ๊ณ๋ณ๋ก ์คํ๋ฉ๋๋ค.
4. PDF Ingestion Graph ์คํ
์ค์ PDF ์ฒ๋ฆฌ ํ๋ฆ์ cert_study_app/graphs/pdf_ingestion_graph.py์ ์ ์๋์ด ์์ต๋๋ค.
ํ์ฌ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
coordinator_startparse_pdfparse_qualityquality_gateingest_questionsclassify_questionsvisual_questionsvalidate_questionscoordinator_finish
์ด๋ ๊ฒ ๋จ๊ณ๋ฅผ ๋๋๋ฉด ์คํจ ์ง์ ์ ์ถ์ ํ๊ธฐ ์ฝ๊ณ , ๋์ค์ ํน์ ๋จ๊ณ๋ง ๊ฐ์ ํ๊ธฐ๋ ์ฝ์ต๋๋ค.
5. PDF ํ์ฑ
PDF์์ ํ ์คํธ๋ฅผ ์ถ์ถํ๊ณ ๋ฌธ์ ๋จ์๋ก ๋๋๋๋ค.
ํ์ฑ ๊ฒฐ๊ณผ์๋ ๋ณดํต ์๋ ์ ๋ณด๊ฐ ํฌํจ๋ฉ๋๋ค.
- ๋ฌธ์ ๋ณธ๋ฌธ
- ๋ณด๊ธฐ
- ์ ๋ต
- ํด์ค
- ๋ฌธ์ ๋ฒํธ
- ํ์ด์ง
- ์๋ณธ ํ ์คํธ
- ์ด๋ฏธ์ง ๊ฒฝ๋ก
LLM์ ๋ชจ๋ ๋จ๊ณ์์ ๋ฌด์กฐ๊ฑด ์ฐ๋ ๊ฒ์ด ์๋๋ผ, ๊ตฌ์กฐํ๊ฐ ์ด๋ ต๊ฑฐ๋ ๋ณด์ ์ด ํ์ํ ๋จ๊ณ์์ ์ ํ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐฉํฅ์ ๋๋ค.
6. ํ์ฑ ํ์ง ๊ฒ์ฆ
ํ์ฑ๋ ๋ฌธ์ ๊ฐ ๋ฐ๋ก ์ ์ฅ๋๋ฉด ์๋ชป ๋๋ ๋ฌธ์ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ค์ด๊ฐ ์ ์์ต๋๋ค.
์ด๋ฅผ ์ค์ด๊ธฐ ์ํด ์ ์ฅ ์ ์ ํ์ง ๋ฆฌํฌํธ๋ฅผ ๋ง๋ญ๋๋ค.
๊ฒ์ฌ ์์:
- ๋ฌธ์ ๋ณธ๋ฌธ์ด ๋น์ด ์๋๊ฐ
- ๋ณด๊ธฐ ๊ฐ์๊ฐ ๋๋ฌด ์ ์๊ฐ
- ์ ๋ต์ด ๋น์ด ์๋๊ฐ
- ๋ฌธ์ ๋ฒํธ๊ฐ ์ด์ํ๊ฐ
- ๊ฐ์ ๋ฌธ์ ๊ฐ ์ค๋ณต์ผ๋ก ๋ค์ด์๋๊ฐ
- ์ฒญํน ๊ฒฐ๊ณผ๊ฐ ๋๋ฌด ์งง๊ฑฐ๋ ๊ธด๊ฐ
7. Quality Gate
ํ์ง ๊ฒ์ดํธ๋ โ์ด ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ก ์ ์ฅํด๋ ๋๋๊ฐโ๋ฅผ ํ๋จํ๋ ๋จ๊ณ์ ๋๋ค.
ํ์ง์ด ๋๋ฌด ๋ฎ์ผ๋ฉด ์ ์ฅ์ ๋ณด๋ฅํ๊ณ , ์ฌ๋์ด ํ์ธํ๊ฑฐ๋ ํ์๋ฅผ ๊ฐ์ ํ ์ ์๋๋ก ํฉ๋๋ค.
์ด ํ๋ก์ ํธ์์๋ ์ฌ๋์ด ๋ชจ๋ ๋ฌธ์ ๋ฅผ ์ง์ ๊ฒ์ํ๋ ๋ฐฉ์๋ณด๋ค, ๊ท์น ๊ธฐ๋ฐ ๊ฒ์ฆ๊ณผ ์ ํ์ ์ธ LLM ํ์ฉ์ผ๋ก ์๋ ๊ฒ์ ๋น์จ์ ๋์ด๋ ๋ฐฉํฅ์ ๋ชฉํ๋ก ํฉ๋๋ค.
ํ์ง ๊ฒ์ดํธ๋ฅผ ํต๊ณผํ์ง ๋ชปํ ๊ฒฐ๊ณผ๋ ๋ฐ๋ก PostgreSQL์ ๋ฃ๊ธฐ๋ณด๋ค ๊ฒ์ ํ์ ์ํ๋ก ๋จ๊ธฐ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๋ ๊ฒ ํด์ผ ์๋ชป ์ฒญํน๋ ๋ฌธ์ ๊ฐ ์ค์ ๋ฌธ์ ํ์ด ํ๋ฉด์ ์์ด๋ ๊ฒ์ ์ค์ผ ์ ์์ต๋๋ค.
8. PostgreSQL ์ ์ฅ
ํ์ง ๊ฒ์ดํธ๋ฅผ ํต๊ณผํ ๋ฌธ์ ๋ questions ํ
์ด๋ธ์ ์ ์ฅ๋ฉ๋๋ค.
์ฌ์ฉ์๊ฐ ๋ฌธ์ ๋ฅผ ํ๋ฉด ํ์ด ๊ธฐ๋ก์ attempts ํ
์ด๋ธ์ ์ ์ฅ๋ฉ๋๋ค.
๊ฐ๋
์ ๋ฆฌ ๋ฐ์ดํฐ๋ concept_notes ํ
์ด๋ธ์ ์ ์ฅ๋ฉ๋๋ค.
9. Chroma ์์ธ
์ ์ฌ ๋ฌธ์ ๊ฒ์์ ์ํด ๋ฌธ์ ๋ด์ฉ์ ์๋ฒ ๋ฉ์ผ๋ก ๋ณํํด Chroma์ ์ ์ฅํฉ๋๋ค.
์ด๋ PostgreSQL์ ๋ฌธ์ ID์ Chroma์ ๋ฒกํฐ ๋ฐ์ดํฐ๊ฐ ์ฐ๊ฒฐ๋์ด ์์ด์ผ ํฉ๋๋ค. ๊ทธ๋์ผ ์ ์ฌ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ์ค์ ๋ฌธ์ ํ๋ฉด์ผ๋ก ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
๋ฐฐํฌ์ฉ Seed ์์ฑ
Hugging Face Space์์๋ ๋ก์ปฌ PostgreSQL DB, Chroma ์ธ๋ฑ์ค, PDF ์๋ณธ์ ์ง์ ์ฌ๋ฆฌ์ง ์์ต๋๋ค. ๋์ ๋ฐฐํฌ ์ ๋ฐ๋ก ๋ฌธ์ ํ์ด๋ฅผ ํ์ธํ ์ ์๋๋ก seed ๋ฐ์ดํฐ๋ฅผ ์์ฑํฉ๋๋ค.
ํ์ฌ ๋ฐฐํฌ์ฉ seed ์์ฑ ๋ช ๋ น์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
python scripts/export_hf_seed.py
์ด ์คํฌ๋ฆฝํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ ๋ ๋ฐ์ดํฐ๋ฅผ ํฉ์ณ ์ฌ์ฉํฉ๋๋ค.
data/Json/questions.json: ๋ฌธ์ , ๋ณด๊ธฐ, ์ ๋ต, ํด์ค์ด ์ ๋ฆฌ๋ ๊ธฐ์ค ๋ฐ์ดํฐdata/parsed_json/reparsed_multipage_images_20260601_205501.json: ๊ณตํต ์ง๋ฌธ๊ณผ ๊ณตํต ์ง๋ฌธ ์๋ฌธ ์ด๋ฏธ์ง ์ ๋ณด
์์ฑ ๊ฒฐ๊ณผ:
cert_study_app/demo_data/questions_seed.jsonstatic/question_assets/
ํ์ฌ seed์๋ 321๋ฌธํญ์ด ๋ค์ด ์์ผ๋ฉฐ, ๊ณตํต ์ง๋ฌธ์ด ์๋ ๋ฌธํญ์ ๊ธด ์ง๋ฌธ๊ณผ ์๋ฌธ ์ด๋ฏธ์ง ๊ฒฝ๋ก๊ฐ ํจ๊ป ์ ์ฅ๋ฉ๋๋ค. Yes/No ์ง์ ํ ๋ฌธ์ ๋ ํ๋ฉด์์ ์ง์ ๋ณ ์ / ์๋์ค๋ก ํ ์ ์๋๋ก ์ ๋ต์ด Y,N,Y ๊ฐ์ ํํ๋ก ์ ๊ทํ๋ฉ๋๋ค.
ํ์ดํ๋ผ์ธ์์ ์ค์ํ ์
์ ์ฅ ์ ์ ํ์ง์ ํ์ธํ๋ค
ํ์ฑ ๊ฒฐ๊ณผ๊ฐ ์๋ชป๋ ์ํ๋ก ์ ์ฅ๋๋ฉด ๋์ค์ ์์ ํ๊ธฐ ์ด๋ ต์ต๋๋ค. ๊ทธ๋์ ์ ์ฅ ์ ํ์ง ๊ฒ์ฆ์ด ์ค์ํฉ๋๋ค.
๊ธด ์์ ์ Airflow๊ฐ ๋งก๋๋ค
PDF ์ฒ๋ฆฌ, ์ด๋ฏธ์ง ๋ถ์, ์์ธ์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆด ์ ์์ต๋๋ค. ์ด๋ฐ ์์ ์ ์น ์์ฒญ ์์์ ๋ชจ๋ ์ฒ๋ฆฌํ๊ธฐ๋ณด๋ค Airflow๋ก ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์์ ์ ์ ๋๋ค.
LLM ์ฌ์ฉ์ ์ต์ํํ๋ค
LLM์ ๋๋ฆฌ๊ณ ๋น์ฉ์ด ๋ค ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๊ธฐ๋ณธ์ ์ธ ๊ฒ์ฆ์ ๊ท์น๊ณผ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ ๊ฒ์ฌ๋ก ์ฒ๋ฆฌํ๊ณ , ๊ผญ ํ์ํ ๋ถ๋ถ์์๋ง LLM์ ์ฌ์ฉํ๋ ๋ฐฉํฅ์ด ์ข์ต๋๋ค.
