Skip to content

ppck75/assembly-member_LangGraph-tracker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🕵️‍♂️ assembly-member_LangGraph-tracker

LangGraph 기반 대한민국 국회의원 의정활동 추적 AI 에이전트

LangGraph 기반 국회의원 의정활동 분석 웹으로, 열린국회정보 API 등을 주로 활용해 발의법안, 표결, 정당 일치도, 공동발의 네트워크, 최근 이슈를 분석합니다.

복잡하고 산재된 국회 의정 활동 데이터를 통합 수집 및 분석하여 시민들이 의정 활동을 감시하고, 최근 이슈를 쉽게 알 수 있도록 하였습니다. 또한, 언론인에게는 감시 저널리즘(Watchdog Journalism)을 효과적으로 수행할 수 있는 데이터 기반의 취재 단서와 객관적 검증 도구를 제공합니다.

🌐 URL: https://national-assembly.streamlit.app/


🌟 주요 기능 (Key Features)

📋 1. 의원 기본정보 조회

  • 의원 프로필 관리: 국회의원 이름, 사진, 정당, 지역 등 기본 정보를 열린국회정보 API에서 조회
  • 의원 목록 브라우저: 카드 형식의 대수별 의원 목록 브라우저
    • 대수별 필터링 (2대~22대)
    • 정당·지역·위원회별 다중 필터
    • 이름·지역·위원회 검색
    • 정렬 옵션 (이름순·정당순·지역순·위원회순)
  • 재임 기간 분석: 의원의 재임 대수 및 연임 여부 확인
  • 위원회 정보: 현재 소속 위원회 및 직책 정보

📑 2. 발의법안 분석

  • 대표발의 및 공동발의 조회: 대한민국 국회 열린데이터광장 API를 통한 의원별 발의법안 통합 조회
  • 발의 역할 구성: 대표발의 vs 공동발의 비중을 시각화하여 입법 활동 수준 파악
  • 소관위원회별 분석:
    • 위원회별 발의건수를 Treemap 차트로 시각화
    • 주요 소관위원회 통계
  • 발의법안 통계:
    • 처리결과별 통계 (폐기·상정중·통과·부결 등)
    • 시간대별 추이 분석
  • 입법 관심 분야 분석: LLM을 활용한 발의법안 주제 자동 분류 및 의정 활동 특성 해석
  • 발의법안 상세 원자료: CSV 다운로드 가능한 완전한 발의법안 데이터 테이블

🕸️ 3. 공동발의 네트워크 분석

  • 1차 Ego-Network 시각화: vis.js 기반 대화형 네트워크 그래프
    • 대상 의원을 중심으로 공동발의 파트너를 연결
    • 공동발의 빈도에 따른 노드 크기 동적 조정
    • 협업 건수에 따른 엣지 두께 조정
  • 협업 유형 분류:
    • 당내 협업 (초록색): 같은 정당 의원들과의 협업
    • 당외 협업 (주황색): 다른 정당 의원들과의 협업
    • 초당성 지수로 교차-정당 협업 패턴 분석
  • 협업 통계:
    • 협업 파트너 수 및 협업 연결 건수
    • 당내/당외 협업 비율
  • 소관위원회별 네트워크 필터링: 특정 위원회에서의 협업 파트너만 표시
  • 반복 협업 분석:
    • Top 10 협업 의원 순위 막대 차트
    • 최근 공동발의 일시 추적
    • 협업 소관위원회 통계
  • 협업 해석: LLM 분석을 통한 협업 패턴의 정치적·정책적 의미 해석

📊 4. 표결(투표) 활동 분석

  • 표결 기록 통합 조회: 의원별 본회의 표결 기록을 대수별로 수집
  • 표결 결과 분류:
    • 찬성 표결 분석
    • 반대 표결 분석
    • 기권 표결 분석
    • 불참 표결 분석
  • 표결 요약 차트:
    • 대수별 표결 통계 (찬성·반대·기권·불참 분포)
    • 시간대 추이 분석
  • 표결 상세 조회 범위 설정:
    • 최근 N건 조회 (기본값: 200건)
    • 전체 재임 대수 표결 조회 옵션
    • 추가 대수 선택적 조회 기능
  • 표결 상세 원자료:
    • 의안명, 투표일, 위원회, 정책명, 표결값 등 완전한 정보
    • CSV 다운로드 가능
  • 표결 통계 해석: 조회 범위 및 불참 비중을 고려한 주의사항 자동 생성

⚖️ 5. 정당 다수 입장 일치도 분석

  • 당파성 분석: 의원의 표결이 같은 정당의 다수 입장과 얼마나 일치하는지 분석
  • 일치도 계산:
    • 각 표결에서 같은 정당 의원들의 찬성·반대 비율 계산
    • 해당 의원의 표결이 다수 입장과 일치/이탈 판정
  • 일치도 요약 차트:
    • 전체 일치도 구성 (일치·이탈·불참·판정제외) 파이 차트
    • 대수별 정당 일치도 추이 스택 차트
  • 이탈 표결 상세 분석: 정당 다수 입장에 반대한 표결 리스트
    • 표결일, 의안명, 정당 다수 입장 vs 개인 표결 비교
  • 범위 재분석 기능:
    • 초기 조회된 표결 범위 내에서 최근 N건으로 재계산
    • 동적 임계값 조정 (50~500건)
    • 재분석 결과 실시간 비교
  • 정당 일치도 상태: 캐시 적중 현황 및 추가 API 호출 현황 추적

🔍 6. 최근 이슈 추적

  • Google News RSS 기반 검색: 의원명 + 정당명으로 최근 공개 뉴스 자동 수집
  • 뉴스 요약:
    • LLM을 활용한 최근 이슈 분석 및 요약
    • 검색 결과 기반 자동 맥락 파악
  • 뉴스 타임라인 시각화: 발행일 기준 뉴스 타임라인 표시
  • 뉴스 테이블 필터링:
    • 제목·언론사·날짜 기반 검색 필터
    • 원문 링크 (새 탭 오픈)
  • 뉴스 원자료: 완전한 기사 메타데이터 CSV 다운로드

🎯 7. 종합 분석 및 시각화

  • 핵심 브리핑: 발의법안·표결·정당 일치도·최근 뉴스 수를 바탕으로 한 3~5문장 요약
  • KPI 대시보드:
    • 발의법안 총 건수
    • 표결 참여 총 건수
    • 정당 일치율
    • 최근 뉴스 수
  • 의원 프로필 요약: 정당·지역·위원회·재임 기간 등 상세 프로필 정보
  • 조회 범위 명시:
    • 의원 기본정보 조회 대수
    • 발의법안 조회 대수
    • 표결정보 초기 조회 대수
    • 표결정보 추가 선택 가능 대수
  • 다중 탭 인터페이스:
    • 요약 탭: 종합 지표 및 분석 결과
    • 발의 법안 탭: 법안 분석 및 네트워크
    • 표결 탭: 투표 기록 및 상세 분석
    • 정당 일치도 탭: 당파성 분석 및 이탈 추적
    • 최근 이슈 탭: 뉴스 검색 결과 및 분석
    • 원자료 탭: JSON 데이터 및 오류 메시지

⚙️ 8. 사용자 정의 분석 옵션

  • 조회 범위 제어:
    • 발의법안: 최근 재임 대수 vs 전체 재임 대수
    • 표결: 최근 N건 (50~1000건)
    • 정당 일치도: 최근 N건 (50~500건)
  • 분석 모듈 토글:
    • 발의법안 조회 활성화/비활성화
    • 초기 표결 상세 조회 활성화/비활성화
    • 정당 일치도 분석 활성화/비활성화
    • 최근 뉴스 검색 활성화/비활성화
    • LLM 분석 활성화/비활성화
  • 세부 설정: 고급 옵션으로 세밀한 조회 범위 조정
  • 개인 Gemini API 키 관리: 사용자 브라우저에만 저장되는 보안 입력

🔄 9. LangGraph 기반 AI 에이전트 워크플로우

  • 자동화된 11단계 분석 파이프라인:
    1. 입력값 정리 (사용자 요청 및 옵션 정규화)
    2. 의원 기본정보 조회 (재임 대수, 정당, 선거구 확인)
    3. 발의법안 조회 (대표발의 및 공동발의 수집)
    4. 입법 관심 분야 분석 (발의법안 통계 요약)
    5. 공동발의 네트워크 분석 (파트너 및 협업 패턴 계산)
    6. 표결 상세 조회 (찬성·반대·기권·불참 분류)
    7. 정당 다수 입장 일치도 분석 (일치율 계산)
    8. 표결 해석 메모 생성 (분석 범위·불참 비중 고려)
    9. 최근 이슈 검색 (Google News RSS 기반 수집)
    10. 핵심 브리핑 생성 (주요 활동 요약)
    11. 최종 결과 정리 (화면 표시 형태로 정렬)
  • 진행상황 추적: 각 단계별 진행률 및 상태 메시지 실시간 표시
  • 오류 처리: 단계별 오류 발생 시 상세 메시지 기록

💾 10. 데이터 관리 및 다운로드

  • CSV 다운로드: 모든 데이터 테이블에서 CSV 형식으로 다운로드 가능
    • 발의법안 데이터
    • 표결 기록 (찬성·반대·기권·불참별)
    • 공동발의자 정보
    • 최근 뉴스 목록
  • 캐시 시스템: 의원 목록 24시간 캐시로 빠른 조회
  • JSON 원자료: 전체 분석 결과를 JSON으로 조회 및 검증

🏗️ 시스템 아키텍처 및 워크플로우 (Architecture)

본 시스템은 3개의 데이터 수집 레이어LangGraph 기반의 AI 추론 레이어로 구성되어 있습니다.

📊 시스템 데이터 흐름 다이어그램


                ┌────────────────────────────────────────────────────────────────────────────────┐
                │                 🔹 데이터 수집 레이어 (Data Collection Layer)                  │
                ├────────────────────────────────────────────────────────────────────────────────┤
                │                                                                                │
                │    ┌───────────────────┐   ┌───────────────────┐   ┌───────────────────┐       │
                │    │ 의원 기본정보 API │   │   발의법안 API    │   │   표결정보 API    │       │
                │    │                   │   │                   │   │                   │       │
                │    │   열린국회정보    │   │   열린국회정보    │   │   열린국회정보    │       │
                │    │ - 의원정보        │   │ - 대표발의        │   │ - 본회의 표결     │       │
                │    │ - 정당, 지역      │   │ - 공동발의        │   │ - 표결결과        │       │
                │    │ - 위원회          │   │ - 처리결과        │   │ - 표결자세정보    │       │
                │    └───────────────────┘   └───────────────────┘   └───────────────────┘       │
                │              │                        │                        │               │
                │              └────────────────────────┼────────────────────────┘               │
                │                                       │                                        │
                │                               ┌───────▼───────┐                                │
                │                               │ 뉴스 검색 API │                                │
                │                               │               │                                │
                │                               │Google News RSS│                                │
                │                               │- 의원명 검색  │                                │
                │                               │- 정당명 검색  │                                │
                │                               │- 최근 기사    │                                │
                │                               └───────┬───────┘                                │
                │                                       │                                        │
                └───────────────────────────────────────┼────────────────────────────────────────┘
                                                        │
                                                        ▼
                ┌────────────────────────────────────────────────────────────────────────────────┐
                │                         🟡 데이터 정규화 & 캐싱 레이어                         │
                │                      (Data Normalization & Caching Layer)                      │
                ├────────────────────────────────────────────────────────────────────────────────┤
                │                                                                                │
                │   ┌────────────────────────────────────────────────────────────────────────┐   │
                │   │  • 데이터 전처리 및 정규화                                             │   │
                │   │  • 의원 정보 / 법안 정보 / 표결 정보 통합                              │   │
                │   │  • 24시간 캐시 시스템 (의원 목록)                                      │   │
                │   │  • 병렬 처리 (표결 상세 조회)                                          │   │
                │   └────────────────────────────────────────────────────────────────────────┘   │
                │                                                                                │
                └───────────────────────────────────────┬────────────────────────────────────────┘
                                                        │
                                                        ▼
                ┌────────────────────────────────────────────────────────────────────────────────┐
                │                    🟢 LangGraph 기반 AI 추론 & 분석 레이어                     │
                │                  (LangGraph AI Inference & Analysis Layer)                     │
                ├────────────────────────────────────────────────────────────────────────────────┤
                │                                                                                │
                │                        ┌─ 단계 1 ──────────────────────┐                       │
                │                        │ 입력값 정리                   │                       │
                │                        │ normalize_user_request        │                       │
                │                        └──────────────┬────────────────┘                       │
                │                                       │                                        │
                │                        ┌─ 단계 2 ──────────────────────┐                       │
                │                        │ 의원 기본정보 조회            │                       │
                │                        │ get_member_info               │                       │
                │                        └──────────────┬────────────────┘                       │
                │                                       │                                        │
                │                        ┌─ 단계 3 ──────────────────────┐                       │
                │                        │ 발의법안 조회                 │                       │
                │                        │ search_member_bills           │                       │
                │                        └──────────────┬────────────────┘                       │
                │                                       │                                        │
                │                        ┌─ 단계 4 ──────────────────────┐                       │
                │                        │  입법 관심 분야 분석 (LLM)  │  ◀── Gemini LLM         │
                │                        │  analyze_legislative_inter  │      (선택사항)         │
                │                        └──────────────┬────────────────┘                       │
                │                                       │                                        │
                │                        ┌─ 단계 5 ──────────────────────┐                       │
                │                        │ 공동발의 네트워크 분석        │                       │
                │                        │ analyze_cosponsor_network     │                       │
                │                        └──────────────┬────────────────┘                       │
                │                                       │                                        │
                │                        ┌─ 단계 6 ──────────────────────┐                       │
                │                        │ 표결 상세 조회                │                       │
                │                        │ get_all_member_votes          │                       │
                │                        └──────────────┬────────────────┘                       │
                │                                       │                                        │
                │                        ┌─ 단계 7 ──────────────────────┐                       │
                │                        │ 정당 일치도 분석              │                       │
                │                        │ analyze_party_alignment       │                       │
                │                        └──────────────┬────────────────┘                       │
                │                                       │                                        │
                │                        ┌─ 단계 8 ──────────────────────┐                       │
                │                        │  표결 해석 메모 생성 (LLM)  │  ◀── Gemini LLM         │
                │                        │  interpret_vote_stats       │      (선택사항)         │
                │                        └──────────────┬────────────────┘                       │
                │                                       │                                        │
                │                        ┌─ 단계 9 ──────────────────────┐                       │
                │                        │ 최근 이슈 검색                │                       │
                │                        │ search_recent_news            │                       │
                │                        └──────────────┬────────────────┘                       │
                │                                       │                                        │
                │                        ┌─ 단계 10 ─────────────────────┐                       │
                │                        │  핵심 브리핑 생성 (LLM)     │  ◀── Gemini LLM         │
                │                        │  generate_activity_briefing │      (선택사항)         │
                │                        └──────────────┬────────────────┘                       │
                │                                       │                                        │
                │                        ┌─ 단계 11 ─────────────────────┐                       │
                │                        │ 최종 결과 정리                │                       │
                │                        │ summarize_member_activities   │                       │
                │                        └──────────────┬────────────────┘                       │
                │                                       │                                        │
                └───────────────────────────────────────┼────────────────────────────────────────┘
                                                        │
                                                        ▼
                ┌────────────────────────────────────────────────────────────────────────────────┐
                │                    🔵 결과 렌더링 레이어 (Rendering Layer)                     │
                ├────────────────────────────────────────────────────────────────────────────────┤
                │                                                                                │
                │    ┌───────────────────┐   ┌───────────────────┐   ┌───────────────────┐       │
                │    │   Streamlit       │   │   ECharts 차트    │   │  Vis.js 네트워크  │       │
                │    │   웹 인터페이스   │   │   시각화          │   │  그래프 시각화    │       │
                │    │                   │   │                   │   │                   │      │
                │    │  • 대시보드       │   │  • 막대/파이차트  │   │  • Ego-Network    │       │
                │    │  • 탭 인터페이스  │   │  • 시계열 차트    │   │  • 협업 관계      │       │
                │    │  • 필터링 UI      │   │  • Treemap        │   │  • 동적 레이아웃  │       │
                │    └───────────────────┘   └───────────────────┘   └───────────────────┘       │
                │              │                        │                        │               │
                │              └────────────────────────┼────────────────────────┘               │
                │                                       │                                        │
                │                               ┌───────▼───────┐                                │
                │                               │    사용자     │                                │
                │                               └───────────────┘                                │
                │                                                                                │
                └────────────────────────────────────────────────────────────────────────────────┘

🔄 워크플로우 상세 설명

단계 노드명 역할 입력 출력
1️⃣ normalize_user_request 사용자 요청 정규화 의원명, 분석 옵션 정규화된 상태
2️⃣ get_member_info 의원 정보 조회 의원명 재임 대수, 정당, 위원회
3️⃣ search_member_bills 발의법안 수집 의원명, 대수 범위 대표/공동발의 법안 목록
4️⃣ analyze_legislative_interests 입법 관심 분야 분석 (LLM) 발의법안 목록 입법 관심사 분석 보고서
5️⃣ analyze_cosponsor_network 공동발의 네트워크 분석 발의법안 목록 협업 파트너, 네트워크 구조
6️⃣ get_all_member_votes 표결 기록 조회 의원명, 조회 범위 찬성/반대/기권/불참 분류
7️⃣ analyze_party_alignment 정당 일치도 분석 표결 기록, 정당 정보 일치도, 이탈 표결 목록
8️⃣ interpret_vote_statistics 표결 해석 (LLM) 표결 통계 주의사항, 해석 메모
9️⃣ search_recent_member_news 최근 이슈 검색 의원명, 정당명 뉴스 기사 목록
🔟 generate_activity_briefing 핵심 브리핑 (LLM) 전체 분석 결과 3~5문장 요약
1️⃣1️⃣ summarize_member_activity 최종 결과 정리 전체 분석 결과 화면 표시 형식의 정렬된 결과

📂 프로젝트 구조 (Project Structure)

📂
├── 의원_활동_추적_랭그래프_워크플로우.ipynb
├── app.py (Streamlit 메인 애플리케이션)
├── src/
│ ├── member_activity_workflow.py
│ ├── member_directory.py
│ └── streamlit_runtime.py
├── requirements.txt
└── README.md


🛠️ 기술 스택 (Tech Stack)

  • Language: Python 3.10+
  • Frameworks: LangGraph, LangChain
  • Data Source: 대한민국 국회 열린데이터광장(Open API) 및 실시간 Google News 수집
  • Streamlit: 수집된 의정 활동 데이터 및 LLM 추론 결과를 직관적인 웹 인터페이스로 시각화

About

LangGraph 기반 국회의원 의정활동 분석 웹으로, 열린국회정보 API 등을 주로 활용해 발의법안, 표결, 정당 일치도, 공동발의 네트워크, 최근 이슈를 분석합니다.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages