Skip to content

Fisa5-Main-Project/ai-server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

96 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

λ…Έν›„ν•˜μš° AI μ„œλ²„ (KnowWhoHow AI Server)

1. ν”„λ‘œμ νŠΈ κ°œμš”

λ³Έ ν”„λ‘œμ νŠΈλŠ” 크게 데이터 νŒŒμ΄ν”„λΌμΈ(Airflow) κ³Ό API μ„œλ²„(FastAPI) 둜 κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

AI μ„œλ²„λŠ” μ‚¬μš©μžμ˜ λ§ˆμ΄λ°μ΄ν„°μ™€ 금육 μ„±ν–₯을 μ „μ²˜λ¦¬ 및 λ²‘ν„°ν™”ν•˜μ—¬, **RAG(Retrieval-Augmented Generation)**λ₯Ό ν™œμš©ν•˜μ—¬ 개인 λ§žμΆ€ν˜• 금육 μƒν’ˆ(예금, 적금, νŽ€λ“œ, μ—°κΈˆ)을 μΆ”μ²œν•˜κ³  μƒλ‹΄ν•΄μ£ΌλŠ” μ„œλ²„μž…λ‹ˆλ‹€.

특히 Airflowλ₯Ό ν™œμš©ν•˜μ—¬ κΈˆμœ΅μœ„μ›νšŒ, κΈˆμœ΅κ°λ…μ› λ“± λ‹€μ–‘ν•œ 곡곡 데이터 OpenAPIλ‘œλΆ€ν„° μ΅œμ‹  금육 μƒν’ˆ 정보λ₯Ό 주기적으둜 μˆ˜μ§‘ν•˜κ³  μ „μ²˜λ¦¬ν•˜μ—¬ λ°μ΄ν„°μ˜ **신선도(Freshness)**λ₯Ό μœ μ§€ν•©λ‹ˆλ‹€. μˆ˜μ§‘λœ 데이터와 벑터 μž„λ² λ”©μ€ Cloud NoSQL DB인 MongoDB Atlas에 μ μž¬λ˜μ–΄, κ³ μ„±λŠ₯의 ν•˜μ΄λΈŒλ¦¬λ“œ 검색(Hybrid Search)을 μ§€μ›ν•©λ‹ˆλ‹€.

2. μ£Όμš” κΈ°λŠ₯

  • 개인 λ§žμΆ€ν˜• μƒν’ˆ μΆ”μ²œ: μ‚¬μš©μžμ˜ μžμ‚° ν˜„ν™©, 투자 μ„±ν–₯, μ—°λ ΉλŒ€ 등을 λΆ„μ„ν•˜μ—¬ 졜적의 금육 μƒν’ˆ μΆ”μ²œ.
  • μ§€λŠ₯ν˜• 챗봇 상담: 금육 μƒν’ˆμ— λŒ€ν•œ μ§ˆμ˜μ‘λ‹΅μ„ μ‹€μ‹œκ°„ 슀트리밍으둜 제곡.
  • 데이터 μ΅œμ‹ ν™” (ETL): κΈˆμœ΅μœ„μ›νšŒ 및 각 κΈˆμœ΅μ‚¬ 데이터λ₯Ό 주기적으둜 μˆ˜μ§‘, μ „μ²˜λ¦¬, μž„λ² λ”©ν•˜μ—¬ 벑터 DB에 적재.
  • μœ μ € 페λ₯΄μ†Œλ‚˜ 벑터화: μ‚¬μš©μž 데이터λ₯Ό ν…μŠ€νŠΈν™” 및 λ²‘ν„°ν™”ν•˜μ—¬ μœ μ‚¬λ„ 검색에 ν™œμš©.

3. 기술 μŠ€νƒ (Tech Stack)

3.1. Server (EC2 / Local)

  • Framework: FastAPI
  • Language: Python 3.10+
  • AI & LLM:
    • LangChain (Core, Community, Google GenAI)
    • Google Gemini Pro (Generative AI)
    • LangGraph (Agent Workflow)
  • Database:
    • MongoDB Atlas (Vector Store & Data Lake)
    • MySQL (User Data - Read Only)
  • Deployment: Docker, Uvicorn

3.2. Airflow (On-Premise)

  • Orchestrator: Apache Airflow 3.1.1
  • Executor: Celery Executor
  • Message Broker: Redis
  • Metadata DB: PostgreSQL
  • Key Libraries:
    • pandas, requests (Data Processing)
    • pymongo (DB Interaction)
    • langchain-google-genai (Embedding Generation)

4. 디렉토리 ꡬ쑰

main-project-ai/
β”œβ”€β”€ airflow/                  # Airflow κ΄€λ ¨ μ„€μ • 및 DAG
β”‚   β”œβ”€β”€ dags/                 # 데이터 νŒŒμ΄ν”„λΌμΈ (ETL) μ •μ˜
β”‚   β”œβ”€β”€ config/               # Airflow μ„€μ • 파일
β”‚   β”œβ”€β”€ Dockerfile            # Airflow μ»€μŠ€ν…€ 이미지 λΉŒλ“œ μ„€μ •
β”‚   └── requirements.txt      # Airflow μ˜μ‘΄μ„± νŒ¨ν‚€μ§€
β”œβ”€β”€ server/                   # AI API μ„œλ²„
β”‚   β”œβ”€β”€ app/                  # FastAPI μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œ
β”‚   β”‚   β”œβ”€β”€ api/              # API λΌμš°ν„° (v1)
β”‚   β”‚   β”œβ”€β”€ core/             # μ„€μ •(Config) 및 곡톡 λͺ¨λ“ˆ
β”‚   β”‚   β”œβ”€β”€ services/         # λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 (RAG, Chatbot λ“±)
β”‚   β”‚   └── main.py           # μ•± μ§„μž…μ 
β”‚   β”œβ”€β”€ Dockerfile            # Server 이미지 λΉŒλ“œ μ„€μ •
β”‚   └── requirements.txt      # Server μ˜μ‘΄μ„± νŒ¨ν‚€μ§€
β”œβ”€β”€ docker-compose.local.yml  # 둜컬 개발 ν™˜κ²½ μ‹€ν–‰ μ„€μ • (Airflow + Server + Mongo)
└── scripts/                  # μœ ν‹Έλ¦¬ν‹° 슀크립트

5. APIs

μ£Όμš” API μ—”λ“œν¬μΈνŠΈλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€. 상세 λͺ…μ„ΈλŠ” μ„œλ²„ μ‹€ν–‰ ν›„ /docsμ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

Method Endpoint Description
GET / μ„œλ²„ μƒνƒœ 및 버전 정보 확인
GET /api/v1/recommendations/{user_id} νŠΉμ • μœ μ €λ₯Ό μœ„ν•œ λ§žμΆ€ν˜• 금육 μƒν’ˆ μΆ”μ²œ
POST /api/v1/chat/stream μ±—λ΄‡κ³Όμ˜ λŒ€ν™” (슀트리밍 응닡)
POST /api/v1/chat/feedback μΆ”μ²œ/상담 결과에 λŒ€ν•œ ν”Όλ“œλ°± μ €μž₯
POST /api/v1/users/{user_id}/vectorize μœ μ € 데이터 벑터화 및 κ°±μ‹  (트리거)

5.1. Admin APIs

κ΄€λ¦¬μž νŽ˜μ΄μ§€λ₯Ό μœ„ν•œ 톡계 및 둜그 쑰회 APIμž…λ‹ˆλ‹€.

Method Endpoint Description
GET /api/v1/admin/stats/overview λŒ€μ‹œλ³΄λ“œ 전체 톡계 쑰회
GET /api/v1/admin/stats/trends λŒ€ν™” 및 API μš”μ²­ 좔이 쑰회
GET /api/v1/admin/stats/feedback ν”Όλ“œλ°± 뢄포 쑰회
GET /api/v1/admin/users μ‚¬μš©μžλ³„ AI μ‚¬μš© 톡계 쑰회
GET /api/v1/admin/logs 챗봇 λŒ€ν™” 둜그 λͺ©λ‘ 쑰회
GET /api/v1/admin/logs/{user_id} νŠΉμ • μ‚¬μš©μžμ˜ λŒ€ν™” 상세 λ‚΄μ—­ 쑰회

6. 배포 정보

7. μ‹€ν–‰ κ°€μ΄λ“œ (둜컬 ν™˜κ²½)

사전 μš”κ΅¬μ‚¬ν•­

  • Docker 및 Docker Compose μ„€μΉ˜
  • .env 파일 μ„€μ • (각 λ””λ ‰ν† λ¦¬μ˜ .env.example μ°Έκ³ )

Airflow μ‹€ν–‰

# airflow λ£¨νŠΈμ—μ„œ μ‹€ν–‰
docker-compose up -d --build

κ°œλ³„ μ‹€ν–‰ (Server Only)

cd server
pip install -r requirements.txt

python -m uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

8. κ²°κ³Ό


πŸ› οΈ ServerTech Stack Overview (기술 μŠ€νƒ)

Category Technology Usage
Language Python μ„œλ²„ 및 데이터 νŒŒμ΄ν”„λΌμΈ(Airflow) 핡심 둜직 κ΅¬ν˜„
Database (RDBMS) MySQL μ‚¬μš©μž 정보(νšŒμ›, κ³„μ’Œ, μžμ‚° λ“±)의 μ›μ²œ 데이터 μ €μž₯
Database (NoSQL) MongoDB 벑터 μŠ€ν† μ–΄(μž„λ² λ”© μ €μž₯), 둜그, λΉ„μ •ν˜• 데이터 관리
Embedding Gemini Google text-embedding-004: ν…μŠ€νŠΈλ₯Ό 고차원 λ²‘ν„°λ‘œ λ³€ν™˜
Framework LangChain RAG(검색 증강 생성) νŒŒμ΄ν”„λΌμΈ 및 Agent ꡬ좕
Vector Search Atlas Vector Search Index: 데이터 쀑 μœ μ‚¬ 데이터 μ΄ˆκ³ μ† 검색
ORM SQLAlchemy Python 객체와 κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€(MySQL) κ°„ λ§€ν•‘

1. μ‚¬μš©μž 페λ₯΄μ†Œλ‚˜ μ •μ˜ (User Vectorization)

κ°€μž₯ λ¨Όμ €, RDBMS에 흩어져 μžˆλŠ” μ‚¬μš©μž 데이터λ₯Ό μ‘°νšŒν•˜μ—¬ AIκ°€ 이해 κ°€λŠ₯ν•œ **"ν…μŠ€νŠΈ μ„œμ‚¬(Persona)"**둜 λ³€ν™˜ν•©λ‹ˆλ‹€.

πŸ‘€ 데이터 쑰회 (MySQL + SQLAlchemy)

UserVectorizationServiceλŠ” SQLAlchemyλ₯Ό μ‚¬μš©ν•˜μ—¬ MySQLμ—μ„œ λ‹€μŒ 데이터λ₯Ό 직접 μΏΌλ¦¬ν•©λ‹ˆλ‹€.

  • Users ν…Œμ΄λΈ”: λ‚˜μ΄, 성별, 투자 μ„±ν–₯
  • Assets ν…Œμ΄λΈ”: μžμ‚° 규λͺ¨ 및 포트폴리였(예적금, 뢀동산 λ“±) 뢄포
  • UserInfo ν…Œμ΄λΈ”: μ—° μ†Œλ“, 은퇴 λͺ©ν‘œ, 희망 μƒν™œλΉ„
  • Keyword ν…Œμ΄λΈ”: μ‚¬μš©μžκ°€ μ„ νƒν•œ 관심 ν‚€μ›Œλ“œ

πŸ“ 페λ₯΄μ†Œλ‚˜ 생성 & μž„λ² λ”©

쑰회된 데이터λ₯Ό μžμ—°μ–΄ ν…μŠ€νŠΈλ‘œ ν•©μΉœ ν›„ μž„λ² λ”©ν•©λ‹ˆλ‹€.

  • Model: Google text-embedding-004 (via langchain-google-genai)
  • Process: ν…μŠ€νŠΈ -> 768차원(μ˜ˆμ‹œ) 벑터 λ³€ν™˜
  • Storage: κ²°κ³Ό λ²‘ν„°λŠ” MongoDB user_vectors μ»¬λ ‰μ…˜μ— μ €μž₯λ©λ‹ˆλ‹€.

2. κΈˆμœ΅μƒν’ˆ 지식화 (Product Vectorization)

κΈˆμœ΅μƒν’ˆ 데이터 μ—­μ‹œ AIκ°€ 검색할 수 μžˆλ„λ‘ λ²‘ν„°ν™”λ˜μ–΄ μ€€λΉ„λ©λ‹ˆλ‹€.

πŸ”„ 데이터 νŒŒμ΄ν”„λΌμΈ (Airflow ETL)

맀일 μƒˆλ²½, Airflow DAGκ°€ κΈˆμœ΅κΈ°κ΄€(κΈˆκ°μ›, κΈˆμœ΅μœ„, KVIC) APIλ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€.

  1. Extract: JSON 데이터 μˆ˜μ§‘
  2. Transform: μƒν’ˆ νŠΉμ§•, μš°λŒ€ 쑰건 등을 rag_text ν•„λ“œλ‘œ 가곡
  3. Embed: λ™μΌν•œ Gemini Embedding λͺ¨λΈμ„ μ‚¬μš©ν•˜μ—¬ 벑터 생성
  4. Load: MongoDB에 적재 (API μ„œλ²„μ™€ κ³΅μœ ν•˜λŠ” DB)

3. λ§€μΉ­ 및 μΆ”μ²œ (RAG & Vector Search)

μ‚¬μš©μžκ°€ μ§ˆλ¬Έμ„ ν•˜λ©΄, μ‹œμŠ€ν…œμ€ μ‚¬μš©μž 벑터와 μƒν’ˆ 벑터λ₯Ό λΉ„κ΅ν•˜μ—¬ κ°€μž₯ μ ν•©ν•œ μƒν’ˆμ„ μ°Ύμ•„λƒ…λ‹ˆλ‹€.

1단계: 검색 (MongoDB Atlas Vector Search)

  • μ‚¬μš©μžμ˜ 질문 + 페λ₯΄μ†Œλ‚˜λ₯Ό κ²°ν•©ν•˜μ—¬ 쿼리 벑터λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
  • MongoDB Atlas의 vectorSearch κΈ°λŠ₯을 μ‚¬μš©ν•˜μ—¬ 코사인 μœ μ‚¬λ„(Cosine Similarity)κ°€ 높은 μƒμœ„ μƒν’ˆμ„ κ²€μƒ‰ν•©λ‹ˆλ‹€.
    • 효과: λ‹¨μˆœ ν‚€μ›Œλ“œ 맀칭이 μ•„λ‹Œ, "λ§₯락"에 λ§žλŠ” μƒν’ˆ 검색 κ°€λŠ₯

2단계: μ—μ΄μ „νŠΈ 뢄석 (LangGraph)

κ²€μƒ‰λœ 후보 μƒν’ˆλ“€κ³Ό μ‚¬μš©μž 페λ₯΄μ†Œλ‚˜λ₯Ό LangGraph 기반의 Agentμ—κ²Œ μ „λ‹¬ν•©λ‹ˆλ‹€.

  • Prompt: "당신은 금육 μ „λ¬Έκ°€μž…λ‹ˆλ‹€. [μ‚¬μš©μž 페λ₯΄μ†Œλ‚˜]와 [κ²€μƒ‰λœ μƒν’ˆ]을 보고 졜적의 μƒν’ˆμ„ μΆ”μ²œν•΄μ£Όμ„Έμš”."
  • Output: μΆ”μ²œ μ‚¬μœ κ°€ λ‹΄κΈ΄ μ •ν˜•ν™”λœ JSON 데이터

4. ν”Όλ“œλ°± 및 μ΅œμ ν™” (Feedback Loop)

μΆ”μ²œμ€ 일방적이지 μ•Šκ³  μ‚¬μš©μžμ˜ λ°˜μ‘μ— 따라 계속 μ§„ν™”ν•©λ‹ˆλ‹€.

πŸ‘πŸ‘Ž μž¬μ •λ ¬ 둜직 (Hybrid Filtering)

μ‚¬μš©μžκ°€ μ±—λ΄‡μ—μ„œ 남긴 'μ’‹μ•„μš”/μ‹«μ–΄μš”' λ‘œκ·ΈλŠ” MongoDB chat_logs에 μ €μž₯λ©λ‹ˆλ‹€.

  • Logic: ProductsServiceμ—μ„œ μΆ”μ²œ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜κΈ° μ „, MongoDB 둜그λ₯Ό μ‘°νšŒν•˜μ—¬ Dislike μƒν’ˆμ€ ν•„ν„°λ§ν•˜κ³  Like μƒν’ˆμ€ κ°€μ€‘μΉ˜λ₯Ό λΆ€μ—¬ν•΄ μž¬μ •λ ¬ν•©λ‹ˆλ‹€.

πŸ› οΈ μš”μ•½ λ‹€μ΄μ–΄κ·Έλž¨

graph TD
    subgraph "Data Source"
        MySQL[(MySQL DB)] -->|SQLAlchemy| Service[User Service]
    end

    subgraph "User Processing"
        Service -->|Data Aggregation| Persona[페λ₯΄μ†Œλ‚˜ ν…μŠ€νŠΈ]
        Persona -->|Gemini Embedding| UserVec[μ‚¬μš©μž 벑터]
        UserVec -->|Store| Mongo[(MongoDB)]
    end
    
    subgraph "RAG System"
        Query[μ‚¬μš©μž 질문] --> Chat[Chat Service]
        Chat -->|Context| UserVec
        UserVec -->|Vector Search| Atlas[MongoDB Atlas Search]
        Atlas -->|Candidates| Candidates[후보 μƒν’ˆκ΅°]
        Candidates -->|LangGraph| Final[μ΅œμ’… μΆ”μ²œ]
    end
Loading

About

main project ai server

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages