Skip to content

Repository files navigation

제약·바이오 연구개발비 자산화 공시 RAG 챗봇

CPA가 제약 바이오 연구개발비 자산화 공시를 확인할 수 있도록 돕는 RAG 챗봇. K-IFRS 회계기준 · DART 전자공시 · 삼일회계법인 KAM 자료를 근거로, 제약·바이오 32개 상장사의 연구개발지 자산화 공시 질문에 출처를 인용하며 답변한다.


데모

KAM Lens 메인 화면

다크 테마 · 좌우 말풍선 채팅 · 문장별 [S#] 출처 인용

정량 데이터 추출 (DART 주석 표) 기준서 ↔ 공시 연결 (K-IFRS 1038호)
정량 추출 기준-공시 연결
연구개발비 자산화 금액을 원화 전액으로 추출 + 출처 원문 링크 자산화 요건을 설명하고 실제 공시 사례를 DART에서 연결
회계처리·감사 관점 분석 정성 사업 분석 (파이프라인·기술이전)
감사 관점 분석 정성 분석
회계기준 근거와 함께 회계처리 쟁점을 해설 신약 파이프라인·라이선스 계약을 수익인식 관점으로 해석

핵심 기능

  • 3-Source RAG: 한 질문에 K-IFRS 기준 근거 + 실제 DART 공시 사례 + KAM 감사 관점을 동시 검색
  • 하이브리드 검색 + RRF 융합: BM25(키워드) + 벡터(의미) 검색을 RRF로 통합
  • 질의 이해: 질문에서 기업명 인식 → 메타데이터 필터링, 다중 기업 비교·부정("~가 아닌") 질의 처리
  • 근거 인용: 답변 문장마다 [S#] 출처 표기로 할루시네이션 억제
  • 정형화 레이어: 공시마다 다른 연구개발비 표(천원·백만원·억원)를 표준 스키마로 추출·저장해 기업 간 비교를 가능하게 함. 단위 환산은 LLM이 아닌 코드가 수행 → 상세 문서

아키텍처 구조 이해

                       사용자 질문
                           │
                 ┌─────────▼──────────┐
                 │ 질의 이해 (기업명·필터) │
                 └─────────┬──────────┘
                           ▼
       ┌──────────── 하이브리드 검색 ────────────┐
       │   BM25(키워드)         벡터 검색(의미)     │
       │       └───── RRF 융합 ─────┘             │
       └──────────────────┬───────────────────────┘
           K-IFRS / DART / KAM  (ChromaDB · HNSW)
                           ▼
                  2단계 리랭킹 (FlashRank)
                           ▼
               GPT-4o (근거 기반 생성 + 인용)
                           ▼
                  답변 + 핵심 출처 [S#]

주요 문제해결

  1. GIGO 진단·해결: 챗봇이 정량 데이터를 못 가져오던 원인을 벡터DB를 직접 열어 검증해 수집 단계가 질문과 무관한 섹션만 저장하던 문제로 규명 → 질문 의도와 정렬된 화이트리스트 기반 수집으로 재설계
  2. 목차 파서 버그: 보고서 목차 149개 중 3개만 읽던 버그 수정
  3. 검색 품질: BM25 + 벡터 하이브리드 + RRF 융합으로 기업명·정량 데이터 검색 보강
  4. 벡터DB 인프라 디버깅: ChromaDB가 한글 경로에서 HNSW 인덱스를 못 읽는 문제를 통제 실험으로 규명 → ASCII 경로로 이전해 해결
  5. 다중 기업 검색: 비교 질문에서 한 기업만 검색되던 한계를 다중 기업 균형 검색으로 개선
  6. 연구개발비 자산화 공시에 적용하는 등식 총액 = 자산화 + 비용화 뿐일 때, 정부보조금 필드가 등장 시 오류가 발생하는 문제 발견 -> 정부보조금 필드 추가

성능 (고정 벤치마크)

5개 고정 문항(정량추출·기준연결·기업비교·감사관점·정성분석)으로 개선 전후를 정량 측정.

항목 결과
종합 점수 4/5 → 5/5
예시 "연구개발비 자산화 금액"을 정확한 수치로 답변, "셀트리온 vs 한미약품 자산화 정책 비교" 등

회차별 추적: Notes/Benchmarks/


기술 스택

분류 기술
UI Streamlit
RAG 프레임워크 LangChain
벡터 DB ChromaDB (HNSW 인덱스)
임베딩 OpenAI text-embedding-3-small
LLM GPT-4o
검색 BM25(rank-bm25) + 벡터 + RRF 융합, 2단계 리랭킹(FlashRank)
질의 이해 기업명 엔티티 인식 + 메타데이터 필터링
DART 수집 DART Open API + BeautifulSoup (HTML 표 → 마크다운)

실행 방법

1. 환경 설정

pip install -r requirements.txt

프로젝트 루트에 .env 생성:

OPENAI_API_KEY=sk-...
DART_API_KEY=...

2. DART 데이터 인제스트 (최초 1회)

python dart_ingest.py

DART 공시 HTML을 파싱해 회계 주제별 청크를 추출·임베딩한다. ⚠️ 벡터 DB는 ASCII 경로(~/rag_chroma_data) 에 생성된다 — 한글 경로에서 ChromaDB HNSW 로딩이 실패하는 이슈를 회피하기 위함.

3. 앱 실행

streamlit run app.py

프로젝트 구조

RAG-Accounting-ChatBot/
├── app.py                 # Streamlit UI (다크 테마 채팅)
├── rag_engine.py          # 검색 엔진 (하이브리드·RRF·질의이해·ChromaDB)
├── dart_ingest.py         # DART 공시 수집 → ChromaDB
├── extract_facts.py       # 정형화 레이어 (연구개발비 표준 스키마 추출)
├── prompts.py             # 시스템/유저 프롬프트, 출처 포맷
├── run_benchmark.py       # 고정 벤치마크 측정
├── finalize_db.py         # 벡터 DB 구축
├── rebuild_dart_index.py  # 인덱스 복구
├── requirements.txt
├── .streamlit/config.toml # 다크 테마
└── Notes/Benchmarks/      # 벤치마크 결과

주요 기여

본 프로젝트 팀은 2명으로 구성되었으며, 중점적으로 담당한 파트는 다음과 같다.

  • DART 수집 파이프라인 재설계: 목차 파서 버그 수정, 화이트리스트 기반 섹션 선택, HTML 표 파싱
  • 검색 엔진: BM25+벡터 하이브리드, RRF 융합, 다중 기업·부정 질의 이해
  • ChromaDB 안정화: 한글 경로 HNSW 이슈·런타임 안정성 디버깅
  • 평가 체계: 고정 5문항 벤치마크 설계 및 회귀 추적
  • UI: 다크 테마 채팅 인터페이스

About

RAG 기술을 적용한 제약 바이오 기업 회계처리 이슈 관련 Chat-Bot System

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages