환각·피싱·틀린 세법 답변을 잡는, 검증 가능한 AI 금융 비서입니다. 사기 문자를 붙여넣으면 판정 근거와 나에게 맞는 대응 요령을 알려주고, 세금은 코드가 법령 근거로 직접 계산하며, 청약·자산 상담까지 모든 답변의 출처와 🛡 방어 증명을 공개합니다 — 사용자 프로필을 아는 LangGraph 단일 에이전트가 pgvector/Neo4j GraphRAG로 세법·청약 조문 근거를 붙여 설명합니다.
판단을 대신하지 않고 근거를 정리해 보여주는 정보 제공 서비스이며, 투자·세무 자문이 아닙니다.
| 웹 콘솔 (심사 제출용) | https://midas-touch-five.vercel.app |
| API | https://midas-touch.duckdns.org · /health |
| 체험 계정 | 로그인 화면의 "체험 계정으로 바로 시작" 버튼 한 번 (demo@midas.touch) |
회원가입 경로가 없어 체험 계정을 열어 뒀습니다. 아래 퀵투어 링크를 먼저 눌러도 로그인 화면을 거쳐 원래 누른 화면으로 돌아옵니다.
심사위원이 콘솔 접속 즉시 3분 만에 Midas Touch의 4대 핵심 안전망을 검증할 수 있는 직행 시나리오입니다.
| # | 평가 항목 | 원클릭 질의 / 시연 링크 | 심사위원 검증 포인트 |
|---|---|---|---|
| 01 | 피싱·사기 방어 | 사기 문자 검증 챗봇 실행 | 10카테고리 결정론 휴리스틱 판정 + 행동 요령 + 112/1332 공식 신고번호 + 🛡 방어 증명 부착 확인 |
| 02 | 세법 환각 제로 | 해외주식 양도세 계산 질의 | LLM이 지어내지 않고 코드가 기본공제(250만원)·세율(22%)을 정확히 계산 + 국세청 해설서 조문 출처 확인 |
| 03 | 청약·자산 설계 | /cheongyak 및 /simulator | 84점 만점 청약가점표 비교 + 청년도약계좌 vs 일반적금 복리 도달 시점 그래프 (브라우저 로컬 연산) |
| 04 | 5겹 보안 방어 | /security | 프롬프트 인젝션·탈옥(DAN) 프리셋을 직접 던져 도구 화이트리스트 및 외곽 경계 방어 검증 |
| 구분 | 일반 금융 AI 챗봇 | Midas Touch (본 프로젝트) |
|---|---|---|
| 세법 수치 계산 | LLM 확률적 생성 (숫자 환각 및 엉터리 공제율 빈발) | 순수 Python 결정론 엔진 계산 (환각 0%) |
| 답변 신뢰성 검증 | 출처 미표기 또는 가짜 URL 환각 | 매 답변 하단 🛡 5겹 방어 증명서 및 국세청 조문 원문 강제 부착 |
| 피싱·스캠 대응 | 단순 텍스트 조언에 불과 (위험도 판정 불가) | 10카테고리 휴리스틱 스코어링 + 공식 도메인 감쇠 + 경찰청/금감원 연계 |
| 개인정보 보호 | 자산·가점 정보가 서버 프롬프트로 전송 | Privacy-by-Design (자산/가점 데이터 브라우저 로컬 격리) |
| AI 예측 감사성 | 무책임한 추천 후 사후 검증 없음 | 자가 채점 루프 (validate_calibration_moat.py) 로 AI 성적표 완전 공개 |
핵심 여정은 사기 검증 → 세법·근거 계산 → 청약·자금마련 3단계이며, 모든 답변에 출처와 방어 증명이 붙습니다.
-
💬 통합 상담 챗봇 (
/chat)- LangGraph 기반 멀티턴 에이전트 및 PostgresSaver 세션 저장
- Intent 판정 후 필요한 툴만 병렬 실행(fan-out) → 단일 synthesize 작문, SSE 토큰 스트리밍
- 사기 메시지 검증·결정론 세금 계산·청약 상담을 한 대화에서 처리, 답변 말미에 🛡 방어 증명 자동 부착
-
🛡️ 방어 체험 & 사기 검증 (
/security)- 사기 문자 10카테고리 결정론 휴리스틱 판정(+공식 도메인 안심 신호) + 페르소나별 대응 요령·공식 신고 번호
- 심사위원이 프롬프트 인젝션 공격 프리셋을 직접 던져 도구 화이트리스트 방어를 검증(20종 회귀 테스트 연계)
-
🏠 청약 정보 및 가점 계산 (
/cheongyak)- 공공데이터 API 기반 APT, 오피스텔, 무순위, 공공임대 공고 조회
- 주택형별 경쟁률, 당첨 가점, 특별공급 현황 상세 조회 및 챗봇 연계
- 청약가점 계산기(84점 만점, 「주택공급에 관한 규칙」 별표1 기준) — 공고별 최저 당첨가점과 내 점수를 나란히 비교
-
📊 자금마련 타임라인 시뮬레이터 (
/simulator)- 목표금액(청약 예치금 기준표 또는 직접 입력) · 현재 자산 · 월 저축액 입력 → 도달 시점 시각화
- 상품 2개(연이율) 비교로 "이 상품을 쓰면 O개월 당겨짐"을 그래프로 제시
- 계산은 전부 브라우저에서 수행 — 개인 자산 숫자가 서버로 전송되지 않음
-
🕸️ 지식그래프 및 GraphRAG (
/graph, API/query)- Neo4j 기반 세법 및 자산 관계 지식그래프 증분 구축
- D3 Force 2D 시각화 및 근거 서브그래프/원문 출처 조회 API (
/query) - PDF 문서 업로드 → 파싱·임베딩 인입(
POST /api/v1/graph/upload)
-
📈 주식 지표 참고 & 자가 채점 루프 (
/stocks) — 보조·실험- yfinance 실데이터 기반 기술지표 스냅샷(RSI, MACD, KDJ, BB, ATR) — 매매 권유가 아닌 참고 지표
- 핵심은 예측 자체가 아니라 검증: AI의 진단을 실현 수익률로 사후 채점하고 성적표를 그대로 공개(
validate_calibration_moat.py) — "우리 예측조차 채점한다"는 감사 가능성의 연장. 현재 edge는 미입증으로 정직하게 표기
-
⚖️ 세율 현황 및 개정안 인입 (
/tax-rates) — 부가- 결정론 세금 계산에 쓰이는 현행 세율을 연도별로 조회
- 개정안 문서(
.txt/.md/.pdf)를 올리면 현행 세율과의 차이와 검증 결과를 미리보기로 제시 — 법이 바뀌어도 코드 수정 없이 따라간다
-
👤 내 정보 (
/me) — 청약가점 3요소·1순위 자격·자금 상황 입력- 입력값은 브라우저에만 저장되며 공고 목록·챗봇·시뮬레이터의 계산 기준이 됩니다
uv 패키지 관리자를 사용해 개발 및 런처 환경을 동기화합니다.
uv sync
(cd frontend && npm install)
uv run alembic upgrade head# 개발 모드 (백엔드 :8000 / 프론트엔드 :3000)
./dev.sh
# 프로덕션 빌드로 로컬 확인 (next build && next start)
./start.shDB(Postgres·Neo4j)는 오라클 VM에 있고 포트가 방화벽에서 막혀 있다.
dev.sh·start.sh가 기동할 때db-tunnel.sh로 SSH 터널을 알아서 세운다(~/.ssh/config의oracle_vm별칭 사용).
배포된 백엔드(오라클 VM)를 다루는 건 vm.sh다:
./vm.sh health # 밖에서 보는 상태 — 프론트·API·DB 의존 엔드포인트
./vm.sh deploy # git pull → uv sync → 재기동 → 헬스 대기
./vm.sh logs -f # 백엔드 로그 따라가기- 웹 콘솔 접속: http://localhost:3000
- API 문서 (Swagger): http://localhost:8000/docs
# 린팅 (ruff)
uv run ruff check .
# 테스트 (pytest)
uv run pytest- Frontend: Next.js 16 (React 19), TypeScript, Tailwind CSS v4
- Backend: Python 3.12, FastAPI, Uvicorn, LangGraph, LangChain, Alembic
- Database: PostgreSQL 17 (pgvector), Neo4j 5 Graph DB
- AI & Data: NVIDIA NIM (
google/gemma-4-31b-it,BAAI/bge-m3), Tavily, yfinance, 청약홈 공공데이터 API - Infra: 오라클 VM(systemd + Caddy/Let's Encrypt) · Vercel · GitHub Actions
- Tooling: uv, ruff, pytest, ESLint
브라우저 ─HTTPS─> Vercel (Next.js)
└────HTTPS─> midas-touch.duckdns.org ─Caddy(TLS)─> backend:8000 ─┬─ PostgreSQL(pgvector)
(오라클 VM 2 OCPU/12GB) └─ Neo4j
프론트는 NEXT_PUBLIC_API_BASE로 백엔드를 직접 호출합니다. Vercel rewrites로 프록시하지
않는 이유는 챗 한 턴이 2분을 넘기는 경우가 있어 서버리스 실행시간 제한에 SSE가 잘릴 수 있기
때문입니다. DB 포트(5432·7687)는 방화벽에서 막아 두고 로컬 개발은 SSH 터널로 붙습니다.
CI/CD — main 머지 한 번으로 양쪽이 배포됩니다.
| 프론트 | 백엔드 | |
|---|---|---|
| 방식 | Vercel Git 연동(푸시형) | VM이 2분마다 폴링(당김형) |
| 반영 | 즉시(~40초) | 최대 2분 + CI 통과 대기 |
| 안전장치 | 빌드 실패 시 이전 배포 유지 | CI 게이트 · 변경범위 판정 · 헬스 실패 시 자동 롤백 |
백엔드가 당김형인 이유는 푸시형이면 셸이 열리는 SSH 키를 레포 시크릿에 둬야 하는데,
그 VM이 DB도 함께 돌리기 때문입니다. main 룰셋은 CI 2종 통과를 머지 조건으로 요구합니다.
자세한 절차와 함정은 배포 런북에 있습니다.
midas-touch/
├── frontend/ # Next.js 웹 콘솔 UI
├── backend/ # FastAPI API 및 LangGraph 에이전트 서비스
│ └── app/
│ ├── api/ # HTTP 라우터 (chat, stocks, cheongyak, graph 등)
│ └── services/
├── pipelines/ # 데이터 수집, 문서 파싱·임베딩, Neo4j 빌더 파이프라인
├── shared/ # PostgreSQL/Neo4j 클라이언트, NIM Rate Limiter
├── tests/ # 백엔드, 라우터, 단위/통합 테스트
├── openwiki/ # 상세 아키텍처 및 도메인 문서 모음
├── infra/ # Caddyfile, systemd 유닛, 자동배포 스크립트 (오라클 VM)
├── docs/ # 배포 런북, 디자인 시스템, 제출 문서
├── dev.sh # 로컬 개발 통합 실행 스크립트
├── start.sh # 프로덕션 빌드 로컬 확인
├── db-tunnel.sh # VM DB로 가는 SSH 터널 (dev.sh/start.sh가 자동 호출)
└── vm.sh # 배포된 VM 백엔드 운영 (deploy/status/logs/health/autodeploy)
시스템 아키텍처, 에이전트 설계, 디자인 시스템 등 자세한 내용은 다음 문서를 참고하세요.
- OpenWiki Quickstart
- 시스템 아키텍처
- 에이전트 구조
- API 명세서
- 디자인 시스템 — Bullion Terminal
- 배포 런북 — VM·Vercel 구성, 자동배포, 트러블슈팅