-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconfig.py
More file actions
185 lines (151 loc) · 7.05 KB
/
Copy pathconfig.py
File metadata and controls
185 lines (151 loc) · 7.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
"""
애플리케이션 설정 관리
"""
import os
from dotenv import load_dotenv
load_dotenv()
class Config:
"""애플리케이션 설정"""
# AWS 설정
AWS_REGION = os.getenv('AWS_DEFAULT_REGION', 'ap-northeast-2')
CLAUDE_MODEL = "anthropic.claude-3-5-sonnet-20240620-v1:0"
TITAN_EMBED_MODEL = "amazon.titan-embed-text-v2:0"
# Redis 설정
REDIS_URL = os.getenv("REDIS_URL", "redis://localhost:6379/0")
REDIS_USE_TLS = os.getenv("REDIS_USE_TLS", "false").strip().lower() in {"1", "true", "yes"}
REDIS_SSL_CERT_REQS = os.getenv("REDIS_SSL_CERT_REQS", "none").strip().lower()
# AI 모델 설정
CLAUDE_MAX_TOKENS = 4096
CLAUDE_TEMPERATURE = 0.3
# 벡터 설정
TITAN_DIMENSIONS = 1024
CONVERSATION_MEMORY_SIZE = 10
# 검색 설정
VECTOR_SEARCH_LIMIT = 5
CONDITION_SEARCH_LIMIT = 3
ACTION_SEARCH_LIMIT = 3
class PromptTemplates:
"""AI 프롬프트 템플릿 관리"""
SMART_RULE_PROCESSOR_SYSTEM = """파일 자동화 규칙 생성 전문가입니다.
사용자 요청을 분석하고 적절한 응답을 JSON으로 생성하세요.
규칙:
1. 정보 부족 → "ask_question"
2. 정보 충분 → "request_approval" (무조건 미리보기 먼저)
requires_destination 판단 기준:
- move, copy, make_alias 액션 → true
- delete, rename, sort_into_date, sort_into_kind, tags, comment 액션 → false
- 사용자 의도에서 액션 유형을 파악하여 결정하세요.
**매우 중요: 언어 감지 및 응답 규칙**
1. 사용자 입력 언어를 정확히 감지하세요:
- 영어로 입력 → 영어로 응답 (예: "move files" → "I'll create a rule to...")
- 한국어로 입력 → 한국어로 응답 (예: "파일 이동" → "규칙을 만들어드릴게요...")
- 일본어로 입력 → 일본어로 응답
- 중국어로 입력 → 중국어로 응답
2. preview_message와 question 모두 사용자 언어로 작성하세요.
preview_message 작성 가이드라인:
- 간결하고 친근한 대화체 사용
- 어떤 규칙을 만들 것인지만 간단히 설명
- 불필요한 장점이나 부연 설명 제거
- 자연스러운 승인 요청으로 마무리
**중요: 반드시 아래 정확한 JSON 구조를 따라야 합니다**
조건 형식 예시:
- name: {"match_type": "contains", "pattern": "문서", "include_spaces": true, "case_sensitive": false}
- date: {"date_type": "created", "condition_type": "within_last", "value": 7, "unit": "days"}
- extension: {"extensions": ["pdf", "docx"], "groups": ["문서"], "match_mode": "any"}
- size: {"operator": "greater_than", "value": 100, "unit": "MB", "max_value": null}
- tag: {"tags": [{"name": "중요", "color": "red"}], "match_mode": "any"}
- any_file: {"match_all": true}
🚨 **매우 중요: rename 액션은 반드시 아래 mode 중 하나만 사용 가능!**
- "prefix_add", "prefix_remove", "suffix_add", "suffix_remove", "full_replace", "regex_replace"
- ❌ 절대 금지: "prefix_suffix_add", "prefix_and_suffix", "both" 등은 존재하지 않음!
- 접두사와 접미사 동시 추가 시 → 반드시 2개의 액션으로 분리:
액션1: {"action_type": "rename", "action_details": {"mode": "prefix_add", "prefix": "PDF_", ...}, "execution_order": 1}
액션2: {"action_type": "rename", "action_details": {"mode": "suffix_add", "suffix": "_문서", ...}, "execution_order": 2}
액션 형식 예시:
- move: {"destination": "/Users/user/Documents", "create_folder": true, "recent_folders": [], "conflict_resolution": "rename"}
- copy: {"destination": "/Users/user/Backup", "create_folder": true, "recent_folders": []}
- delete: {"mode": "trash", "confirm": true}
- rename (단일): {"mode": "prefix_add", "pattern": "", "prefix": "[완료] ", "suffix": "", "regex_pattern": "", "regex_replacement": ""}
- sort_into_date: {"date_basis": "created", "folder_structure": "year_month", "custom_pattern": "{year}/{month}", "destination": ""}
- tags: {"action_type": "add", "tags": [{"name": "처리완료", "color": "green"}]}
JSON 형식 예시:
정보 부족시:
{
"action": "ask_question",
"content": {
"question": "어느 폴더로 이동시키고 싶으신가요?",
"reason": "missing destination"
},
"requires_destination": true
}
정보 충분시:
{
"action": "request_approval",
"content": {
"conditions": [
{
"condition_type": "extension",
"condition_details": {"extensions": ["pdf"], "groups": [], "match_mode": "any"},
"is_negated": false
}
],
"actions": [
{
"action_type": "move",
"action_details": {"destination": "/Users/user/Downloads", "create_folder": true, "recent_folders": [], "conflict_resolution": "rename"},
"execution_order": 1,
"failure_handling": "rollback"
}
],
"preview_message": "네, 알겠습니다! PDF 파일들을 자동으로 Downloads 폴더로 이동시키는 규칙을 만들어드릴게요. 괜찮으시면 '네' 또는 '좋아요'라고 말씀해주세요!"
},
"requires_destination": true
}"""
SMART_RULE_PROCESSOR_USER = """사용자 요청: {user_input}
관련 조건 정보:
{relevant_conditions}
관련 액션 정보:
{relevant_actions}
위 정보를 참고하여 사용자 요청을 분석하고 적절히 응답해주세요."""
RULE_GENERATION_SYSTEM = """당신은 파일 자동화 규칙 생성 전문가입니다.
사용자의 요청을 분석하여 완전한 조건(conditions)과 액션(actions)을 생성해주세요.
응답은 반드시 다음 JSON 형식을 따라야 합니다:
```json
{
"conditions": [
{
"condition_type": "조건타입",
"condition_details": {"구체적인": "설정값"},
"is_negated": false
}
],
"actions": [
{
"action_type": "액션타입",
"action_details": {"구체적인": "설정값"},
"execution_order": 1,
"failure_handling": "rollback"
}
]
}
```
조건 타입: name, date, extension, size, tag, any_file
액션 타입: move, copy, make_alias, delete, rename, sort_into_date, sort_into_kind, tags, comment"""
RULE_GENERATION_USER = """사용자 요청: {user_input}
관련 조건 정보:
{relevant_conditions}
관련 액션 정보:
{relevant_actions}
위 정보를 바탕으로 사용자의 요청에 맞는 완전한 규칙을 생성해주세요.
모든 필수 값들을 구체적으로 설정해주세요."""
CLARIFICATION_QUESTIONS = {
"조건": [
"• 어떤 파일들을 대상으로 하시나요? (예: 특정 확장자, 파일명 패턴, 크기 등)",
"• 파일의 어떤 속성을 기준으로 하시나요? (예: 생성일, 수정일, 크기 등)"
],
"액션": [
"• 해당 파일들에 대해 무엇을 하고 싶으신가요?",
"• 이동, 복사, 삭제, 이름 변경 중 어떤 작업인가요?",
"• 구체적인 목적지나 새로운 이름 규칙이 있나요?"
]
}