Skip to content

legojeon/report-coach

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ReportCoach: AI 기반 리포트 작성 및 분석 플랫폼

ReportCoach는 과학전람회 보고서 데이터로 구축된 벡터 DB를 기반으로, AI를 활용하여 리포트를 검색, 분석하고 작성을 돕는 웹 애플리케이션입니다.

사용자는 AI와의 상호작용을 통해 아이디어를 발전시키고 완성도 높은 결과물을 만들 수 있습니다.

이 서비스는 2011년 이후 과학전람회 보고서 전체 데이터를 벡터화(embedding)해 구축한 DB를 기반으로 동작합니다.


🌟 주요 기능

리포트 작성 및 분석

  • AI 채팅: 문서 내용에 기반한 심층적인 질의응답이 가능합니다.
  • 리포트 작성: AI의 가이드를 받으며 단계별로 리포트를 완성할 수 있습니다.
  • 리포트 검색: 질문을 기반으로 가장 관련도 높은 보고서를 찾아주고, 여러 보고서의 내용을 종합하여 요약 설명해줍니다.
  • RAG 기반 검색: 과학전람회 보고서 사이트에 공개된 2011년 이후 모든 보고서 데이터를 벡터 DB(ChromaDB)에 임베딩하고, LangChain을 활용해 검색-증강-생성(Search-Augmented Generation) 방식을 구현했습니다.
  • 노트 작성: 분석 중 발견한 중요한 내용 혹은 작성중인 보고서를 노트로 저장하고 관리합니다.

문서 및 사용자 관리

  • PDF 뷰어: 웹에서 바로 문서를 확인하고 분석할 수 있습니다.
  • 안전한 사용자 인증: JWT 토큰 기반의 안정적인 회원가입 및 로그인 시스템을 제공합니다.
  • 프로필 및 계획 관리: 사용자 정보를 관리하고 리포트 작성 계획을 체계적으로 수립합니다

🖼️ 실행 화면


메인 페이지
사이트 접속 초기 화면

검색 화면
벡터DB 기반 검색 결과

보고서 분석 화면
AI와 질의응답하며 보고서 분석

보고서 작성 화면
AI 가이드와 함께 보고서 작성

노트 페이지
저장된 보고서 및 대화 내역 조회

멤버십 페이지
플랜 구독 및 해지

🛠️ 기술 스택

Backend

  • FastAPI: Python 웹 프레임워크
  • Supabase: 데이터베이스 및 인증
  • LangChain: AI 모델 통합
  • ChromaDB: 벡터 데이터베이스
  • Google GenAI: AI 모델 서비스
  • Uvicorn: ASGI 서버

Frontend

  • React: 사용자 인터페이스
  • Vite: 빌드 도구
  • Tailwind CSS: 스타일링
  • TipTap: 리치 텍스트 에디터
  • React Router: 라우팅
  • Axios: HTTP 클라이언트

🛠️ Vector DB & RAG Architecture

  • 과학전람회 보고서 사이트에서 2011년 이후 모든 보고서 메타데이터 및 PDF를 수집
  • 보고서 본문을 문단 단위로 쪼개고 임베딩(embedding)하여 ChromaDB에 저장
  • LangChain을 통해 벡터 검색과 문서 retrieval 파이프라인 구성
  • Google GenAI 모델이 검색된 문서를 기반으로 자연스러운 답변을 생성 (RAG pipeline)

🧭 Architecture (RAG)

ReportCoach RAG 시스템 구조 (전체 아키텍처)
flowchart TB
    subgraph OFFLINE["📦 오프라인: 지식베이스 구축"]
        A1[과학전람회 사이트] --> A2[report_crawler]
        A2 --> A3[download_pdfs]
        A3 --> A4[extract_text / extract_image]
        A4 --> A5[reformat_text]
        A5 --> A6[convert_json]
        A6 --> A7[build_chromadb]
        A7 --> A8[(ChromaDB<br/>벡터 DB)]
        A7 --> A9["HuggingFace Embeddings<br/>(multilingual-e5-large)"]
        A9 --> A8
    end

    subgraph ONLINE["🔍 온라인: 검색·생성 (RAG)"]
        B1[사용자 쿼리] --> B2[SearchService]
        B2 --> B3[쿼리 분석<br/>Gemini + prompt_search]
        B3 --> B4[요약 쿼리 / 우선순위 섹션 / 키워드 / 메타필터]
        B4 --> B5[벡터 검색<br/>Chroma similarity_search]
        B5 --> B8[(ChromaDB)]
        B8 --> B5
        B5 --> B6[재정렬<br/>rerank_with_weights]
        B6 --> B7[Top-K 문서 결과]
        B7 --> B9{사용처}
        B9 --> B10[검색 API 응답]
        B9 --> B11[Write 채팅<br/>analyze_for_write]
    end

    A8 -.-> B8
Loading
RAG 검색 파이프라인 상세 (Sequence)
sequenceDiagram
    participant User
    participant API as Search/Write API
    participant Search as SearchService
    participant Gemini as Google Gemini
    participant Emb as HuggingFace Embeddings
    participant Chroma as ChromaDB

    User->>API: 질의 (query)
    API->>Search: search_documents(query, k)

    Note over Search: 1. 쿼리 분석
    Search->>Gemini: analyze_user_query (prompt_search.txt)
    Gemini-->>Search: 요약 쿼리, 우선순위 섹션, 키워드, 메타필터

    Note over Search: 2. 벡터 검색
    Search->>Emb: embed_query(summary_query)
    Emb-->>Search: query_embedding
    Search->>Chroma: similarity_search_with_score(summary_query, k×5)
    Chroma-->>Search: raw_results (문서 + 점수)

    Note over Search: 3. 메타데이터 필터 (선택)
    Search->>Search: metadata_filters 적용

    Note over Search: 4. 재정렬 (Rerank)
    Search->>Emb: embed_documents(문서/제목)
    Emb-->>Search: doc_vectors, title_vectors
    Search->>Search: rerank_with_weights<br/>(content/title 유사도, 섹션, 키워드, 수상, 메타데이터)

    Note over Search: 5. 결과 포맷
    Search->>Search: 중복 제거, Top-K, score_info
    Search-->>API: results
    API-->>User: 검색 결과 또는 Write 답변
Loading

📁 프로젝트 구조

report-app/
├── backend/                 # FastAPI 백엔드
│   ├── app/
│   │   ├── routers/        # API 라우터
│   │   ├── services/       # 비즈니스 로직
│   │   ├── models/         # 데이터 모델
│   │   └── schemas/        # Pydantic 스키마
│   ├── prompts/            # AI 프롬프트
│   ├── scripts/            # 유틸리티 스크립트
│   └── main.py             # 애플리케이션 진입점
├── frontend/               # React 프론트엔드
│   ├── src/
│   │   ├── features/       # 페이지 컴포넌트
│   │   ├── components/     # 재사용 컴포넌트
│   │   └── services/       # API 서비스
│   └── public/             # 정적 파일
└── docker-compose.yml      # Docker 설정

📄 참고 자료

  • backend 디렉토리 에서 API 명세, 벡터 DB 구축 과정, 과학전람회 보고서 크롤링 스크립트, 데이터 전처리 코드 등을 확인할 수 있습니다.

About

An AI assistant that intelligently searches and analyzes existing reports to help you write new ones.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors