Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation


Logo

Path

AI가 도와주는 경제 첫걸음


사회 초년생이 집 계약, 저축, 대출, 연금 등 경제적 결정을 더 쉽게 이해하고 계획할 수 있도록 돕는 금융 설계 서비스입니다. 표를 직접 수정하거나 AI 채팅을 통해 지출 조정, 저축 계획, 경제 개념에 대한 상담을 받을 수 있습니다.


화면

메인 화면

목표 진척도(여행자금, 비상금, 독립 준비금 등)와 월별 수입/지출을 한눈에 보여줍니다.

재무설계표 채팅

재무설계표 옆에서 AI(Path AI)와 대화하며, 지출 조정이나 저축 계획에 대한 제안을 받고 표에 바로 반영할 수 있습니다.


기술 스택

구분 기술
언어/프레임워크 TypeScript, Express.js
인증 JWT
데이터베이스 PostgreSQL
캐시/세션 Redis
AI OpenAI API
API 문서화 Swagger
배포 Render

팀원

프론트엔드 6명(본인), 백엔드 2명


핵심 기능

1. 인증 & 사용자 (auth, user)

JWT 기반 로그인/회원가입/토큰 재발급을 처리합니다. 사용자 도메인은 기본 정보 외에 user-memory 엔티티를 별도로 두어, AI 채팅이 참고할 사용자 관련 기억(선호, 과거 상담 맥락 등)을 축적합니다.

2. 금융 개념 (concepts)

예적금, 대출, 연금 같은 금융 개념을 목록으로 제공해, 사용자가 채팅 없이도 기본 개념을 학습할 수 있게 합니다.

3. 재무 설계 (financial)

회원가입 시 수집한 재무 정보를 바탕으로 재무설계표(financial-statement), 목표(financial-goal), 월별 재무 현황(monthly-finances)을 생성·관리합니다.

4. AI 채팅 (chat)

일반 채팅 — 경제 개념이나 일반적인 상담에 답하는 대화형 세션(chat-room/chat-message)입니다. Tool Calling으로 아래와 같은 읽기 전용 도구를 자유롭게 호출해, 실제 사용자 데이터를 근거로 답변합니다.

도구 역할
get_memory_list / get_memory_by_id 채팅방의 요약 메모리 목록/상세 조회
get_messages_by_index 특정 구간의 과거 메시지 조회
get_user_memory 유저의 경제 경험 메모리 조회
get_financial_statement / get_financial_goals / get_monthly_finance 재무재표·목표·월간 재정 현황 조회
add_financial_goal 유저의 새 재정 목표 추가

재무설계 채팅(financial.chat) — 재무설계표를 옆에 두고 대화하며 표를 함께 다듬는 전용 세션입니다.

  • 채팅을 시작하면 최신 확정 재무재표를 스냅샷으로 복사한 draft(임시 작업본)를 자동 생성합니다. 이후 대화는 확정 재무재표가 아니라 이 draft를 기준으로 진행됩니다.
  • AI가 수정이 필요하다고 판단하면 propose_draft_change 도구로 필드 단위 proposal(수정 제안: 필드명/이전 값/새 값/사유)을 생성할 뿐, draft를 직접 바꾸지 않습니다.
  • 처리되지 않은 PENDING proposal이 있으면 새 메시지 전송 자체가 막혀서, 사용자가 먼저 수락(accept)/거절(reject)해야 대화가 이어집니다. 수락 시 draft와 실제 재무재표가 함께 갱신되고, 거절 시 draft는 그대로 유지됩니다.
  • 응답은 SSE(Server-Sent Events)로 스트리밍되며, tool 호출이 끝나 최종 답변을 생성하는 단계에서만 스트리밍 청크를 클라이언트로 전송합니다.
  • 상담을 마무리(completeAndCreateStatement)하면 draft에 사용자가 입력한 값(우선 적용)과 AI가 보완한 값을 합쳐 새로운 재무재표를 확정 저장하고, 기존 draft와 채팅 메시지를 정리하며, 재무재표 보관 개수 제한을 넘으면 가장 오래된 기록을 삭제합니다.

AI 재무제표 수정 제안 흐름

사용자: "이번 달 통신비를 좀 줄이고 싶어요"
        │
        ▼
AI가 get_financial_statement 등으로 현재 상태 파악
        │
        ▼
AI가 propose_draft_change 호출
   → financial-draft-change-proposal 생성 (PENDING)
        │
        ▼
사용자에게 제안 카드로 노출 (기존 값 → 새 값 + 사유)
        │
   ┌────┴────┐
   ▼         ▼
 수락        거절
   │         │
   ▼         ▼
draft/재무재표 갱신   draft 그대로 유지
   │
   ▼
(대화 계속 또는 상담 종료 → 재무재표 확정 저장)

5. RAG 기반 문서 상담 (rag)

PDF 문서를 업로드해 검색 증강 생성(RAG)에 활용하는 파이프라인입니다.

  • pdfjs-dist로 페이지 단위 텍스트를 추출해, 청크마다 정확한 페이지 번호를 남깁니다.
  • js-tiktoken(text-embedding-3-small 기준)으로 토큰 경계를 정확히 계산해 512토큰 단위, 50토큰 오버랩으로 청킹합니다.
  • OpenAI 임베딩 API를 청크 20개씩 배치로 호출해 임베딩을 생성하고, pdf-document/pdf-chunk에 저장합니다.
  • 질의 시 질문을 임베딩한 뒤 벡터 유사도로 상위 K개 청크를 검색(searchChunks)해, 근거 페이지와 함께 답변에 활용합니다.

6. 정기 배치 작업 (jobs)

monthly-finances-job이 스케줄러(scheduler.settings)에 따라 주기적으로 실행되며, finance.service/goal.service가 사용자별 월간 재무 현황을 집계하고 목표 진척도를 갱신합니다.


아키텍처

클라이언트
   │
   ▼
Express API (app.ts / server.ts)
   │
   ├─ auth / user        JWT 인증, 사용자·메모리 관리
   ├─ concepts           금융 개념 데이터 제공
   ├─ financial          재무설계표 / 목표 / 월별 현황 CRUD
   ├─ chat               일반 채팅(읽기 전용 Tool Calling) + 재무설계 채팅(Draft/Proposal, SSE 스트리밍)
   ├─ rag                PDF 업로드 → 페이지별 청킹·임베딩 저장 → 질의 시 유사도 검색
   │        │
   │        ▼
   │  infrastructure/ai (OpenAI Client) ── OpenAI API (Chat Completions, Embeddings)
   │
   └─ jobs               월간 재무 집계 스케줄러 (배치)
   │
   ▼
PostgreSQL (영속 데이터) + Redis (캐시/세션)

About

path 서비스의 api 서버 코드입니다

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages