AI project2026.07 – presentTeam of 2

SSAFY — ThRead LLM comment-analysis pipeline · AI Challenge VQA ensemble

Extended a reading-community service across five projects, from data collection to LLM analysis and web service, plus a multimodal QA challenge

Samsung Software & AI Academy for Youth (SSAFY) · team of 2 · Backend & data pipeline · model training (AI Challenge)
Heritage RAG guide — pick a national treasure, ask, and see only the evidence actually cited (offline demo mode, no API key)
▶ Demo — Heritage RAG guide — pick a national treasure, ask, and see only the evidence actually cited (offline demo mode, no API key)

Problem

SSAFY's capstone series grows one service (ThRead) each round — data processing → external APIs → responsive web → Django auth → crawling and LLM pipelines

My role

Own the Django design, backend, generative-AI and API integration, and the crawling/data pipeline in a team of two

What I did

  1. Comment pipeline: Selenium collects live comments → the LLM returns only the numbers of inappropriate comments and code removes them → pandas/regex cleaning → IQR length thresholds → LLM augmentation (retry on count mismatch) → summary, each step stored
  2. Streamed progress of 30-second jobs with StreamingHttpResponse (NDJSON) and distinguished failure cases (no company, no comments, LLM failure)
  3. AI book service: custom Django auth (open-redirect protection), AI recommendations restricted to registered book IDs; 45 mock-based tests without external APIs
  4. AI core project 2 · National-treasure RAG guide (2026.10, solo): collected treasures and official descriptions from the Korea Heritage Service open API (XML, EUC-KR) and auto-linked each to Korean Wikipedia; two ChromaDB collections with fixed chunk IDs (idempotent re-indexing); per-question LLM query extraction and document selection with caching and offline fallback; LangGraph retrieve→generate where [evidence N] tags are checked in code and unknown numbers removed; Streamlit + FastAPI UIs; 50 tests with a fake LLM and Streamlit AppTest
  5. AI Challenge (2026.09, image + question 4-choice VQA, model training & refinement): Qwen 27B/4B QLoRA, Gemma, OCR and multi-view probability ensembling; accepted changes by fixes − breaks and per-type regressions; SHA-256 manifests reproduce the submission without a GPU

Results

  • AI Challenge public score 0.94608 (4B baseline) → 0.96961
  • 86 automated tests passing; all project-5 requirements implemented, plus progress streaming and analysis history

Decisions & trade-offs

What I chose, and what I gave up for it

ThRead: the LLM only judges (returns numbers, e.g. which comments are inappropriate) and code removes or keeps items from the original — less flexible than letting the LLM rewrite, but the original is preserved and counts are guaranteed.
Heritage guide: evidence numbers are fixed at retrieval and the LLM only points to them — less freedom in phrasing, but citation checking becomes a simple set comparison.
VQA challenge: candidates were adopted by fixes−breaks and per-type regressions instead of accuracy — slower than chasing the score, but only 'reliably better' submissions remain.
Tests: mocks and a fake LLM instead of external APIs — fast and deterministic, but they don't measure the real model's answer quality.

Looking back · open questions

What I would change, and what is still open

Photos & figures