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

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
- 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
- Streamed progress of 30-second jobs with StreamingHttpResponse (NDJSON) and distinguished failure cases (no company, no comments, LLM failure)
- AI book service: custom Django auth (open-redirect protection), AI recommendations restricted to registered book IDs; 45 mock-based tests without external APIs
- 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
- 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
Fake-LLM tests guarantee the rules (citation checks, error handling) but not answer quality; the next step is a question set evaluated on a real model for retrieval hits and citation accuracy.
Lesson: deciding failure defaults first (broken JSON, failed selection, no citations) kept the service stable even when LLM output wavered.
ThRead — LLM comment-analysis result screen
Heritage RAG guide — Q&A showing only verified citations