파일 관리 및 자동화를 위한 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
환경 변수 설정 (.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/0Python 가상환경 및 패키지 설치:
# 가상환경 생성 및 활성화
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# 패키지 설치
pip install -r requirements.txt# 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;"# 규칙 데이터를 벡터 DB에 로드 (필수)
python vector_loader.py이 단계는 AI가 사용자 요청에 맞는 조건과 액션을 찾기 위해 반드시 필요합니다.
# FastAPI 서버 시작
python main.py
# 또는 uvicorn 직접 실행
uvicorn main:app --host 0.0.0.0 --port 8000 --reload서버가 성공적으로 시작되면 http://localhost:8000에서 접근 가능합니다.
서버 실행 후 다음 URL에서 자동 생성된 API 문서를 확인할 수 있습니다:
- Swagger UI:
http://localhost:8000/docs - ReDoc:
http://localhost:8000/redoc
GET /healthPOST /chat
Content-Type: application/json
{
"user_uuid": "550e8400-e29b-41d4-a716-446655440000",
"session_id": null,
"message": "pdf 파일들을 Documents 폴더로 옮겨줘",
"session_name": "PDF 정리 규칙"
}GET /users/{user_uuid}/sessionsGET /sessions/{session_id}/messagesFilient2는 사용자 입력의 정보 충분성을 먼저 체크하고, 정보가 부족하면 질문을 생성하고, 충분하면 바로 규칙을 생성합니다.
예시 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": "테스트 메시지"}'- 간단한 파일 이동: "이미지 파일들을 Pictures 폴더로 옮겨줘"
- 날짜 기반 정리: "최근 7일 이내에 만든 문서들을 날짜별로 정리해줘"
- 크기 기반 필터링: "100MB보다 큰 비디오 파일에 '대용량' 태그 추가해줘"
- 복합 조건: "파일명에 'temp'가 들어있는 파일들을 삭제해줘"
- 모든 설정값의 중앙집중식 관리
- 환경변수 기반 설정 로드
- AI 모델 파라미터 및 프롬프트 템플릿 관리
- 정보 충분성 체크: 사용자 입력 분석으로 추가 질문 필요 여부 판단
- 질문 생성: 부족한 정보 카테고리에 대한 맞춤형 질문 생성
- 규칙 생성: 벡터 검색 결과와 함께 완전한 규칙 JSON 생성
- PGVector 기반 유사도 검색: 조건/액션별 분리된 검색
- 컨텍스트 압축: LLM 기반 압축으로 정확도 향상
- 통합 검색: 조건과 액션을 동시에 검색하여 결합된 결과 제공
- Redis 기반 LangChain 메모리: 실시간 대화 컨텍스트 관리
- PostgreSQL 영구 저장: 모든 대화 히스토리 데이터베이스 저장
- 세션 생명주기 관리: 생성, 업데이트, 완료 상태 추적
사용자 입력 → AI 분석 → 정보 충분성 판단
↓ ↓
부족시: 추가 질문 생성 충분시: 규칙 생성으로 진행
사용자 요구사항 → Titan 임베딩 → pgvector 유사도 검색
↓
관련 조건/액션 규칙 검색 → AI에 컨텍스트 제공
충분한 정보 + 검색된 컨텍스트 → Claude 3.5 Sonnet
↓
완전한 파일 자동화 규칙 JSON 생성 → 사용자에게 반환
문제: "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 |
- Extension: 파일 확장자/종류 기반 (PDF, 이미지, 동영상 등)
- Name: 파일명 패턴 기반 필터링
- Date: 생성/수정 날짜 기반 필터링
- Size: 파일 크기 기반 필터링
- Tag: macOS 태그 기반 필터링
- 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 할당량 내 무제한
rule_data.py에 새 규칙 데이터 정의python vector_loader.py실행하여 벡터 DB 업데이트config.py의PromptTemplates에 관련 프롬프트 추가
config.py에서 모델 ID 설정- 각 서비스에서 모델별 파라미터 조정
- 프롬프트 템플릿 모델별 최적화
개발자: Claude + Human Collaboration
버전: 1.0.0
라이선스: MIT