Portfolio
Vantage | AI 지식 큐레이션 플랫폼
AI 지식 큐레이션 플랫폼 vantage
- 개인 프로젝트
- 기간: 2026.05 ~ 진행중
프로젝트 개요
새로운 기술, 새로운 정보가 쏟아지는 AI 시대에 뉴스, 정보 등을 한 곳에서 손쉽게 볼 수 있는 개인용 웹 개발 및 심도 있는 기술 학습이 목표.
뉴스 수집등의 저작권 문제가 발생 가능하여 제한적 공개(코드 a@11F13d8d61708e)
프로젝트 목표
- 뉴스, 기술 블로그, PDF 등 다양한 정보 수집 및 더 다양한 정보의 수집
- 정보를 쉽게 볼 수 있도록 정보 가공
- 에이전틱 RAG 챗봇을 구축하여 원하는 정보를 쉽게 찾을 수 있음
사용 기술
- AI/LLM: LangChain, OpenAI API, MinerU, Chonkie, DeepEval
- Backend: Java/Spring boot, Python/FastAPI
- DataBase: ParadeDB, Redis
- Frontend: TypeScript, NextJS
- Observability: Grafana, Prometheus, Loki
- Cloud & Infra: Oracle Cloud(ARM), GitHub Actions, Kubernetes(k3s), RabbitMQ
- 개발환경: Claude Code, Codex, Antigravity IDE, uv, ty
주요 기능
- Agentic RAG 챗봇: 수집된 정보들을 기반으로 원하는 정보를 쉽게 찾을 수 있음
- 웹 피드: AI 요약을 거쳐 짧은 단편 정보만 제공하며 원문 링크를 제공, 아티클 클러스터링을 통해 중복 기사, 연관된 기사 등을 연결
- PDF/기사 처리 파이프라인: 주로 해외 뉴스, Hacker News, 기업 기술 블로그, 최신 논문 등을 수집 및 처리하여 활용 가능하게 가공.
주요 활동 및 문제해결 등
AI를 위한 개발 환경 구축- 문제: Claude Code와 Codex를 활용한 개발 과정에서 세션·도구 전환 시 작업 문맥이 단절되고, 이전 기록 탐색과 AI 산출물 검증에 많은 시간이 소요되었습니다.
- 해결: Notion 기반 작업 기록 Wiki를 구축해 문맥을 복원할 수 있도록 하고,
AGENTS.md와 Skills에 개발 규칙을 정의했습니다. 또한 Playwright 기반 E2E 검증 환경을 구성해 AI가 직접 웹을 확인하고 변경 사항을 검증하도록 했습니다.
- 결과: AI 간 작업 문맥의 연속성을 확보하고, 개발부터 검증까지 AI가 수행할 수 있는 환경을 구축해 반복적인 문맥 전달과 수동 검증 부담을 줄였습니다.
백터, FTS(ts_rank), BM25, 하이브리드 리트리버를 각각 데이터셋을 사용해 정량적 평가를 진행. 한국어 형태소 처리를 위해 Kiwi 적용. (143문항)
| 구성 | recall@5 | recall@10 | recall@20 | MRR@5 | nDCG@5 | complete@5 |
| 벡터 단독 | 0.916 | 0.951 | 0.969 | 0.844 | 0.857 | 0.909 |
| FTS 단독 | 0.790 | 0.892 | 0.909 | 0.653 | 0.678 | 0.762 |
| BM25 단독 | 0.937 | 0.944 | 0.972 | 0.906 | 0.913 | 0.937 |
| FTS hybrid 5:5 | 0.948 | 0.955 | 0.969 | 0.854 | 0.874 | 0.937 |
| BM25 hybrid 5:5 | 0.979 | 0.986 | 0.986 | 0.903 | 0.921 | 0.979 |
- 문제: RAG 에이전트가 검색에 실패했을 때 유사하거나 무관한 정보의 수치를 인용해 답변하는 환각 문제가 발생했습니다.
- 해결: Claude로 합성 데이터셋을 생성·검수하고, DeepEval 기반 LLM-as-a-Judge 평가 환경을 구축했습니다. 평가 결과를 바탕으로 Sufficient Context Gate를 도입해 답변 전 검색 근거의 충분성을 검증하도록 개선했습니다.
- 결과: 정량적 평가 체계를 확보하고, 근거가 불충분한 경우 답변을 제한해 환각 발생을 줄이고 응답 신뢰성을 높였습니다.
- 총 47문항 - 2회 평균 - 지표 correctness (0.811 → 0.944)
- 문제: 동일 사건의 유사 기사들이 검색 결과 Top-K를 점유하고, 대표 기사만 제공할 경우 에이전트가 연관 기사를 확인하지 않은 채 답변하는 문제가 발생했습니다.
- 해결: 클러스터별 대표 기사만 검색 결과에 노출하고, 1차 검색 결과를 메타데이터로 제한했습니다. 실제 내용 확인 시 연관 기사 확장 도구를 사용하도록 검색 흐름을 개선했습니다.
- 결과: 중복 기사로 인한 검색 결과 편중을 완화하고, 다양한 정보 탐색을 지원하면서 컨텍스트 토큰 사용량을 절감했습니다.
- 문제: 긴 PDF는 일부 청크만으로 전체 맥락을 파악하기 어렵고, 세부 내용 검색과 문서 전체 탐색을 동시에 지원하기 어려웠습니다.
- 해결: Parent-Child 구조와 SlumberChunker 기반 의미 청킹을 적용하고, Map-Reduce 방식으로 PDF 전체 요약을 생성했습니다. 기존 Parent-Child 리트리버에 더해 전체 요약과 Parent 단위 요약을 활용하는 Wiki형 리트리버를 추가했습니다.
- 결과: 문서 전체 맥락을 파악하는 탐색 기능과 세부 내용 검색 기능을 함께 지원하는 계층적 검색 구조를 구축했습니다.
- 문제: PostgreSQL 기반 작업 큐에서 작업 요청과 실행 상태 관리가 결합되어 서비스 간 책임과 경계가 불명확하고, 장애 복구에 한계가 있었습니다.
- 해결: RabbitMQ 기반 Command/Event 구조로 전환하고, Outbox/Inbox 패턴과 멱등성 키를 적용해 메시지 유실 및 중복 처리 위험을 줄였습니다. 또한 작업 요청과 실행 이력을 분리해 이벤트 기반 Read Model을 구축했습니다.
- 결과: 서비스별 책임과 경계를 명확히 하고, 서비스 간 결합도를 낮추면서 장애 복구 안정성과 작업 추적성을 강화했습니다.