Skip to content

BlueGreenSWM/Filient_Server_2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

107 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🎯 Filient2: AI 기반 파일 자동화 규칙 생성기

파일 관리 및 자동화를 위한 AI 기반 규칙 생성 시스템입니다. 사용자의 자연어 입력을 통해 파일 처리 조건과 액션을 자동으로 생성합니다.

🏗️ 시스템 아키텍처 (개선된 플로우)

사용자 입력
    ↓
정보 충분성 체크 (Claude 3.5 Sonnet)
    ↓                        ↓
부족시: 추가 질문 생성    충분시: 벡터 검색 시작
    ↓                        ↓
사용자 응답 대기        pgvector + Titan 임베딩
                           ↓
                    관련 조건/액션 검색
                           ↓
                    완전한 규칙 생성 (JSON)
                           ↓
                    세션 완료 & 응답 반환

📁 프로젝트 구조 (개선된 아키텍처)

Filient2/
├── 🐳 docker-compose.yml          # Redis + PostgreSQL + pgvector
├── 📋 requirements.txt            # Python 패키지 의존성
├── 🔑 .env                       # 환경 변수 설정
├── 🚀 main.py                    # FastAPI 메인 서버 (개선된 플로우)
│
├── ⚙️ config.py                  # 중앙집중식 설정 관리 (신규)
├── 🛠️ utils.py                   # 공통 유틸리티 함수 (신규)
├── 📊 rule_data.py               # 조건/액션 데이터 정의
├── 🔄 vector_loader.py           # 벡터 데이터베이스 로더 (개선)
│
├── 📁 database/
│   ├── models.py                 # SQLAlchemy 모델 정의
│   └── connection.py             # 데이터베이스 연결 설정
│
├── 📁 services/
│   ├── session_service.py        # 세션/대화 관리 (LangChain 메모리)
│   ├── rule_service.py           # 규칙 생성 로직 (완전 재작성)
│   └── retriever_service.py      # 벡터 검색 서비스 (개선)
│
└── 📁 api/
    └── schemas.py                # Pydantic 스키마 정의

🔧 기술 스택

  • Backend: FastAPI, Python 3.8+
  • AI/ML: AWS Bedrock Claude 3.5 Sonnet, Titan Embeddings V2
  • Database: PostgreSQL with pgvector extension
  • Cache: Redis
  • Vector Search: LangChain + PGVector
  • Infrastructure: Docker Compose

🚀 설치 및 실행 가이드

1. 환경 설정

환경 변수 설정 (.env 파일 생성):

# .env 파일 생성
touch .env

.env 파일 내용:

# AWS 설정 (Bedrock 서비스 접근용)
AWS_ACCESS_KEY_ID=your_aws_access_key
AWS_SECRET_ACCESS_KEY=your_aws_secret_key
AWS_DEFAULT_REGION=ap-northeast-2

# 데이터베이스 설정
DATABASE_URL=postgresql://filient_user:filient_password@localhost:5432/filient

# Redis 설정
REDIS_URL=redis://localhost:6379/0

Python 가상환경 및 패키지 설치:

# 가상환경 생성 및 활성화
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# 패키지 설치
pip install -r requirements.txt

2. 인프라 시작

# Docker Compose로 PostgreSQL, Redis 실행
docker-compose up -d

# 서비스 상태 확인
docker-compose ps

# PostgreSQL에 pgvector 확장 설치 확인
psql -h localhost -U filient_user -d filient -c "CREATE EXTENSION IF NOT EXISTS vector;"

3. 벡터 데이터베이스 초기화

# 규칙 데이터를 벡터 DB에 로드 (필수)
python vector_loader.py

이 단계는 AI가 사용자 요청에 맞는 조건과 액션을 찾기 위해 반드시 필요합니다.

4. 서버 실행

# FastAPI 서버 시작
python main.py

# 또는 uvicorn 직접 실행
uvicorn main:app --host 0.0.0.0 --port 8000 --reload

서버가 성공적으로 시작되면 http://localhost:8000에서 접근 가능합니다.

🔗 API 엔드포인트

📚 API 문서

서버 실행 후 다음 URL에서 자동 생성된 API 문서를 확인할 수 있습니다:

  • Swagger UI: http://localhost:8000/docs
  • ReDoc: http://localhost:8000/redoc

🎯 주요 엔드포인트

1. Health Check

GET /health

2. 채팅 및 규칙 생성

POST /chat
Content-Type: application/json

{
  "user_uuid": "550e8400-e29b-41d4-a716-446655440000",
  "session_id": null,
  "message": "pdf 파일들을 Documents 폴더로 옮겨줘",
  "session_name": "PDF 정리 규칙"
}

3. 사용자 세션 목록 조회

GET /users/{user_uuid}/sessions

4. 세션 메시지 조회

GET /sessions/{session_id}/messages

💡 사용 예시 (NEW 플로우)

🎆 개선된 대화 플로우

Filient2는 사용자 입력의 정보 충분성을 먼저 체크하고, 정보가 부족하면 질문을 생성하고, 충분하면 바로 규칙을 생성합니다.

📝 API 호출 예시

예시 1: 정보 부족 시 질문 생성

curl -X POST "http://localhost:8000/chat" \
  -H "Content-Type: application/json" \
  -d '{
    "user_uuid": "user123",
    "message": "PDF 파일들을 정리해줘"
  }'

응답:

{
  "session_id": "abc123-def456",
  "response": "파일 자동화 규칙을 만들기 위해 추가 정보가 필요합니다:\n\n• PDF 파일들을 어디로 이동하거나 배치하고 싶으신가요?\n• 특정 조건(날짜, 크기 등)이 있나요?\n\n더 구체적으로 알려주시면 정확한 규칙을 만들어드릴게요!",
  "rule": null,
  "needs_clarification": true
}

예시 2: 정보 충분 시 즉시 규칙 생성

curl -X POST "http://localhost:8000/chat" \
  -H "Content-Type: application/json" \
  -d '{
    "user_uuid": "user123",
    "session_id": "abc123-def456",
    "message": "PDF 파일들을 Documents 폴더로 이동해줘"
  }'

최종 응답 (완성된 규칙):

{
  "session_id": "abc123-def456",
  "response": "✅ 파일 자동화 규칙이 완성되었습니다!\n\nPDF 파일들을 Documents 폴더로 자동 이동합니다.",
  "rule": {
    "conditions": [
      {
        "condition_type": "extension",
        "condition_details": {
          "extensions": ["pdf"],
          "groups": ["문서"],
          "match_mode": "any"
        }
      }
    ],
    "actions": [
      {
        "action_type": "move",
        "action_details": {
          "destination": "Documents",
          "create_folder": true,
          "conflict_resolution": "rename"
        },
        "execution_order": 1
      }
    ]
  },
  "session_completed": true,
  "needs_clarification": false
}

🧪 테스트 가이드

간단한 헬스체크

# 서버 상태 확인
curl http://localhost:8000/health

# 간단한 대화 테스트
curl -X POST "http://localhost:8000/chat" \
  -H "Content-Type: application/json" \
  -d '{"user_uuid": "test", "message": "테스트 메시지"}'

기본 테스트 시나리오

  1. 간단한 파일 이동: "이미지 파일들을 Pictures 폴더로 옮겨줘"
  2. 날짜 기반 정리: "최근 7일 이내에 만든 문서들을 날짜별로 정리해줘"
  3. 크기 기반 필터링: "100MB보다 큰 비디오 파일에 '대용량' 태그 추가해줘"
  4. 복합 조건: "파일명에 'temp'가 들어있는 파일들을 삭제해줘"

🎯 핵심 컴포넌트 설명

ConfigManager (config.py)

  • 모든 설정값의 중앙집중식 관리
  • 환경변수 기반 설정 로드
  • AI 모델 파라미터 및 프롬프트 템플릿 관리

RuleService (services/rule_service.py)

  • 정보 충분성 체크: 사용자 입력 분석으로 추가 질문 필요 여부 판단
  • 질문 생성: 부족한 정보 카테고리에 대한 맞춤형 질문 생성
  • 규칙 생성: 벡터 검색 결과와 함께 완전한 규칙 JSON 생성

RetrieverService (services/retriever_service.py)

  • PGVector 기반 유사도 검색: 조건/액션별 분리된 검색
  • 컨텍스트 압축: LLM 기반 압축으로 정확도 향상
  • 통합 검색: 조건과 액션을 동시에 검색하여 결합된 결과 제공

SessionService (services/session_service.py)

  • Redis 기반 LangChain 메모리: 실시간 대화 컨텍스트 관리
  • PostgreSQL 영구 저장: 모든 대화 히스토리 데이터베이스 저장
  • 세션 생명주기 관리: 생성, 업데이트, 완료 상태 추적

🔄 동작 플로우

1. 정보 충분성 체크 단계

사용자 입력 → AI 분석 → 정보 충분성 판단
    ↓                        ↓
부족시: 추가 질문 생성    충분시: 규칙 생성으로 진행

2. 벡터 검색 단계

사용자 요구사항 → Titan 임베딩 → pgvector 유사도 검색
    ↓
관련 조건/액션 규칙 검색 → AI에 컨텍스트 제공

3. 규칙 생성 단계

충분한 정보 + 검색된 컨텍스트 → Claude 3.5 Sonnet
    ↓
완전한 파일 자동화 규칙 JSON 생성 → 사용자에게 반환

🔧 트러블슈팅

AWS Bedrock 오류

문제: "You don't have access to the model"
해결: AWS 콘솔 → Bedrock → Model access에서 Claude 및 Titan 모델 활성화

데이터베이스 연결 오류

해결: docker-compose down -v && docker-compose up -d

벡터 로딩 실패

해결: AWS 자격증명 및 리전(ap-northeast-2) 확인

🛠️ 환경 변수

변수명 설명 기본값
AWS_DEFAULT_REGION AWS 리전 ap-northeast-2
AWS_ACCESS_KEY_ID AWS 액세스 키 -
AWS_SECRET_ACCESS_KEY AWS 시크릿 키 -
DATABASE_URL PostgreSQL 연결 URL postgresql://localhost:5432/filient
REDIS_URL Redis 연결 URL redis://localhost:6379/0

🏷️ 지원하는 조건/액션 타입

📋 조건 (Conditions)

  • Extension: 파일 확장자/종류 기반 (PDF, 이미지, 동영상 등)
  • Name: 파일명 패턴 기반 필터링
  • Date: 생성/수정 날짜 기반 필터링
  • Size: 파일 크기 기반 필터링
  • Tag: macOS 태그 기반 필터링

⚡ 액션 (Actions)

  • Move: 파일/폴더 이동
  • Copy: 파일/폴더 복사
  • Delete: 파일 삭제 (휴지통 또는 완전 삭제)
  • Rename: 파일명 변경
  • Sort: 날짜별/종류별 자동 정리
  • Tags: 태그 추가/제거

📊 성능 정보

  • 임베딩 모델: AWS Titan Text Embeddings V2 (1024차원)
  • AI 모델: AWS Bedrock Claude 3.5 Sonnet
  • 벡터 검색: ~100-200ms (pgvector 최적화)
  • AI 응답 생성: ~2-5초
  • 동시 사용자: AWS 할당량 내 무제한

🔄 개발 가이드

새로운 규칙 타입 추가

  1. rule_data.py에 새 규칙 데이터 정의
  2. python vector_loader.py 실행하여 벡터 DB 업데이트
  3. config.pyPromptTemplates에 관련 프롬프트 추가

새로운 AI 모델 통합

  1. config.py에서 모델 ID 설정
  2. 각 서비스에서 모델별 파라미터 조정
  3. 프롬프트 템플릿 모델별 최적화

개발자: Claude + Human Collaboration
버전: 1.0.0
라이선스: MIT

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors