aiqtech commited on
Commit
15fbc37
·
verified ·
1 Parent(s): 7b060db

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +1085 -492
app.py CHANGED
@@ -64,21 +64,53 @@ class LLMCollaborativeSystem:
64
  사용자 질문: {user_query}
65
 
66
  이 질문에 대해:
67
- 1. 전체적인 접근 방향과 프레임워크를 제시하세요
68
- 2. 핵심 요소와 고려사항을 구조화하여 설명하세요
69
- 3. 주제에 대해 조사가 필요한 5-7개의 구체적인 키워드나 검색어를 제시하세요
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
 
71
  키워드는 다음 형식으로 제시하세요:
72
  [검색 키워드]: 키워드1, 키워드2, 키워드3, 키워드4, 키워드5"""
73
 
74
  def create_researcher_prompt(self, user_query: str, supervisor_guidance: str, search_results: Dict[str, List[Dict]]) -> str:
75
- """조사자 AI 프롬프트 생성"""
76
  search_summary = ""
77
  all_results = []
78
 
79
  for keyword, results in search_results.items():
80
  search_summary += f"\n\n**{keyword}에 대한 검색 결과:**\n"
81
- for i, result in enumerate(results[:10], 1): # 상위 10개만 표시
82
  search_summary += f"{i}. {result.get('title', 'N/A')} (신뢰도: {result.get('credibility_score', 0):.2f})\n"
83
  search_summary += f" - {result.get('description', 'N/A')}\n"
84
  search_summary += f" - 출처: {result.get('url', 'N/A')}\n"
@@ -87,12 +119,11 @@ class LLMCollaborativeSystem:
87
 
88
  all_results.extend(results)
89
 
90
- # 모순 감지
91
  contradictions = self.detect_contradictions(all_results)
92
  contradiction_text = ""
93
  if contradictions:
94
  contradiction_text = "\n\n**발견된 정보 모순:**\n"
95
- for cont in contradictions[:3]: # 최대 3개만 표시
96
  contradiction_text += f"- {cont['type']}: {cont['source1']} vs {cont['source2']}\n"
97
 
98
  return f"""당신은 정보를 조사하고 정리하는 조사자 AI입니다.
@@ -109,84 +140,137 @@ class LLMCollaborativeSystem:
109
  위 검색 결과를 바탕으로:
110
  1. 각 키워드별로 중요한 정보를 정리하세요
111
  2. 신뢰할 수 있는 출처(신뢰도 0.7 이상)를 우선적으로 참고하세요
112
- 3. 출처를 명확히 표기하여 실행자 AI가 검증할 있도록 하세요
113
- 4. 정보의 모순이 있다면 양쪽 관점을 모두 제시하세요
114
- 5. 최신 트렌드나 중요한 통계가 있다면 강조하세요
115
- 6. 신뢰도가 낮은 정보는 주의 표시와 함께 포함하세요"""
116
 
117
- def create_supervisor_execution_prompt(self, user_query: str, research_summary: str) -> str:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
118
  """감독자 AI의 실행 지시 프롬프트"""
119
  return f"""당신은 거시적 관점에서 분석하고 지도하는 감독자 AI입니다.
120
 
121
  사용자 질문: {user_query}
122
 
123
- 조사자 AI 정리한 조사 내용:
124
- {research_summary}
125
 
126
- 조사 내용을 기반으로 실행자 AI에게 아주 구체적인 지시를 내려주세요:
127
- 1. 조사된 정보를 어떻게 활용할지 명확히 지시하세요
128
- 2. 실행 가능한 단계별 작업을 구체적으로 제시하세요
129
- 3. 단계에서 참고해야 조사 내용을 명시하세요
130
- 4. 예상되는 결과물의 형태를 구체적으로 설명하세요"""
 
131
 
132
- def create_executor_prompt(self, user_query: str, supervisor_guidance: str, research_summary: str) -> str:
133
  """실행자 AI 프롬프트 생성"""
134
  return f"""당신은 세부적인 내용을 구현하는 실행자 AI입니다.
135
 
136
  사용자 질문: {user_query}
137
 
138
- 조사자 AI가 정리한 조사 내용:
139
- {research_summary}
140
 
141
  감독자 AI의 구체적인 지시:
142
  {supervisor_guidance}
143
 
144
- 조사 내용과 지시사항을 바탕으로:
145
- 1. 조사된 정보를 적극 활용하여 구체적인 실행 계획을 작성하세요
146
- 2. 각 단계별로 참고한 조사 내용을 명시하세요
147
- 3. 실제로 적용 가능한 구체적인 방법론을 제시하세요
148
- 4. 예상되는 성과와 측정 방법을 포함하세요"""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
149
 
150
- def create_executor_final_prompt(self, user_query: str, initial_response: str, supervisor_feedback: str, research_summary: str) -> str:
151
  """실행자 AI 최종 보고서 프롬프트"""
152
  return f"""당신은 세부적인 내용을 구현하는 실행자 AI입니다.
153
 
154
  사용자 질문: {user_query}
155
 
156
- 조사자 AI의 조사 내용:
157
- {research_summary}
 
 
 
158
 
159
- 당신의 초기 답변:
160
- {initial_response}
161
 
162
- 감독자 AI의 피드백 개선사항:
163
- {supervisor_feedback}
 
 
 
 
 
164
 
165
- 피드백을 완전히 반영하여 최종 보고서를 작성하세요:
166
- 1. 감독자의 모든 개선사항을 반영하세요
167
- 2. 조사 내용을 더욱 구체적으로 활용하세요
168
- 3. 실행 가능성을 높이는 세부 계획을 포함하세요
169
- 4. 명확한 결론과 다음 단계를 제시하세요
170
- 5. 전문적이고 완성도 높은 최종 보고서 형식으로 작성하세요"""
171
 
172
  def extract_keywords(self, supervisor_response: str) -> List[str]:
173
- """감독자 응답에서 키워드 추출"""
174
  keywords = []
175
 
176
- # [검색 키워드]: 형식으로 키워드 찾기
177
  keyword_match = re.search(r'\[검색 키워드\]:\s*(.+)', supervisor_response, re.IGNORECASE)
178
  if keyword_match:
179
  keyword_str = keyword_match.group(1)
180
  keywords = [k.strip() for k in keyword_str.split(',') if k.strip()]
181
 
182
- # 키워드가 없으면 기본 키워드 생성
183
  if not keywords:
184
  keywords = ["best practices", "implementation guide", "case studies", "latest trends", "success factors"]
185
 
186
- return keywords[:7] # 최대 7개로 제한
187
 
188
  def generate_synonyms(self, keyword: str) -> List[str]:
189
- """키워드의 동의어/유사어 생성"""
190
  synonyms = {
191
  "optimization": ["improvement", "enhancement", "efficiency", "tuning"],
192
  "performance": ["speed", "efficiency", "throughput", "latency"],
@@ -197,33 +281,30 @@ class LLMCollaborativeSystem:
197
  "best practices": ["proven methods", "industry standards", "guidelines", "recommendations"],
198
  "trends": ["developments", "innovations", "emerging", "future"],
199
  "machine learning": ["ML", "AI", "deep learning", "neural networks"],
200
- "프로젝트": ["project", "사업", "업무", "작업"]
 
 
201
  }
202
 
203
- # 키워드 정규화
204
  keyword_lower = keyword.lower()
205
 
206
- # 직접 매칭되는 동의어가 있으면 반환
207
  if keyword_lower in synonyms:
208
- return synonyms[keyword_lower][:2] # 최대 2개
209
 
210
- # 부분 매칭 확인
211
  for key, values in synonyms.items():
212
  if key in keyword_lower or keyword_lower in key:
213
  return values[:2]
214
 
215
- # 동의어가 없으면 빈 리스트
216
  return []
217
 
218
  def calculate_credibility_score(self, result: Dict) -> float:
219
- """검색 결과의 신뢰도 점수 계산 (0-1)"""
220
- score = 0.5 # 기본 점수
221
 
222
  url = result.get('url', '')
223
  title = result.get('title', '')
224
  description = result.get('description', '')
225
 
226
- # URL 기반 점수
227
  trusted_domains = [
228
  '.edu', '.gov', '.org', 'wikipedia.org', 'nature.com',
229
  'sciencedirect.com', 'ieee.org', 'acm.org', 'springer.com',
@@ -235,31 +316,26 @@ class LLMCollaborativeSystem:
235
  score += 0.2
236
  break
237
 
238
- # HTTPS 사용 여부
239
  if url.startswith('https://'):
240
  score += 0.1
241
 
242
- # 제목과 설명의 길이 (너무 짧으면 신뢰도 감소)
243
  if len(title) > 20:
244
  score += 0.05
245
  if len(description) > 50:
246
  score += 0.05
247
 
248
- # 광고/스팸 키워드 체크
249
  spam_keywords = ['buy now', 'sale', 'discount', 'click here', '100% free']
250
  if any(spam in (title + description).lower() for spam in spam_keywords):
251
  score -= 0.3
252
 
253
- # 날짜 정보가 있으면 가산점
254
  if any(year in description for year in ['2024', '2023', '2022']):
255
  score += 0.1
256
 
257
- return max(0, min(1, score)) # 0-1 범위로 제한
258
 
259
  def fetch_url_content(self, url: str, max_length: int = 2000) -> str:
260
- """URL에서 콘텐츠 추출"""
261
  try:
262
- # User-Agent 설정
263
  headers = {
264
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
265
  }
@@ -271,19 +347,15 @@ class LLMCollaborativeSystem:
271
 
272
  soup = BeautifulSoup(html, 'html.parser')
273
 
274
- # 스크립트와 스타일 제거
275
  for script in soup(["script", "style"]):
276
  script.decompose()
277
 
278
- # 본문 텍스트 추출
279
  text = soup.get_text()
280
 
281
- # 공백 정리
282
  lines = (line.strip() for line in text.splitlines())
283
  chunks = (phrase.strip() for line in lines for phrase in line.split(" "))
284
  text = ' '.join(chunk for chunk in chunks if chunk)
285
 
286
- # 길이 제한
287
  if len(text) > max_length:
288
  text = text[:max_length] + "..."
289
 
@@ -294,10 +366,9 @@ class LLMCollaborativeSystem:
294
  return ""
295
 
296
  def detect_contradictions(self, results: List[Dict]) -> List[Dict]:
297
- """검색 결과 간 모순 감지"""
298
  contradictions = []
299
 
300
- # 간단한 모순 감지 패턴
301
  opposite_pairs = [
302
  ("increase", "decrease"),
303
  ("improve", "worsen"),
@@ -308,18 +379,15 @@ class LLMCollaborativeSystem:
308
  ("growth", "decline")
309
  ]
310
 
311
- # 결과들을 비교
312
  for i in range(len(results)):
313
  for j in range(i + 1, len(results)):
314
  desc1 = results[i].get('description', '').lower()
315
  desc2 = results[j].get('description', '').lower()
316
 
317
- # 반대 개념이 포함되어 있는지 확인
318
  for word1, word2 in opposite_pairs:
319
  if (word1 in desc1 and word2 in desc2) or (word2 in desc1 and word1 in desc2):
320
- # 같은 주제에 대해 반대 의견인지 확인
321
  common_words = set(desc1.split()) & set(desc2.split())
322
- if len(common_words) > 5: # 공통 단어가 5개 이상이면 같은 주제로 간주
323
  contradictions.append({
324
  'source1': results[i]['url'],
325
  'source2': results[j]['url'],
@@ -331,9 +399,8 @@ class LLMCollaborativeSystem:
331
  return contradictions
332
 
333
  def brave_search(self, query: str) -> List[Dict]:
334
- """Brave Search API 호출"""
335
  if self.test_mode or self.bapi_token == "YOUR_BRAVE_API_TOKEN":
336
- # 테스트 모드에서는 시뮬레이션된 결과 반환
337
  test_results = []
338
  for i in range(5):
339
  test_results.append({
@@ -347,9 +414,9 @@ class LLMCollaborativeSystem:
347
  try:
348
  params = {
349
  "q": query,
350
- "count": 20, # 20개로 증가
351
  "safesearch": "moderate",
352
- "freshness": "pw" # Past week for recent results
353
  }
354
 
355
  response = requests.get(
@@ -369,11 +436,9 @@ class LLMCollaborativeSystem:
369
  "url": item.get("url", ""),
370
  "published": item.get("published", "")
371
  }
372
- # 신뢰도 점수 계산
373
  result["credibility_score"] = self.calculate_credibility_score(result)
374
  results.append(result)
375
 
376
- # 신뢰도 점수 기준으로 정렬
377
  results.sort(key=lambda x: x['credibility_score'], reverse=True)
378
  return results
379
  else:
@@ -395,333 +460,732 @@ class LLMCollaborativeSystem:
395
  def call_llm_streaming(self, messages: List[Dict[str, str]], role: str) -> Generator[str, None, None]:
396
  """스트리밍 LLM API 호출"""
397
 
398
- # 테스트 모드
399
  if self.test_mode:
400
  logger.info(f"테스트 모드 스트리밍 - Role: {role}")
401
  test_responses = {
402
  "supervisor_initial": """이 질문에 대한 거시적 분석을 제시하겠습니다.
403
 
404
- 1. **핵심 개념 파악**
405
- - 질문의 본질적 요소를 심층 분석합니다
406
- - 관련된 주요 이론과 원칙을 검토합니다
407
- - 다양한 관점에서의 접근 방법을 ��려합니다
408
 
409
- 2. **전략적 접근 방향**
410
- - 체계적이고 단계별 해결 방안을 수립합니다
411
- - 장단기 목표를 명확히 설정합니다
412
- - 리스크 요인과 대응 방안을 마련합니다
413
 
414
- 3. **기대 효과와 과제**
415
- - 예상되는 긍정적 성과를 분석합니다
416
- - 잠재적 도전 과제를 식별합니다
417
- - 지속가능한 발전 방향을 제시합니다
418
 
419
- [검색 키워드]: machine learning optimization, performance improvement strategies, model efficiency techniques, hyperparameter tuning best practices, latest ML trends 2024""",
 
 
 
420
 
421
- "researcher": """조사 결과를 종합하여 다음과 같이 정리했습니다.
422
-
423
- **1. Machine Learning Optimization (신뢰도 높음)**
424
- - 최신 연구에 따르면 모델 최적화의 핵심은 아키텍처 설계와 훈련 전략의 균형입니다 (신뢰도: 0.85)
425
- - AutoML 도구들이 하이퍼파라미터 튜닝을 자동화하여 효율성을 크게 향상시킵니다 (신뢰도: 0.82)
426
- - 출처: ML Conference 2024 (https://mlconf2024.org), Google Research (https://research.google)
427
- - 동의어 검색 결과: "ML improvement", "AI optimization"에서 추가 정보 확인
428
-
429
- **2. Performance Improvement Strategies (신뢰도 높음)**
430
- - 데이터 품질 개선이 모델 성능 향상의 80%를 차지한다는 연구 결과 (신뢰도: 0.90)
431
- - 앙상블 기법과 전이학습이 주요 성능 개선 방법으로 입증됨 (신뢰도: 0.78)
432
- - 출처: Stanford AI Lab (https://ai.stanford.edu), MIT CSAIL (https://csail.mit.edu)
433
- - 벤치마크: ImageNet에서 95% 이상의 정확도 달성 사례
434
-
435
- **3. Model Efficiency Techniques (신뢰도 중간)**
436
- - 모델 경량화(Pruning, Quantization)로 추론 속도 10배 향상 가능 (신뢰도: 0.75)
437
- - Knowledge Distillation으로 모델 크기 90% 감소, 성능 유지 (신뢰도: 0.72)
438
- - 출처: ArXiv 논문 (https://arxiv.org/abs/2023.xxxxx)
439
- - ⚠️ 주의: 일부 소스는 5-7배 향상만을 보고하여 정보 상충 존재
440
-
441
- **4. 실제 적용 사례 (신뢰도 높음)**
442
- - Netflix: 추천 시스템 개선으로 사용자 만족도 35% 향상 (신뢰도: 0.88)
443
- - Tesla: 실시간 객체 인식 속도 50% 개선 (신뢰도: 0.80)
444
- - OpenAI: GPT 모델 효율성 개선으로 비용 70% 절감 (신뢰도: 0.85)
445
- - 출처: 기업 공식 블로그 및 기술 발표 자료
446
-
447
- **발견된 정보 모순:**
448
- 1. 모델 압축률: 일부는 90% 압축 가능하다고 주장하나, 다른 소스는 70%가 한계라고 명시
449
- 2. 성능 향상 폭: 10배 vs 5-7배 향상에 대한 의견 차이 존재
450
- 3. 권장사항: 실제 적용 보수적인 수치(5-7배)를 기준으로 계획 수립 권장
451
-
452
- **핵심 인사이트:**
453
- - 최신 트렌드는 효율성과 성능의 균형에 초점
454
- - 2024년 들어 Sparse Models와 MoE(Mixture of Experts) 기법이 부상
455
- - 실무 적용 단계별 검증이 성공의 핵심""",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
456
 
457
- "supervisor_execution": """조사 내용을 바탕으로 실행자 AI에게 다음과 같이 구체적으로 지시합니다.
458
-
459
- **1단계: 현재 모델 진단 (1주차)**
460
- - 조사된 벤치마크 기준으로 현재 모델 성능 평가
461
- - Netflix 사례를 참고하여 주요 병목 지점 식별
462
- - AutoML 도구를 활용한 초기 최적화 가능성 탐색
463
-
464
- **2단계: 데이터 품질 개선 (2-3주차)**
465
- - 조사 결과의 "80% 규칙"에 따라 데이터 정제 우선 실행
466
- - 데이터 증강 기법 적용 (조사된 최신 기법 활용)
467
- - A/B 테스트로 개선 효과 측정
468
-
469
- **3단계: 모델 최적화 구현 (4-6주차)**
470
- - Knowledge Distillation 적용하여 모델 경량화
471
- - 조사된 Pruning 기법으로 추론 속도 개선
472
- - Tesla 사례의 실시간 처리 최적화 기법 벤치마킹
473
-
474
- **4단계: 성과 검증 배포 (7-8주차)**
475
- - OpenAI 사례의 비용 절감 지표 적용
476
- - 조사된 성능 지표로 개선율 측정
477
- - 단계적 배포 전략 수립""",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
478
 
479
- "executor": """감독자의 지시와 조사 내용을 기반으로 구체적인 실행 계획을 수립합니다.
480
-
481
- **1단계: 현재 모델 진단 (1주차)**
482
- - 월요일-화요일: MLflow를 사용한 현재 모델 메트릭 수집
483
- * 조사 결과 참고: Netflix가 사용한 핵심 지표 (정확도, 지연시간, 처리량)
484
- - 수요일-목요일: AutoML 도구 (Optuna, Ray Tune) 설정 및 초기 실행
485
- * 조사된 best practice에 따라 search space 정의
486
- - 금요일: 진단 보고서 작성 및 개선 우선순위 결정
487
-
488
- **2단계: 데이터 품질 개선 (2-3주차)**
489
- - 데이터 정제 파이프라인 구축
490
- * 조사 결과의 "80% 규칙" 적용: 누락값, 이상치, 레이블 오류 처리
491
- * 코드 예시: `data_quality_pipeline.py` 구현
492
- - 데이터 증강 구현
493
- * 최신 기법 적용: MixUp, CutMix, AutoAugment
494
- * 검증 데이터셋으로 효과 측정 (목표: 15% 성능 향상)
495
-
496
- **3단계: 모델 최적화 구현 (4-6주차)**
497
- - Knowledge Distillation 구현
498
- * Teacher 모델: 현재 대규모 모델
499
- * Student 모델: 90% 작은 크기 목표 (조사 결과 기반)
500
- * 구현 프레임워크: PyTorch/TensorFlow
501
- - Pruning 및 Quantization 적용
502
- * 구조적 pruning으로 50% 파라미터 제거
503
- * INT8 quantization으로 추가 4배 속도 향상
504
- * Tesla 사례 참고: TensorRT 최적화 적용
505
-
506
- **4단계: 성과 검증 배포 (7-8주차)**
507
- - 성과 지표 측정
508
- * 추론 속도: 목표 10배 향상 (조사 결과 기반)
509
- * 정확도 손실: 최대 2% 이내 유지
510
- * 비용 절감: 70% 목표 (OpenAI 사례 참고)
511
- - 배포 전략
512
- * A/B 테스트: 10% 트래픽으로 시작
513
- * 모니터링: Prometheus + Grafana 대시보드
514
- * 롤백 계획: 성능 저하 시 자동 롤백
515
-
516
- **예상 결과물**
517
- - 최적화된 모델 (크기 90% 감소, 속도 10배 향상)
518
- - 상세 성능 벤치마크 보고서
519
- - 프로덕션 배포 가이드 및 모니터링 대시보드
520
- - 재현 가능한 최적화 파이프라인 코드""",
521
 
522
- "supervisor_review": """실행자 AI의 계획을 검토한 결과, 조사 내용이 잘 반영되었습니다. 다음과 같은 개선사항을 제안합니다.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
523
 
524
  **강점**
525
- - 조사된 사례들(Netflix, Tesla, OpenAI)이 단계에 적절히 활용됨
526
- - 구체적인 도구와 기법이 명시되어 실행 가능성이 높음
527
- - 측정 가능한 목표가 조사 결과를 기반으로 설정됨
528
 
529
  **개선 필요사항**
530
- 1. **리스크 관리 강화**
531
- - 단계별 실패 시나리오와 대응 방안 추가 필요
532
- - 기술적 문제 발생 시 백업 계획 수립
533
-
534
- 2. **비용 분석 구체화**
535
- - OpenAI 사례의 70% 절감을 위한 구체적인 비용 계산
536
- - ROI 분석 투자 대비 효과 측정 방법
537
-
538
- 3. **팀 협업 체계화**
539
- - 데이터 과학자, ML 엔지니어, DevOps 간 역할 분담 명확화
540
- - 주간 진행 상황 공유 이슈 트래킹 프로세스
541
-
542
- **추가 권장사항**
543
- - 최신 연구 동향 모니터링 체계 구축
544
- - 경쟁사 벤치마킹을 위한 정기적인 조사 프로세스
545
- - 내부 지식 공유를 위한 문서화 및 세미나 계획
546
- - 실패 사례에서 배운 교훈을 축적하는 시스템 구축""",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
547
 
548
- "executor_final": """감독자 AI의 피드백을 완전히 반영하여 최종 실행 보고��를 작성합니다.
549
 
550
- # 🎯 기계학습 모델 성능 향상 최종 실행 보고서
551
 
552
  ## 📋 Executive Summary
553
- 본 보고서는 웹 검색을 통해 수집된 최신 사례와 감독자 AI 전략적 지침을 바탕으로, 8주간의 체계적인 모델 최적화 프로젝트를 제시합니다. 목표는 모델 크기 90% 감소, 추론 속도 10배 향상, 운영 비용 70% 절감입니다.
554
 
555
- ## 📊 1단계: 현재 모델 진단 및 베이스라인 설정 (1주차)
556
 
557
- ### 실행 계획
558
- **월-화요일: 성능 메트릭 수집**
559
- - MLflow를 통한 현재 모델 전체 분석
560
- - Netflix 사례 기반 핵심 지표: 정확도(92%), 지연시간(45ms), 처리량(1,000 req/s)
561
- - 리소스 사용량: GPU 메모리 8GB, 추론 시 CPU 사용률 85%
 
562
 
563
- **수-목요일: AutoML 초기 탐색**
564
- - Optuna로 하이퍼파라미터 최적화 (200회 시도)
565
- - Ray Tune으로 분산 학습 환경 구축
566
- - 초기 개선 가능성: 15-20% 성능 향상 예상
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
567
 
568
- **금요일: 진단 보고서 리스크 분석**
569
- - 주요 병목: 모델 크기(2.5GB), 배치 처리 비효율성
570
- - 리스크: 데이터 드리프트, 하드웨어 제약
571
- - 백업 계획: 클라우드 GPU 인스턴스 확보
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
572
 
573
- ### 예상 산출물
574
- - 상세 성능 베이스라인 문서
575
- - 개선 기회 우선순위 매트릭스
576
- - 리스크 레지스터 및 대응 계획
 
 
 
577
 
578
- ## 📊 2단계: 데이터 품질 개선 (2-3주차)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
579
 
580
- ### 실행 계획
581
- **2주차: 데이터 정제 파이프라인**
 
582
  ```python
583
- # data_quality_pipeline.py 주요 구성
584
- class DataQualityPipeline:
585
  def __init__(self):
586
- self.validators = [
587
- MissingValueHandler(threshold=0.05),
588
- OutlierDetector(method='isolation_forest'),
589
- LabelConsistencyChecker(),
590
- DataDriftMonitor()
591
- ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
592
 
593
- def process(self, data):
594
- # 80% 규칙 적용: 데이터 품질이 성능의 80% 결정
595
- for validator in self.validators:
596
- data = validator.transform(data)
597
- self.log_metrics(validator.get_stats())
598
- return data
 
 
 
 
 
 
 
 
 
 
 
 
599
  ```
600
 
601
- **3주차: 고급 데이터 증강**
602
- - MixUp: 15% 정확도 향상 예상
603
- - CutMix: 경계 검출 성능 20% 개선
604
- - AutoAugment: 자동 최적 증강 정책 탐색
605
- - A/B 테스트: 각 기법별 효과 측정
606
-
607
- ### 리스크 대응
608
- - 데이터 품질 저하 시: 롤백 메커니즘 구현
609
- - 증강 과적합 방지: 검증셋 분리 및 교차 검증
610
-
611
- ### 예상 산출물
612
- - 자동화된 데이터 품질 파이프라인
613
- - 데이터 품질 대시보드 (Grafana)
614
- - 15% 이상 성능 향상 검증 보고서
615
-
616
- ## 📊 3단계: 모델 최적화 구현 (4-6주차)
617
-
618
- ### 실행 계획
619
- **4-5주차: Knowledge Distillation**
620
- - Teacher 모델: 현재 2.5GB 모델
621
- - Student 모델 아키텍처:
622
- * 파라미터 수: 250M → 25M (90% 감소)
623
- * 레이어 수: 24 → 6
624
- * Hidden dimension: 1024 → 256
625
- - 훈련 전략:
626
- * Temperature: 5.0
627
- * Alpha (KD loss weight): 0.7
628
- * 훈련 에폭: 50
629
-
630
- **6주차: Pruning & Quantization**
631
- - 구조적 Pruning:
632
- * Magnitude 기반 50% 채널 제거
633
- * Fine-tuning: 10 에폭
634
- - INT8 Quantization:
635
- * Post-training quantization
636
- * Calibration dataset: 1,000 샘플
637
- - TensorRT 최적화 (Tesla 사례 적용):
638
- * FP16 추론 활성화
639
- * 동적 배치 최적화
640
-
641
- ### 팀 협업 체계
642
- - ML 엔지니어: 모델 아키텍처 및 훈련
643
- - DevOps: 인프라 및 배포 파이프라인
644
- - 데이터 과학자: 성능 분석 및 검증
645
- - 주간 스탠드업 미팅 및 Jira 이슈 트래킹
646
-
647
- ### 예상 산출물
648
- - 최적화된 모델 체크포인트
649
- - 성능 벤치마크 상세 보고서
650
- - 모델 변환 자동화 스크립트
651
-
652
- ## 📊 4단계: 성과 검증 및 프로덕션 배포 (7-8주차)
653
-
654
- ### 실행 계획
655
- **7주차: 종합 성능 검증**
656
- - 성능 지표 달성도:
657
- * 추론 속도: 45ms → 4.5ms (10배 향상) ✓
658
- * 모델 크기: 2.5GB → 250MB (90% 감소) ✓
659
- * 정확도 손실: 92% 90.5% (1.5% 손실) ✓
660
- - 비용 분석:
661
- * GPU 인스턴스: $2,000/월 → $600/월
662
- * 처리량 증가로 인한 서버 수 감소: 10대 → 3대
663
- * 비용 절감: 70% 달성 ✓
664
-
665
- **8주차: 단계적 배포**
666
- - Canary 배포:
667
- * 1일차: 1% 트래픽
668
- * 3일차: 10% 트래픽
669
- * 7일차: 50% 트래픽
670
- * 14일차: 100% 전환
671
- - 모니터링 설정:
672
- * Prometheus + Grafana 대시보드
673
- * 알림 임계값: 지연시간 >10ms, 오류율 >0.1%
674
- - 롤백 계획:
675
- * 자동 롤백 트리거 설정
676
- * Blue-Green 배포로 즉시 전환 가능
677
-
678
- ### ROI 분석
679
- - 초기 투자: $50,000 (인건비 + 인프라)
680
- - 월간 절감액: $14,000
681
- - 투자 회수 기간: 3.6개월
682
- - 1년 순이익: $118,000
683
-
684
- ### 예상 산출물
685
- - 프로덕션 배포 완료
686
- - 실시간 모니터링 대시보드
687
- - ROI 분석 보고서
688
- - 운영 가이드 문서
689
-
690
- ## 📈 지속적 개선 계획
691
-
692
- ### 모니터링 및 유지보수
693
- - 월간 성능 리뷰 미팅
694
- - 분기별 재훈련 계획
695
- - 신기술 도입 검토 (Sparse Models, MoE)
696
-
697
- ### 지식 공유
698
- - 내부 기술 세미나 (월 1회)
699
- - 외부 컨퍼런스 발표 준비
700
- - 오픈소스 기여 계획
701
-
702
- ### 차기 프로젝트
703
- - 엣지 디바이스 배포 최적화
704
- - 연합 학습(Federated Learning) 도입
705
- - AutoML 플랫폼 구축
706
-
707
- ## 📝 결론
708
- 프로젝트는 최신 연구 결과와 업계 베스트 프랙티스를 적용하여, 8주 만에 모델 성능을 획기적으로 개선하고 운영 비용을 70% 절감하는 성과를 달성할 것으로 예상됩니다. 체계적인 접근과 리스크 관리, 그리고 지속적인 개선 계획을 통해 장기적인 경쟁력을 확보할 수 있습니다.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
709
 
710
  ---
711
- *작성일: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}*
712
- *작성자: 협력적 AI 시스템 (감독자, 조사자, 실행자 AI)*"""
713
  }
714
 
715
- # 프롬프트 내용에 따라 적절한 응답 선택
716
- if role == "supervisor" and "조사자 AI가 정리한" in messages[0]["content"]:
 
 
717
  response = test_responses["supervisor_execution"]
718
- elif role == "supervisor" and messages[0]["content"].find("실행자 AI의 답변") > -1:
719
- response = test_responses["supervisor_review"]
720
  elif role == "supervisor":
721
  response = test_responses["supervisor_initial"]
 
 
722
  elif role == "researcher":
723
  response = test_responses["researcher"]
724
- elif role == "executor" and "최종 보고서" in messages[0]["content"]:
 
 
 
 
725
  response = test_responses["executor_final"]
726
  else:
727
  response = test_responses["executor"]
@@ -729,11 +1193,13 @@ class DataQualityPipeline:
729
  yield from self.simulate_streaming(response, role)
730
  return
731
 
732
- # 실제 API 호출
733
  try:
734
  system_prompts = {
735
  "supervisor": "당신은 거시적 관점에서 분석하고 지도하는 감독자 AI입니다.",
 
736
  "researcher": "당신은 정보를 조사하고 체계적으로 정리하는 조사자 AI입니다.",
 
737
  "executor": "당신은 세부적인 내용을 구현하는 실행자 AI입니다."
738
  }
739
 
@@ -794,21 +1260,26 @@ class DataQualityPipeline:
794
  # 시스템 인스턴스 생성
795
  llm_system = LLMCollaborativeSystem()
796
 
797
- # 내부 히스토리 관리 (UI에는 표시하지 않음)
798
  internal_history = []
799
 
800
  def process_query_streaming(user_query: str):
801
- """스트리밍을 지원하는 쿼리 처리"""
802
  global internal_history
803
 
804
  if not user_query:
805
- return "", "", "", "", "❌ 질문을 입력해주세요."
806
 
807
- conversation_log = []
808
- all_responses = {"supervisor": [], "researcher": [], "executor": []}
 
 
 
 
 
809
 
810
  try:
811
- # 1단계: 감독자 AI 초기 분석 및 키워드 추출
812
  supervisor_prompt = llm_system.create_supervisor_initial_prompt(user_query)
813
  supervisor_initial_response = ""
814
 
@@ -819,31 +1290,60 @@ def process_query_streaming(user_query: str):
819
  ):
820
  supervisor_initial_response += chunk
821
  supervisor_text = f"[초기 분석] - {datetime.now().strftime('%H:%M:%S')}\n{supervisor_initial_response}"
822
- yield supervisor_text, "", "", "", "🔄 감독자 AI가 분석 중..."
823
 
824
  all_responses["supervisor"].append(supervisor_initial_response)
825
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
826
  # 키워드 추출
827
- keywords = llm_system.extract_keywords(supervisor_initial_response)
828
  logger.info(f"추출된 키워드: {keywords}")
829
 
830
- # 2단계: 브레이브 검색 수행
831
  researcher_text = "[웹 검색] 🔍 검색 중...\n"
832
- yield supervisor_text, researcher_text, "", "", "🔍 웹 검색 수행 중..."
833
 
834
  search_results = {}
835
  total_search_count = 0
836
 
837
- # 원래 키워드로 검색
838
  for keyword in keywords:
839
  results = llm_system.brave_search(keyword)
840
  if results:
841
  search_results[keyword] = results
842
  total_search_count += len(results)
843
  researcher_text += f"✓ '{keyword}' 검색 완료 ({len(results)}개 결과)\n"
844
- yield supervisor_text, researcher_text, "", "", f"🔍 '{keyword}' 검색 중..."
845
 
846
- # 동의어로 추가 검색
847
  synonyms = llm_system.generate_synonyms(keyword)
848
  for synonym in synonyms:
849
  syn_results = llm_system.brave_search(f"{keyword} {synonym}")
@@ -851,31 +1351,12 @@ def process_query_streaming(user_query: str):
851
  search_results[f"{keyword} ({synonym})"] = syn_results
852
  total_search_count += len(syn_results)
853
  researcher_text += f"✓ 동의어 '{synonym}' 검색 완료 ({len(syn_results)}개 결과)\n"
854
- yield supervisor_text, researcher_text, "", "", f"🔍 동의어 '{synonym}' 검색 중..."
855
 
856
  researcher_text += f"\n📊 총 {total_search_count}개의 검색 결과 수집 완료\n"
857
 
858
- # URL 콘텐츠 가져오기 (상위 3개)
859
- researcher_text += "\n[콘텐츠 분석] 📖 주요 웹페이지 내용 분석 중...\n"
860
- yield supervisor_text, researcher_text, "", "", "📖 웹페이지 내용 분석 중..."
861
-
862
- content_analyzed = 0
863
- for keyword, results in search_results.items():
864
- for result in results[:2]: # 각 키워드당 상��� 2개만
865
- if content_analyzed >= 5: # 총 5개까지만
866
- break
867
-
868
- url = result.get('url', '')
869
- if url and result.get('credibility_score', 0) >= 0.7:
870
- content = llm_system.fetch_url_content(url)
871
- if content:
872
- result['content_preview'] = content[:500] # 미리보기 저장
873
- content_analyzed += 1
874
- researcher_text += f"✓ 콘텐츠 분석 완료: {url[:50]}...\n"
875
- yield supervisor_text, researcher_text, "", "", f"📖 분석 중: {url[:30]}..."
876
-
877
- # 3단계: 조사자 AI가 검색 결과 정리
878
- researcher_prompt = llm_system.create_researcher_prompt(user_query, supervisor_initial_response, search_results)
879
  researcher_response = ""
880
 
881
  researcher_text = "[조사 결과 정리] 🔄 생성 중...\n"
@@ -885,134 +1366,188 @@ def process_query_streaming(user_query: str):
885
  ):
886
  researcher_response += chunk
887
  researcher_text = f"[조사 결과 정리] - {datetime.now().strftime('%H:%M:%S')}\n{researcher_response}"
888
- yield supervisor_text, researcher_text, "", "", "📝 조사자 AI가 정리 중..."
889
 
890
  all_responses["researcher"].append(researcher_response)
891
 
892
- # 4단계: 감독자 AI가 조사 내용 기반으로 실행 지시
893
- supervisor_execution_prompt = llm_system.create_supervisor_execution_prompt(user_query, researcher_response)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
894
  supervisor_execution_response = ""
895
 
896
- supervisor_text += "\n\n---\n\n[실행 지시] 🔄 생성 중...\n"
897
  for chunk in llm_system.call_llm_streaming(
898
  [{"role": "user", "content": supervisor_execution_prompt}],
899
  "supervisor"
900
  ):
901
  supervisor_execution_response += chunk
902
- temp_text = f"{all_responses['supervisor'][0]}\n\n---\n\n[실행 지시] - {datetime.now().strftime('%H:%M:%S')}\n{supervisor_execution_response}"
903
  supervisor_text = f"[초기 분석] - {datetime.now().strftime('%H:%M:%S')}\n{temp_text}"
904
- yield supervisor_text, researcher_text, "", "", "🎯 감독자 AI가 지시 중..."
905
 
906
  all_responses["supervisor"].append(supervisor_execution_response)
907
 
908
- # 5단계: 실행자 AI가 조사 내용과 지시를 기반으로 초기 구현
909
- executor_prompt = llm_system.create_executor_prompt(user_query, supervisor_execution_response, researcher_response)
 
 
 
 
 
 
 
 
 
 
 
 
 
910
  executor_response = ""
911
 
912
- executor_text = "[초기 구현] 🔄 ��성 중...\n"
913
  for chunk in llm_system.call_llm_streaming(
914
  [{"role": "user", "content": executor_prompt}],
915
  "executor"
916
  ):
917
  executor_response += chunk
918
- executor_text = f"[초기 구현] - {datetime.now().strftime('%H:%M:%S')}\n{executor_response}"
919
- yield supervisor_text, researcher_text, executor_text, "", "🔧 실행자 AI가 구현 중..."
920
 
921
  all_responses["executor"].append(executor_response)
922
 
923
- # 6단계: 감독자 AI 검토 피드백
924
- review_prompt = f"""당신은 거시적 관점에서 분석하고 지도하는 감독자 AI입니다.
925
-
926
- 사용자 질문: {user_query}
927
-
928
- 실행자 AI의 답변:
929
- {executor_response}
930
-
931
- 이 답변을 검토하고 개선점과 추가 고려사항을 제시해주세요. 구체적이고 실행 가능한 개선 방안을 제시하세요."""
932
 
933
- review_response = ""
934
- supervisor_text = f"[초기 분석] - {datetime.now().strftime('%H:%M:%S')}\n{all_responses['supervisor'][0]}\n\n---\n\n[실행 지시] - {datetime.now().strftime('%H:%M:%S')}\n{all_responses['supervisor'][1]}\n\n---\n\n[검토 및 피드백] 🔄 생성 중...\n"
 
 
 
 
 
 
 
935
 
 
 
 
 
 
 
 
 
 
936
  for chunk in llm_system.call_llm_streaming(
937
- [{"role": "user", "content": review_prompt}],
938
  "supervisor"
939
  ):
940
- review_response += chunk
941
- temp_text = f"{all_responses['supervisor'][0]}\n\n---\n\n[실행 지시] - {datetime.now().strftime('%H:%M:%S')}\n{all_responses['supervisor'][1]}\n\n---\n\n[검토 피드백] - {datetime.now().strftime('%H:%M:%S')}\n{review_response}"
942
  supervisor_text = f"[초기 분석] - {datetime.now().strftime('%H:%M:%S')}\n{temp_text}"
943
- yield supervisor_text, researcher_text, executor_text, "", "🔄 감독자 AI가 검토 중..."
944
 
945
- all_responses["supervisor"].append(review_response)
946
 
947
- # 7단계: 실행자 AI 최종 보고서 (피드백 반영)
948
- final_executor_prompt = llm_system.create_executor_final_prompt(
949
- user_query,
950
- executor_response,
951
- review_response,
952
- researcher_response
953
  )
954
  final_executor_response = ""
955
 
956
- executor_text += "\n\n---\n\n[최종 보고서] 🔄 작성 중...\n"
957
  for chunk in llm_system.call_llm_streaming(
958
- [{"role": "user", "content": final_executor_prompt}],
959
  "executor"
960
  ):
961
  final_executor_response += chunk
962
- temp_text = f"[초기 구현] - {datetime.now().strftime('%H:%M:%S')}\n{all_responses['executor'][0]}\n\n---\n\n[최종 보고서] - {datetime.now().strftime('%H:%M:%S')}\n{final_executor_response}"
963
  executor_text = temp_text
964
- yield supervisor_text, researcher_text, executor_text, "", "📄 최종 보고서 작성 중..."
965
 
966
  all_responses["executor"].append(final_executor_response)
967
 
968
- # 최종 결과 생성 (최종 보고서를 메인으로)
969
- final_summary = f"""## 🎯 최종 종합 보고서
970
 
971
  ### 📌 사용자 질문
972
  {user_query}
973
 
974
- ### 📄 최종 보고서 (실행자 AI - 피드백 반영)
975
  {final_executor_response}
976
 
977
  ---
978
 
979
  <details>
980
- <summary>📋 전체 협력 과정 보기</summary>
981
 
982
- #### 🔍 거시적 분석 (감독자 AI)
983
  {all_responses['supervisor'][0]}
984
 
985
- #### 📚 조사 결과 (조사자 AI)
986
- {researcher_response}
987
 
988
- #### 🎯 실행 지시 (감독자 AI)
989
  {all_responses['supervisor'][1]}
990
 
991
- #### 💡 초기 구현 (실행자 AI)
992
- {executor_response}
 
 
 
993
 
994
- #### 검토 개선사항 (감독자 AI)
995
- {review_response}
 
 
 
 
 
 
 
 
 
996
 
997
  </details>
998
 
999
  ---
1000
- *이 보고서는 검색을 통한 최신 정보와 AI들의 협력, 그리고 피드백 반영을 통해 작성되었습니다.*"""
 
1001
 
1002
- # 내부 히스토리 업데이트 (UI에는 표시하지 않음)
1003
  internal_history.append((user_query, final_summary))
1004
 
1005
- yield supervisor_text, researcher_text, executor_text, final_summary, "✅ 최종 보고서 완성!"
 
1006
 
1007
  except Exception as e:
1008
  error_msg = f"❌ 처리 중 오류: {str(e)}"
1009
- yield "", "", "", error_msg, error_msg
1010
 
1011
  def clear_all():
1012
  """모든 내용 초기화"""
1013
  global internal_history
1014
  internal_history = []
1015
- return "", "", "", "", "🔄 초기화되었습니다."
1016
 
1017
  # Gradio 인터페이스
1018
  css = """
@@ -1021,22 +1556,31 @@ css = """
1021
  }
1022
  .supervisor-box textarea {
1023
  border-left: 4px solid #667eea !important;
1024
- padding-left: 10px !important;
 
 
 
 
1025
  }
1026
  .researcher-box textarea {
1027
  border-left: 4px solid #10b981 !important;
1028
- padding-left: 10px !important;
 
 
 
 
1029
  }
1030
  .executor-box textarea {
1031
  border-left: 4px solid #764ba2 !important;
1032
- padding-left: 10px !important;
1033
  }
1034
  """
1035
 
1036
- with gr.Blocks(title="협력적 LLM 시스템", theme=gr.themes.Soft(), css=css) as app:
1037
  gr.Markdown(
1038
- f"""
1039
- # 🤝 협력적 LLM 시스템 (조사자 ��함 + 피드백 반영)
 
1040
  """
1041
  )
1042
 
@@ -1044,17 +1588,16 @@ with gr.Blocks(title="협력적 LLM 시스템", theme=gr.themes.Soft(), css=css)
1044
  with gr.Row():
1045
  with gr.Column():
1046
  gr.Markdown("""
1047
- ## 🚀 강화된 조사 기능
1048
- - **20개 검색 결과**: 많은 정보 수집
1049
- - **동의어 검색**: 관련 정보 확장 탐색
1050
- - **신뢰도 점수**: 0-1 점수로 출처 평가
1051
- - **웹페이지 분석**: 주요 URL 콘텐츠 직접 확인
1052
- - **모순 감지**: 상충하는 정보 자동 식별
1053
  """)
1054
 
1055
  user_input = gr.Textbox(
1056
  label="질문 입력",
1057
- placeholder="예: 기계학습 모델의 성능을 향상시키는 방법은?",
1058
  lines=3
1059
  )
1060
 
@@ -1069,57 +1612,108 @@ with gr.Blocks(title="협력적 LLM 시스템", theme=gr.themes.Soft(), css=css)
1069
  max_lines=1
1070
  )
1071
 
1072
- # 최종 결과
1073
  with gr.Row():
1074
  with gr.Column():
1075
- with gr.Accordion("📊 최종 종합 결과", open=True):
1076
  final_output = gr.Markdown(
1077
- value="*질문을 입력하면 결과가 여기에 표시됩니다.*"
1078
  )
1079
 
1080
- # AI 출력들 - 줄에 나란히 배치
 
1081
  with gr.Row():
1082
- # 감독자 AI 출력
1083
  with gr.Column():
1084
- gr.Markdown("### 🧠 감독자 AI (거시적 분석)")
1085
  supervisor_output = gr.Textbox(
1086
  label="",
1087
- lines=20,
1088
- max_lines=25,
1089
  interactive=False,
1090
  elem_classes=["supervisor-box"]
1091
  )
1092
 
1093
- # 조사자 AI 출력
1094
  with gr.Column():
1095
- gr.Markdown("### 🔍 조사자 AI ( 검색 & 정리)")
 
 
 
 
 
 
 
 
 
 
1096
  researcher_output = gr.Textbox(
1097
  label="",
1098
- lines=20,
1099
- max_lines=25,
1100
  interactive=False,
1101
  elem_classes=["researcher-box"]
1102
  )
 
 
 
 
 
 
 
 
 
 
 
 
1103
 
1104
- # 실행자 AI 출력
1105
  with gr.Column():
1106
- gr.Markdown("### 👁️ 실행자 AI (미시적 구현)")
1107
  executor_output = gr.Textbox(
1108
  label="",
1109
- lines=20,
1110
- max_lines=25,
1111
  interactive=False,
1112
  elem_classes=["executor-box"]
1113
  )
1114
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1115
  # 예제
1116
  gr.Examples(
1117
  examples=[
1118
- "기계학습 모델의 성능을 향상시키는 최신 방법은?",
1119
- "2024년 효과적인 프로젝트 관리 도구와 전략은?",
1120
- "지속 가능한 비즈니스 모델의 최신 트렌드는?",
1121
- "최신 데이터 시각화 도구와 기법은?",
1122
- "원격 팀의 생산성을 높이는 검증된 방법은?"
1123
  ],
1124
  inputs=user_input,
1125
  label="💡 예제 질문"
@@ -1129,7 +1723,7 @@ with gr.Blocks(title="협력적 LLM 시스템", theme=gr.themes.Soft(), css=css)
1129
  submit_btn.click(
1130
  fn=process_query_streaming,
1131
  inputs=[user_input],
1132
- outputs=[supervisor_output, researcher_output, executor_output, final_output, status_text]
1133
  ).then(
1134
  fn=lambda: "",
1135
  outputs=[user_input]
@@ -1138,7 +1732,7 @@ with gr.Blocks(title="협력적 LLM 시스템", theme=gr.themes.Soft(), css=css)
1138
  user_input.submit(
1139
  fn=process_query_streaming,
1140
  inputs=[user_input],
1141
- outputs=[supervisor_output, researcher_output, executor_output, final_output, status_text]
1142
  ).then(
1143
  fn=lambda: "",
1144
  outputs=[user_input]
@@ -1146,12 +1740,11 @@ with gr.Blocks(title="협력적 LLM 시스템", theme=gr.themes.Soft(), css=css)
1146
 
1147
  clear_btn.click(
1148
  fn=clear_all,
1149
- outputs=[supervisor_output, researcher_output, executor_output, final_output, status_text]
1150
  )
1151
-
1152
 
1153
  if __name__ == "__main__":
1154
- app.queue() # 스트리밍을 위한 큐 활성화
1155
  app.launch(
1156
  server_name="0.0.0.0",
1157
  server_port=7860,
 
64
  사용자 질문: {user_query}
65
 
66
  이 질문에 대해:
67
+ 1. 문제의 본질과 핵심 요구사항을 파악하세요
68
+ 2. 해결을 위한 전략적 프레임워크를 수립하세요
69
+ 3. 창조자 AI가 혁신적인 아이디어를 있도록 문제의 맥락과 제약사항을 명확히 정의하세요
70
+ 4. 성공 기준과 목표를 구체적으로 제시하세요"""
71
+
72
+ def create_creator_prompt(self, user_query: str, supervisor_guidance: str) -> str:
73
+ """창조자 AI 프롬프트 생성"""
74
+ return f"""당신은 혁신적이고 창의적인 아이디어를 생성하는 창조자 AI입니다.
75
+
76
+ 사용자 질문: {user_query}
77
+
78
+ 감독자 AI의 분석:
79
+ {supervisor_guidance}
80
+
81
+ 위 분석을 바탕으로:
82
+ 1. 기존 방식을 뛰어넘는 혁신적인 해결 방안 5-7개를 제시하세요
83
+ 2. 각 아이디어의 독창성과 잠재적 영향력을 설명하세요
84
+ 3. 실현 가능성과 함께 필요한 리소스를 개략적으로 제시하세요
85
+ 4. 아이디어 간의 시너지 효과나 결합 가능성을 탐색하세요
86
+ 5. 미래 지향적이고 파괴적인 혁신 요소를 포함하세요"""
87
+
88
+ def create_supervisor_ideation_review_prompt(self, user_query: str, creator_ideas: str) -> str:
89
+ """감독자 AI의 아이디어 검토 및 조사 지시 프롬프트"""
90
+ return f"""당신은 거시적 관점에서 분석하고 지도하는 감독자 AI입니다.
91
+
92
+ 사용자 질문: {user_query}
93
+
94
+ 창조자 AI가 제시한 혁신적 아이디어들:
95
+ {creator_ideas}
96
+
97
+ 이 아이디어들을 검토하고:
98
+ 1. 각 아이디어의 전략적 가치와 실현 가능성을 평가하세요
99
+ 2. 가장 유망한 3-4개 아이디어를 선별하고 그 이유를 설명하세요
100
+ 3. 선별된 아이디어에 대해 조사가 필요한 구체적인 키워드나 검색어를 제시하세요
101
+ 4. 조사 시 중점적으로 확인해야 할 사항들을 명시하세요
102
 
103
  키워드는 다음 형식으로 제시하세요:
104
  [검색 키워드]: 키워드1, 키워드2, 키워드3, 키워드4, 키워드5"""
105
 
106
  def create_researcher_prompt(self, user_query: str, supervisor_guidance: str, search_results: Dict[str, List[Dict]]) -> str:
107
+ """조사자 AI 프롬프트 생성 (기존 코드 재사용)"""
108
  search_summary = ""
109
  all_results = []
110
 
111
  for keyword, results in search_results.items():
112
  search_summary += f"\n\n**{keyword}에 대한 검색 결과:**\n"
113
+ for i, result in enumerate(results[:10], 1):
114
  search_summary += f"{i}. {result.get('title', 'N/A')} (신뢰도: {result.get('credibility_score', 0):.2f})\n"
115
  search_summary += f" - {result.get('description', 'N/A')}\n"
116
  search_summary += f" - 출처: {result.get('url', 'N/A')}\n"
 
119
 
120
  all_results.extend(results)
121
 
 
122
  contradictions = self.detect_contradictions(all_results)
123
  contradiction_text = ""
124
  if contradictions:
125
  contradiction_text = "\n\n**발견된 정보 모순:**\n"
126
+ for cont in contradictions[:3]:
127
  contradiction_text += f"- {cont['type']}: {cont['source1']} vs {cont['source2']}\n"
128
 
129
  return f"""당신은 정보를 조사하고 정리하는 조사자 AI입니다.
 
140
  위 검색 결과를 바탕으로:
141
  1. 각 키워드별로 중요한 정보를 정리하세요
142
  2. 신뢰할 수 있는 출처(신뢰도 0.7 이상)를 우선적으로 참고하세요
143
+ 3. 실제 구현 사례나 성공 사례를 중점적으로 찾아 정리하세요
144
+ 4. 기술적 실현 가능성과 필요한 리소스 정보를 포함하세요
145
+ 5. 최신 트렌드와 미래 전망을 강조하세요"""
 
146
 
147
+ def create_evaluator_research_prompt(self, user_query: str, creator_ideas: str, research_summary: str) -> str:
148
+ """평가자 AI의 조사 결과 평가 프롬프트"""
149
+ return f"""당신은 객관적이고 비판적인 시각으로 평가하는 평가자 AI입니다.
150
+
151
+ 사용자 질문: {user_query}
152
+
153
+ 창조자 AI의 아이디어:
154
+ {creator_ideas}
155
+
156
+ 조사자 AI의 조사 결과:
157
+ {research_summary}
158
+
159
+ 위 내용을 종합적으로 평가하여:
160
+ 1. 각 아이디어의 실현 가능성을 1-10점으로 평가하고 근거를 제시하세요
161
+ 2. 예상되는 리스크와 장애물을 구체적으로 분석하세요
162
+ 3. ROI(투자 대비 효과)를 예측하고 우선순위를 제안하세요
163
+ 4. 조사 결과의 신뢰성과 충분성을 평가하세요
164
+ 5. 추가로 필요한 정보나 검증 사항을 제시하세요
165
+ 6. 최종적으로 가장 실행 가능한 2-3개 방안을 추천하세요"""
166
+
167
+ def create_supervisor_execution_prompt(self, user_query: str, evaluator_assessment: str) -> str:
168
  """감독자 AI의 실행 지시 프롬프트"""
169
  return f"""당신은 거시적 관점에서 분석하고 지도하는 감독자 AI입니다.
170
 
171
  사용자 질문: {user_query}
172
 
173
+ 평가자 AI 종합 평가:
174
+ {evaluator_assessment}
175
 
176
+ 평가 결과를 바탕으로 실행자 AI에게 구체적인 지시를 내려주세요:
177
+ 1. 평가자가 추천한 방안들을 어떻게 구현할지 단계별로 명시하세요
178
+ 2. 단계의 구체적인 작업 내용과 예상 소요 시간을 제시하세요
179
+ 3. 리스크 대응 방안을 단계별로 준비하세요
180
+ 4. 성과 측정 지표와 마일스톤을 명확히 정의하세요
181
+ 5. 필요한 리소스와 협력 체계를 구체화하세요"""
182
 
183
+ def create_executor_prompt(self, user_query: str, supervisor_guidance: str, full_context: str) -> str:
184
  """실행자 AI 프롬프트 생성"""
185
  return f"""당신은 세부적인 내용을 구현하는 실행자 AI입니다.
186
 
187
  사용자 질문: {user_query}
188
 
189
+ 전체 맥락 (아이디어, 조사, 평가):
190
+ {full_context}
191
 
192
  감독자 AI의 구체적인 지시:
193
  {supervisor_guidance}
194
 
195
+ 모든 정보를 바탕으로:
196
+ 1. 즉시 실행 가능한 구체적인 행동 계획을 작성하세요
197
+ 2. 각 작업의 상세한 실행 방법과 필요 도구를 명시하세요
198
+ 3. 예상되는 결과물과 산출물을 구체적으로 설명하세요
199
+ 4. 단계별 체크리스트와 검증 방법을 포함하세요
200
+ 5. 실제 코드, 템플릿, 프로세스 등 즉시 사용 가능한 자료를 제공하세요"""
201
+
202
+ def create_evaluator_execution_prompt(self, user_query: str, executor_plan: str) -> str:
203
+ """평가자 AI의 실행 계획 평가 프롬프트"""
204
+ return f"""당신은 객관적이고 비판적인 시각으로 평가하는 평가자 AI입니다.
205
+
206
+ 사용자 질문: {user_query}
207
+
208
+ 실행자 AI의 실행 계획:
209
+ {executor_plan}
210
+
211
+ 이 실행 계획을 평가하여:
212
+ 1. 계획의 완성도와 실행 가능성을 평가하세요 (1-10점)
213
+ 2. 누락된 요소나 개선이 필요한 부분을 구체적으로 지적하세요
214
+ 3. 예상되는 실행 상의 문제점과 해결 방안을 제시하세요
215
+ 4. 성공 가능성을 높이기 위한 추가 제안을 하세요
216
+ 5. 최종 점검 사항과 품질 기준을 제시하세요"""
217
+
218
+ def create_supervisor_final_prompt(self, user_query: str, evaluator_feedback: str) -> str:
219
+ """감독자 AI의 최종 지시 프롬프트"""
220
+ return f"""당신은 거시적 관점에서 분석하고 지도하는 감독자 AI입니다.
221
+
222
+ 사용자 질문: {user_query}
223
+
224
+ 평가자 AI의 실행 계획 평가:
225
+ {evaluator_feedback}
226
+
227
+ 평가 내용을 바탕으로:
228
+ 1. 실행자 AI가 반드시 보완해야 할 핵심 사항을 명확히 지시하세요
229
+ 2. 최종 품질 기준과 완성도 요구사항을 제시하세요
230
+ 3. 즉시 실행 가능한 형태로 만들기 위한 구체적인 개선 방향을 제시하세요
231
+ 4. 성공적인 실행을 위한 핵심 성공 요인을 강조하세요"""
232
 
233
+ def create_executor_final_prompt(self, user_query: str, initial_plan: str, supervisor_final_guidance: str, full_context: str) -> str:
234
  """실행자 AI 최종 보고서 프롬프트"""
235
  return f"""당신은 세부적인 내용을 구현하는 실행자 AI입니다.
236
 
237
  사용자 질문: {user_query}
238
 
239
+ 전체 협업 맥락:
240
+ {full_context}
241
+
242
+ 당신의 초기 실행 계획:
243
+ {initial_plan}
244
 
245
+ 감독자 AI의 최종 지시사항:
246
+ {supervisor_final_guidance}
247
 
248
+ 모든 피드백을 완전히 반영하여 즉시 실행 가능한 최종 솔루션을 작성하세요:
249
+ 1. 모든 개선사항을 반영한 완성된 실행 계획
250
+ 2. 구체적인 실행 도구, 코드, 템플릿 제공
251
+ 3. 단계별 실행 가이드와 체크리스트
252
+ 4. 예상 결과와 성과 측정 방법
253
+ 5. 리스크 대응 계획과 문제 해결 가이드
254
+ 6. 지속적 개선을 위한 모니터링 체계
255
 
256
+ **반드시 실용적이고 즉시 적용 가능한 형태로 작성하세요.**"""
 
 
 
 
 
257
 
258
  def extract_keywords(self, supervisor_response: str) -> List[str]:
259
+ """감독자 응답에서 키워드 추출 (기존 코드 재사용)"""
260
  keywords = []
261
 
 
262
  keyword_match = re.search(r'\[검색 키워드\]:\s*(.+)', supervisor_response, re.IGNORECASE)
263
  if keyword_match:
264
  keyword_str = keyword_match.group(1)
265
  keywords = [k.strip() for k in keyword_str.split(',') if k.strip()]
266
 
 
267
  if not keywords:
268
  keywords = ["best practices", "implementation guide", "case studies", "latest trends", "success factors"]
269
 
270
+ return keywords[:7]
271
 
272
  def generate_synonyms(self, keyword: str) -> List[str]:
273
+ """키워드의 동의어/유사어 생성 (기존 코드 재사용)"""
274
  synonyms = {
275
  "optimization": ["improvement", "enhancement", "efficiency", "tuning"],
276
  "performance": ["speed", "efficiency", "throughput", "latency"],
 
281
  "best practices": ["proven methods", "industry standards", "guidelines", "recommendations"],
282
  "trends": ["developments", "innovations", "emerging", "future"],
283
  "machine learning": ["ML", "AI", "deep learning", "neural networks"],
284
+ "프로젝트": ["project", "사업", "업무", "작업"],
285
+ "innovation": ["disruption", "breakthrough", "transformation", "revolution"],
286
+ "solution": ["approach", "method", "system", "framework"]
287
  }
288
 
 
289
  keyword_lower = keyword.lower()
290
 
 
291
  if keyword_lower in synonyms:
292
+ return synonyms[keyword_lower][:2]
293
 
 
294
  for key, values in synonyms.items():
295
  if key in keyword_lower or keyword_lower in key:
296
  return values[:2]
297
 
 
298
  return []
299
 
300
  def calculate_credibility_score(self, result: Dict) -> float:
301
+ """검색 결과의 신뢰도 점수 계산 (기존 코드 재사용)"""
302
+ score = 0.5
303
 
304
  url = result.get('url', '')
305
  title = result.get('title', '')
306
  description = result.get('description', '')
307
 
 
308
  trusted_domains = [
309
  '.edu', '.gov', '.org', 'wikipedia.org', 'nature.com',
310
  'sciencedirect.com', 'ieee.org', 'acm.org', 'springer.com',
 
316
  score += 0.2
317
  break
318
 
 
319
  if url.startswith('https://'):
320
  score += 0.1
321
 
 
322
  if len(title) > 20:
323
  score += 0.05
324
  if len(description) > 50:
325
  score += 0.05
326
 
 
327
  spam_keywords = ['buy now', 'sale', 'discount', 'click here', '100% free']
328
  if any(spam in (title + description).lower() for spam in spam_keywords):
329
  score -= 0.3
330
 
 
331
  if any(year in description for year in ['2024', '2023', '2022']):
332
  score += 0.1
333
 
334
+ return max(0, min(1, score))
335
 
336
  def fetch_url_content(self, url: str, max_length: int = 2000) -> str:
337
+ """URL에서 콘텐츠 추출 (기존 코드 재사용)"""
338
  try:
 
339
  headers = {
340
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
341
  }
 
347
 
348
  soup = BeautifulSoup(html, 'html.parser')
349
 
 
350
  for script in soup(["script", "style"]):
351
  script.decompose()
352
 
 
353
  text = soup.get_text()
354
 
 
355
  lines = (line.strip() for line in text.splitlines())
356
  chunks = (phrase.strip() for line in lines for phrase in line.split(" "))
357
  text = ' '.join(chunk for chunk in chunks if chunk)
358
 
 
359
  if len(text) > max_length:
360
  text = text[:max_length] + "..."
361
 
 
366
  return ""
367
 
368
  def detect_contradictions(self, results: List[Dict]) -> List[Dict]:
369
+ """검색 결과 간 모순 감지 (기존 코드 재사용)"""
370
  contradictions = []
371
 
 
372
  opposite_pairs = [
373
  ("increase", "decrease"),
374
  ("improve", "worsen"),
 
379
  ("growth", "decline")
380
  ]
381
 
 
382
  for i in range(len(results)):
383
  for j in range(i + 1, len(results)):
384
  desc1 = results[i].get('description', '').lower()
385
  desc2 = results[j].get('description', '').lower()
386
 
 
387
  for word1, word2 in opposite_pairs:
388
  if (word1 in desc1 and word2 in desc2) or (word2 in desc1 and word1 in desc2):
 
389
  common_words = set(desc1.split()) & set(desc2.split())
390
+ if len(common_words) > 5:
391
  contradictions.append({
392
  'source1': results[i]['url'],
393
  'source2': results[j]['url'],
 
399
  return contradictions
400
 
401
  def brave_search(self, query: str) -> List[Dict]:
402
+ """Brave Search API 호출 (기존 코드 재사용)"""
403
  if self.test_mode or self.bapi_token == "YOUR_BRAVE_API_TOKEN":
 
404
  test_results = []
405
  for i in range(5):
406
  test_results.append({
 
414
  try:
415
  params = {
416
  "q": query,
417
+ "count": 20,
418
  "safesearch": "moderate",
419
+ "freshness": "pw"
420
  }
421
 
422
  response = requests.get(
 
436
  "url": item.get("url", ""),
437
  "published": item.get("published", "")
438
  }
 
439
  result["credibility_score"] = self.calculate_credibility_score(result)
440
  results.append(result)
441
 
 
442
  results.sort(key=lambda x: x['credibility_score'], reverse=True)
443
  return results
444
  else:
 
460
  def call_llm_streaming(self, messages: List[Dict[str, str]], role: str) -> Generator[str, None, None]:
461
  """스트리밍 LLM API 호출"""
462
 
 
463
  if self.test_mode:
464
  logger.info(f"테스트 모드 스트리밍 - Role: {role}")
465
  test_responses = {
466
  "supervisor_initial": """이 질문에 대한 거시적 분석을 제시하겠습니다.
467
 
468
+ **1. 문제의 본질 파악**
469
+ 사용자는 실용적이고 즉시 적용 가능한 해결책을 원하고 있습니다. 단순한 이론이나 개념이 아닌, 실제로 구현 가능한 구체적인 방안이 필요합니다.
 
 
470
 
471
+ **2. 전략적 프레임워크**
472
+ - 단기 목표: 즉시 실행 가능한 quick win 솔루션 도출
473
+ - 중기 목표: 지속 가능한 개선 체계 구축
474
+ - 장기 목표: 혁신적 변화를 통한 경쟁 우위 확보
475
 
476
+ **3. 제약사항 맥락**
477
+ - 기존 리소스와 인프라 활용 극대화
478
+ - 최소한의 투자로 최대 효과 달성
479
+ - 실무진이 바로 이해하고 실행할 수 있는 수준
480
 
481
+ **4. 성공 기준**
482
+ - 측정 가능한 개선 지표 (30% 이상 향상)
483
+ - 3개월 내 가시적 성과 달성
484
+ - ROI 200% 이상 달성""",
485
 
486
+ "creator": """혁신적인 아이디어를 제시하겠습니다.
487
+
488
+ **🚀 아이디어 1: AI 기반 자동 최적화 시스템**
489
+ - 독창성: 머신러닝이 스스로 시스템을 개선하는 자가 진화 시스템
490
+ - 영향력: 인간 개입 없이 24/7 성능 향상, 90% 효율성 증가 가능
491
+ - 필요 리소스: 클라우드 컴퓨팅, ML 엔지니어 1명
492
+ - 실현 가능성: 8/10
493
+
494
+ **💡 아이디어 2: 크라우드소싱 혁신 플랫폼**
495
+ - 독창성: 직원이 참여하는 실시간 개선 아이디어 시장
496
+ - 영향력: 집단 지성 활용으로 혁신 속도 10배 가속
497
+ - 필요 리소스: 플랫폼, 인센티브 예산
498
+ - 실현 가능성: 9/10
499
+
500
+ **🔄 아이디어 3: 디지털 트윈 시뮬레이션**
501
+ - 독창성: 가상 환경에서 모든 시나리오를 사전 테스트
502
+ - 영향력: 리스크 80% 감소, 실패 비용 제로화
503
+ - 필요 리소스: 시뮬레이션 소프트웨어, 데이터 분석가
504
+ - 실현 가능성: 7/10
505
+
506
+ **🌐 아이디어 4: 블록체인 기반 프로세스 자동화**
507
+ - 독창성: 신뢰 기반 자동 실행 스마트 컨트랙트
508
+ - 영향력: 중개 비용 제거, 처리 시간 95% 단축
509
+ - 필요 리소스: 블록체인 개발자, 네트워크 인프라
510
+ - 실현 가능성: 6/10
511
+
512
+ **🧬 아이디어 5: 생체모방 알고리즘 적용**
513
+ - 독��성: 자연의 최적화 원리를 비즈니스에 적용
514
+ - 영향력: 예측 불가능한 환경에서도 적응력 극대화
515
+ - 필요 리소스: R&D 팀, 실험 환경
516
+ - 실현 가능성: 5/10
517
+
518
+ **시너지 효과**
519
+ 아이디어 1+2 결합: AI가 크라우드소싱 아이디어를 자동 평가하고 구현
520
+ 아이디어 3+4 결합: 블록체인으로 검증된 디지털 트윈 결과 자동 실행""",
521
+
522
+ "supervisor_ideation_review": """창조자 AI의 아이디어를 검토한 결과입니다.
523
+
524
+ **전략적 평가**
525
+ 1. AI 기반 자동 최적화 시스템 - ⭐⭐⭐⭐⭐
526
+ - 즉시 실행 가능하고 ROI가 명확함
527
+ - 기존 인프라 활용 가능
528
+
529
+ 2. 크라우드소싱 혁신 플랫폼 - ⭐⭐⭐⭐⭐
530
+ - 조직 문화 개선과 혁신 동시 달성
531
+ - 빠른 구현과 낮은 리스크
532
+
533
+ 3. 디지털 트윈 시뮬레이션 - ⭐⭐⭐⭐
534
+ - 중장기적 가치가 높음
535
+ - 초기 투자 대비 효과 검증 필요
536
+
537
+ **선별된 아이디어**
538
+ 1, 2, 3번 아이디어를 중심으로 진행 권장
539
+
540
+ **조사 필요 사항**
541
+ - 성공 사례와 구현 방법론
542
+ - 필요 기술 스택과 도구
543
+ - 예상 비용과 ROI 데이터
544
+ - 산업별 적용 사례
545
+
546
+ [검색 키워드]: AI automation implementation case studies, crowdsourcing innovation platform examples, digital twin ROI analysis, machine learning optimization tools, employee innovation engagement systems""",
547
 
548
+ "researcher": """조사 결과를 종합하여 보고합니다.
549
+
550
+ **1. AI 자동 최적화 시스템 구현 사례 (신뢰도 0.92)**
551
+ - Google: AutoML로 모델 성능 40% 개선, 개발 시간 90% 단축
552
+ - Netflix: 실시간 최적화로 스트리밍 품질 35% 향상
553
+ - 구현 도구: TensorFlow Extended, AutoKeras, H2O.ai
554
+ - 평균 ROI: 6개월 내 250%
555
+ - 출처: Google AI Blog, Netflix Tech Blog
556
+
557
+ **2. 크라우드소싱 혁신 플랫폼 성공 사례 (신뢰도 0.88)**
558
+ - P&G Connect+Develop: 외부 혁신으로 R&D 생산성 60% 향상
559
+ - Lego Ideas: 고객 아이디어로 신제품 출시 주기 50% 단축
560
+ - 플랫폼: IdeaScale, Brightidea, Spigit
561
+ - 평균 참여율: 직원의 75%
562
+ - 출처: Harvard Business Review, MIT Sloan Review
563
+
564
+ **3. 디지털 트윈 ROI 분석 (신뢰도 0.85)**
565
+ - GE: 예측 정비로 다운타임 20% 감소, 연간 $1.6B 절감
566
+ - Siemens: 제품 개발 주기 50% 단축
567
+ - 필요 기술: Azure Digital Twins, AWS IoT TwinMaker
568
+ - 초기 투자 회수: 평균 18개월
569
+ - 출처: Gartner Report 2024, IDC Research
570
+
571
+ **4. 실제 구현 가이드 (신뢰도 0.90)**
572
+ - 단계별 구현 로드맵 확보
573
+ - 오픈소스 도구 목록 및 비용 분석
574
+ - 필요 인력: 프로젝트당 3-5명
575
+ - 구현 기간: 3-6개월
576
+
577
+ **5. 최신 트렌드 (신뢰도 0.87)**
578
+ - 2024년 AI 자동화가 주류로 부상
579
+ - Low-code/No-code 플랫폼으로 진입 장벽 낮아짐
580
+ - Edge AI로 실시간 최적화 가능
581
+ - 출처: McKinsey Digital Report 2024
582
+
583
+ **핵심 인사이트**
584
+ - 세 가지 아이디어 모두 검증된 성공 사례 존재
585
+ - 투자 대비 효과가 명확히 입증됨
586
+ - 기술적 구현 장벽이 낮아지고 있음
587
+ - 빠른 실행이 경쟁 우위의 핵심""",
588
 
589
+ "evaluator_research": """조사 결과를 객관적으로 평가합니다.
590
+
591
+ **실현 가능성 평가**
592
+ 1. AI 자동 최적화 시스템: 9/10
593
+ - 근거: 다수의 성공 사례, 명확한 ROI, 기술 성숙도 높음
594
+ - 리스크: 초기 데이터 품질, 내부 저항
595
+ - ROI 예측: 6개월 250% (조사 결과 검증됨)
596
+
597
+ 2. 크라우드소싱 혁신 플랫폼: 9/10
598
+ - 근거: 즉시 구현 가능, 낮은 기술 장벽
599
+ - 리스크: 참여도 저하, 아이디어 품질 관리
600
+ - ROI 예측: 1년 180%
601
+
602
+ 3. 디지털 트윈: 7/10
603
+ - 근거: 높은 잠재력, 장기적 가치
604
+ - 리스크: 초기 투자 규모, 기술 복잡도
605
+ - ROI 예측: 18개월 내 200%
606
+
607
+ **조사 신뢰성 평가**
608
+ - 출처 신뢰도: 평균 0.88 (매우 높음)
609
+ - 정보 충분성: 85% (실행에 충분)
610
+ - 추가 필요 정보: 산업별 세부 사례, 실패 요인 분석
611
+
612
+ **최종 추천**
613
+ 1순위: AI 자동 최적화 + 크라우드소싱 통합 접근
614
+ - 방안을 결합하여 시너지 극대화
615
+ - 단계적 구현으로 리스크 최소화
616
+ - 3개월 가시적 성과 가능
617
+
618
+ 2순위: 디지털 트윈 (중장기 프로젝트로 병행)""",
 
 
 
 
 
 
 
 
 
 
 
 
619
 
620
+ "supervisor_execution": """평가 결과를 바탕으로 구체적인 실행 지시를 내립니다.
621
+
622
+ **통합 실행 전략**
623
+ AI 자동 최적화와 크라우드소싱을 결합한 "지능형 혁신 시스템" 구축
624
+
625
+ **1단계: 기반 구축 (1-2주차)**
626
+ - AI 자동 최적화 파일럿 프로젝트 선정
627
+ - 크라우드소싱 플랫폼 도구 선정 (IdeaScale 추천)
628
+ - 프로젝트팀 구성: PM 1명, ML 엔지니어 2명, 플랫폼 관리자 1명
629
+ - 초기 예산: $50,000
630
+
631
+ **2단계: 파일럿 실행 (3-6주차)**
632
+ - 선정 부서에서 AI 최적화 테스트
633
+ - 전사 아이디어 공모 시작
634
+ - 주간 성과 측정 및 조정
635
+ - 리스크: 데이터 품질 → 대응: 데이터 정제 자동화
636
+
637
+ **3단계: 통합 및 확장 (7-12주차)**
638
+ - AI가 크라우드소싱 아이디어 자동 평가
639
+ - 최우수 아이디어 자동 시뮬레이션
640
+ - 단계적 전사 확대
641
+ - 성과 지표: 효율성 30% 향상, 혁신 아이디어 100개/월
642
+
643
+ **리스크 대응 계획**
644
+ - 기술적 문제: 24/7 모니터링, 롤백 계획
645
+ - 참여 저조: 게임화, 인센티브 강화
646
+ - 품질 이슈: AI 기반 품질 검증
647
+
648
+ **성과 측정**
649
+ - 주간: 시스템 성능, 참여율
650
+ - 월간: ROI, 혁신 지표
651
+ - 분기: 전략적 영향 평가""",
652
+
653
+ "executor": """즉시 실행 가능한 구체적 계획을 제시합니다.
654
+
655
+ **🚀 1주차: 킥오프 및 환경 구축**
656
+
657
+ 월요일-화요일: 프로젝트팀 구성 및 환경 설정
658
+ ```python
659
+ # AI 최적화 환경 설정 스크립트
660
+ import tensorflow as tf
661
+ from tensorflow import keras
662
+ import autokeras as ak
663
+
664
+ # 자동 최적화 파이프라인 설정
665
+ class AutoOptimizer:
666
+ def __init__(self):
667
+ self.model = ak.AutoModel(
668
+ project_name='auto_optimization',
669
+ max_trials=100
670
+ )
671
+
672
+ def optimize(self, data):
673
+ # 자동 하이퍼파라미터 튜닝
674
+ self.model.fit(data['X'], data['y'])
675
+ return self.model.evaluate(data['X_test'], data['y_test'])
676
+ ```
677
+
678
+ 수요일-금요일: 크라우드소싱 플랫폼 구축
679
+ - IdeaScale 계정 설정 및 커스터마이징
680
+ - 직원 온보딩 자료 작성
681
+ - 평가 기준 및 보상 체계 수립
682
+
683
+ **📊 2-3주차: 파일럿 프로그램 실행**
684
+
685
+ 데이터 수집 및 AI 모델 훈련:
686
+ ```python
687
+ # 실시간 성능 모니터링 대시보드
688
+ import dash
689
+ import plotly.graph_objs as go
690
+
691
+ app = dash.Dash(__name__)
692
+ app.layout = html.Div([
693
+ dcc.Graph(id='live-performance'),
694
+ dcc.Interval(id='graph-update', interval=1000)
695
+ ])
696
+
697
+ @app.callback(Output('live-performance', 'figure'),
698
+ [Input('graph-update', 'n_intervals')])
699
+ def update_metrics(n):
700
+ # 실시간 성능 지표 업데이트
701
+ return create_performance_dashboard()
702
+ ```
703
+
704
+ 크라우드소싱 캠페인 런칭:
705
+ - 첫 주 챌린지: "효율성 10% 개선 아이디어"
706
+ - 일일 리더보드 및 포인트 시스템
707
+ - AI 자동 아이디어 분류 및 초기 평가
708
+
709
+ **🔧 4-6주차: 통합 시스템 구현**
710
+
711
+ AI-크라우드소싱 통합 모듈:
712
+ ```python
713
+ class InnovationEngine:
714
+ def __init__(self):
715
+ self.ai_evaluator = AIIdeaEvaluator()
716
+ self.crowd_platform = CrowdsourcingPlatform()
717
+
718
+ def process_idea(self, idea):
719
+ # 1. AI 초기 평가
720
+ score = self.ai_evaluator.evaluate(idea)
721
+
722
+ # 2. 유망 아이디어 자동 시뮬레이션
723
+ if score > 0.7:
724
+ simulation_result = self.run_simulation(idea)
725
+
726
+ # 3. 실행 우선순위 자동 배정
727
+ return self.prioritize_execution(idea, score, simulation_result)
728
+ ```
729
+
730
+ **📈 예상 산출물**
731
+ 1. 구동 가능한 AI 최적화 시스템
732
+ 2. 활성화된 크라우드소싱 플랫폼
733
+ 3. 통합 대시보드 및 분석 도구
734
+ 4. 첫 달 목표: 50개 아이디어, 5개 구현, 15% 효율성 개선""",
735
+
736
+ "evaluator_execution": """실행 계획을 평가합니다.
737
+
738
+ **계획 완성도: 8.5/10**
739
 
740
  **강점**
741
+ - 즉시 실행 가능한 코드와 구체적 일정 제공
742
+ - 단계별 명확한 목표와 산출물 정의
743
+ - 기술 스택이 검증되고 실용적임
744
 
745
  **개선 필요사항**
746
+ 1. 데이터 보안 및 프라이버시 대책 미흡
747
+ - 추가 필요: GDPR 준수 체크리스트, 데이터 암호화 방안
748
+
749
+ 2. 변화 관리 계획 부족
750
+ - 추가 필요: 직원 교육 프로그램, 저항 관리 전략
751
+
752
+ 3. 백업복구 계획 누락
753
+ - 추가 필요: 시스템 장애 시 BCP, 데이터 백업 주기
754
+
755
+ **실행 예상 문제점**
756
+ 1. 초기 데이터 부족 해결: 합성 데이터 생성 또는 전이학습
757
+ 2. 직원 참여 저조 → 해결: 챔피언 그룹 육성, 조기 성공 사례 홍보
758
+ 3. 기술 통합 복잡도 → 해결: 마이크로서비스 아키텍처 채택
759
+
760
+ **추가 제안**
761
+ - A/B 테스트 프레임워크 구축
762
+ - 실패 빠른 피벗을 위한 의사결정 체계
763
+ - 외부 전문가 자문단 구성
764
+ - 경쟁사 벤치마킹 정기 실시
765
+
766
+ **품질 기준**
767
+ - 코드 커버리지 80% 이상
768
+ - 응답 시간 200ms 이하
769
+ - 시스템 가용성 99.9%
770
+ - 사용자 만족도 4.5/5 이상""",
771
+
772
+ "supervisor_final": """평가를 바탕으로 최종 개선 지시를 내립니다.
773
+
774
+ **필수 보완 사항**
775
+
776
+ 1. **보안 및 컴플라이언스 강화**
777
+ - GDPR/CCPA 준수 체크리스트 즉시 작성
778
+ - 전체 데이터 플로우 암호화 구현
779
+ - 접근 권한 관리 시스템 구축
780
+
781
+ 2. **변화 관리 프로그램 추가**
782
+ - 1주차에 전직원 타운홀 미팅 실시
783
+ - 부서별 챔피언 선정 및 인센티브 제공
784
+ - 주간 성공 사례 공유 세션 운영
785
+
786
+ 3. **리스크 관리 체계 구축**
787
+ - 24/7 모니터링 대시보드 구현
788
+ - 자동 롤백 시스템 구축
789
+ - 핫라인 및 긴급 대응팀 구성
790
+
791
+ **품질 보증 요구사항**
792
+ - 모든 코드는 peer review 필수
793
+ - 자동화된 테스트 커버리지 85% 이상
794
+ - 일일 스탠드업으로 진행상황 체크
795
+
796
+ **성공을 위한 핵심 요소**
797
+ 1. 경영진의 visible한 지원과 참여
798
+ 2. Quick win 사례를 통한 모멘텀 구축
799
+ 3. 지속적인 개선과 빠른 피드백 루프
800
+ 4. 투명한 성과 공유와 보상
801
+
802
+ **최종 목표**
803
+ - 3개월 내 ROI 150% 달성
804
+ - 직원 참여율 80% 이상
805
+ - 시스템 안정성 99.9% 유지""",
806
 
807
+ "executor_final": """모든 피드백을 반영한 최종 실행 가능 솔루션입니다.
808
 
809
+ # 🎯 지능형 혁신 시스템 구축 - 최종 실행 가이드
810
 
811
  ## 📋 Executive Summary
812
+ AI 자동 최적화와 크라우드소싱을 통합한 혁신 시스템으로 3개월 효율성 30% 향상, ROI 150% 달성을 목표로 합니다.
813
 
814
+ ## 🚀 1주차: 보안 강화된 프로젝트 시작
815
 
816
+ ### Day 1-2: 킥오프 및 보안 체계 구축
817
+ ```python
818
+ # 보안 강화된 데이터 처리 파이프라인
819
+ from cryptography.fernet import Fernet
820
+ import hashlib
821
+ from datetime import datetime
822
 
823
+ class SecureDataPipeline:
824
+ def __init__(self):
825
+ self.key = Fernet.generate_key()
826
+ self.cipher = Fernet(self.key)
827
+ self.audit_log = []
828
+
829
+ def process_data(self, data, user_id):
830
+ # GDPR 준수 암호화
831
+ encrypted = self.cipher.encrypt(data.encode())
832
+
833
+ # 감사 로그
834
+ self.audit_log.append({
835
+ 'user': user_id,
836
+ 'action': 'data_process',
837
+ 'timestamp': datetime.now(),
838
+ 'data_hash': hashlib.sha256(data.encode()).hexdigest()
839
+ })
840
+
841
+ return self.run_optimization(encrypted)
842
+
843
+ def run_optimization(self, encrypted_data):
844
+ # 암호화된 상태에서 처리
845
+ decrypted = self.cipher.decrypt(encrypted_data)
846
+ # AI 최적화 로직
847
+ return optimized_result
848
+ ```
849
 
850
+ ### Day 3: 전직원 타운홀 미팅
851
+ **어젠다 (1시간)**
852
+ 1. 비전 공유: CEO 발표 (10분)
853
+ 2. 시스템 소개: 프로젝트 리더 (20분)
854
+ 3. 혜택 설명: 직원 관점에서 (15분)
855
+ 4. Q&A 및 피드백 (15분)
856
+
857
+ **변화 관리 자료**
858
+ ```markdown
859
+ # 직원을 위한 혁신 시스템 가이드
860
+
861
+ ## 당신에게 주는 혜택
862
+ ✅ 아이디어가 즉시 실행됩니다
863
+ ✅ 기여도에 따른 명확한 보상
864
+ ✅ 반복 업무 자동화로 창의적 업무 집중
865
+ ✅ 실시간 성과 확인 가능
866
+
867
+ ## 참여 방법 (3단계)
868
+ 1. 플랫폼 로그인 → 아이디어 제출
869
+ 2. AI가 자동 평가 → 24시간 내 피드백
870
+ 3. 실행 및 보상 → 포인트/보너스 지급
871
+ ```
872
 
873
+ ### Day 4-5: 기술 인프라 구축
874
+ ```python
875
+ # 통합 모니터링 대시보드
876
+ import dash
877
+ import plotly.graph_objs as go
878
+ from dash import dcc, html, Input, Output
879
+ import pandas as pd
880
 
881
+ class MonitoringDashboard:
882
+ def __init__(self):
883
+ self.app = dash.Dash(__name__)
884
+ self.setup_layout()
885
+ self.setup_callbacks()
886
+
887
+ def setup_layout(self):
888
+ self.app.layout = html.Div([
889
+ html.H1("지능형 혁신 시스템 대시보드"),
890
+
891
+ # 실시간 KPI
892
+ html.Div([
893
+ dcc.Graph(id='efficiency-gauge'),
894
+ dcc.Graph(id='participation-rate'),
895
+ dcc.Graph(id='roi-tracker'),
896
+ dcc.Graph(id='system-health')
897
+ ], style={'display': 'flex'}),
898
+
899
+ # 알림 시스템
900
+ html.Div(id='alerts', className='alert-box'),
901
+
902
+ # 자동 업데이트
903
+ dcc.Interval(id='interval', interval=5000)
904
+ ])
905
+
906
+ def setup_callbacks(self):
907
+ @self.app.callback(
908
+ [Output('efficiency-gauge', 'figure'),
909
+ Output('alerts', 'children')],
910
+ [Input('interval', 'n_intervals')]
911
+ )
912
+ def update_dashboard(n):
913
+ # 실시간 메트릭 수집
914
+ metrics = self.collect_metrics()
915
+
916
+ # 임계값 체크 및 알림
917
+ alerts = self.check_thresholds(metrics)
918
+
919
+ return self.create_gauge(metrics['efficiency']), alerts
920
+ ```
921
 
922
+ ## 📊 2-3주차: 스마트 파일럿 프로그램
923
+
924
+ ### 크라우드소싱 게임화 시스템
925
  ```python
926
+ class GamificationEngine:
 
927
  def __init__(self):
928
+ self.levels = {
929
+ 'Novice': 0,
930
+ 'Contributor': 100,
931
+ 'Innovator': 500,
932
+ 'Champion': 1000,
933
+ 'Legend': 5000
934
+ }
935
+ self.badges = {
936
+ 'first_idea': '첫 아이디어',
937
+ 'week_streak': '주간 연속 참여',
938
+ 'top_rated': '최고 평점',
939
+ 'implemented': '아이디어 실행됨'
940
+ }
941
+
942
+ def process_contribution(self, user_id, idea):
943
+ points = self.calculate_points(idea)
944
+ badges = self.check_badges(user_id, idea)
945
+ level_up = self.check_level_up(user_id, points)
946
+
947
+ # 실시간 알림
948
+ if level_up:
949
+ self.notify_achievement(user_id, level_up)
950
+
951
+ return {
952
+ 'points': points,
953
+ 'badges': badges,
954
+ 'level': self.get_user_level(user_id),
955
+ 'ranking': self.get_ranking(user_id)
956
+ }
957
+ ```
958
+
959
+ ### AI 평가 및 시뮬레이션 엔진
960
+ ```python
961
+ class AIInnovationEvaluator:
962
+ def __init__(self):
963
+ self.models = {
964
+ 'feasibility': self.load_model('feasibility_model.h5'),
965
+ 'impact': self.load_model('impact_model.h5'),
966
+ 'cost': self.load_model('cost_model.h5')
967
+ }
968
 
969
+ def evaluate_idea(self, idea_text, metadata):
970
+ # NLP 처리
971
+ features = self.extract_features(idea_text)
972
+
973
+ # 다차원 평가
974
+ scores = {
975
+ 'feasibility': self.models['feasibility'].predict(features),
976
+ 'impact': self.models['impact'].predict(features),
977
+ 'cost_efficiency': self.models['cost'].predict(features),
978
+ 'innovation_index': self.calculate_innovation(features)
979
+ }
980
+
981
+ # 자동 시뮬레이션 트리거
982
+ if scores['feasibility'] > 0.7 and scores['impact'] > 0.8:
983
+ simulation_result = self.run_simulation(idea_text, metadata)
984
+ scores['simulation'] = simulation_result
985
+
986
+ return self.generate_report(scores, idea_text)
987
  ```
988
 
989
+ ## 🔧 4-6주차: 고급 통합 및 최적화
990
+
991
+ ### 자동 실행 파이프라인
992
+ ```python
993
+ class AutoExecutionPipeline:
994
+ def __init__(self):
995
+ self.executor = TaskExecutor()
996
+ self.validator = ResultValidator()
997
+ self.rollback = RollbackManager()
998
+
999
+ def execute_approved_idea(self, idea_id):
1000
+ try:
1001
+ # 실행 계획 생성
1002
+ plan = self.create_execution_plan(idea_id)
1003
+
1004
+ # 단계별 실행 with 체크포인트
1005
+ for step in plan.steps:
1006
+ result = self.executor.execute(step)
1007
+
1008
+ if not self.validator.validate(result):
1009
+ self.rollback.restore_checkpoint(step.checkpoint)
1010
+ return self.handle_failure(step, result)
1011
+
1012
+ # 실시간 진행상황 업데이트
1013
+ self.update_progress(idea_id, step.completion_rate)
1014
+
1015
+ return self.finalize_execution(idea_id)
1016
+
1017
+ except Exception as e:
1018
+ self.emergency_rollback(idea_id)
1019
+ self.alert_team(e)
1020
+ ```
1021
+
1022
+ ### 지속적 개선 시스템
1023
+ ```python
1024
+ class ContinuousImprovement:
1025
+ def __init__(self):
1026
+ self.ml_pipeline = MLPipeline()
1027
+ self.feedback_loop = FeedbackLoop()
1028
+
1029
+ def daily_optimization(self):
1030
+ # 매일 자정 실행
1031
+ performance_data = self.collect_daily_metrics()
1032
+
1033
+ # 모델 재훈련
1034
+ self.ml_pipeline.retrain(performance_data)
1035
+
1036
+ # A/B 테스트 자동 설정
1037
+ experiments = self.design_experiments(performance_data)
1038
+
1039
+ for exp in experiments:
1040
+ self.run_ab_test(exp)
1041
+
1042
+ # 인사이트 생성
1043
+ insights = self.generate_insights(performance_data)
1044
+ self.distribute_report(insights)
1045
+ ```
1046
+
1047
+ ## 📈 성과 측정 보고 체계
1048
+
1049
+ ### 실시간 KPI 대시보드
1050
+ ```python
1051
+ kpi_metrics = {
1052
+ 'efficiency_gain': {
1053
+ 'current': 0,
1054
+ 'target': 30,
1055
+ 'unit': '%'
1056
+ },
1057
+ 'participation_rate': {
1058
+ 'current': 0,
1059
+ 'target': 80,
1060
+ 'unit': '%'
1061
+ },
1062
+ 'ideas_per_month': {
1063
+ 'current': 0,
1064
+ 'target': 100,
1065
+ 'unit': 'count'
1066
+ },
1067
+ 'roi': {
1068
+ 'current': 0,
1069
+ 'target': 150,
1070
+ 'unit': '%'
1071
+ },
1072
+ 'system_uptime': {
1073
+ 'current': 0,
1074
+ 'target': 99.9,
1075
+ 'unit': '%'
1076
+ }
1077
+ }
1078
+
1079
+ # 자동 보고서 생성
1080
+ def generate_weekly_report():
1081
+ report = f"""
1082
+ # 주간 성과 보고서 - {datetime.now().strftime('%Y-%m-%d')}
1083
+
1084
+ ## 핵심 성과
1085
+ - 효율성 향상: {kpi_metrics['efficiency_gain']['current']}%
1086
+ - 직원 참여율: {kpi_metrics['participation_rate']['current']}%
1087
+ - 제출된 아이디어: {kpi_metrics['ideas_per_month']['current']}개
1088
+ - ROI: {kpi_metrics['roi']['current']}%
1089
+
1090
+ ## 주요 성공 사례
1091
+ {get_success_stories()}
1092
+
1093
+ ## 다음 계획
1094
+ {get_next_week_plan()}
1095
+ """
1096
+ return report
1097
+ ```
1098
+
1099
+ ## 🛡️ 리스크 관리 및 비상 계획
1100
+
1101
+ ### 자동 백업 및 복구
1102
+ ```bash
1103
+ #!/bin/bash
1104
+ # 시간별 자동 백업 스크립트
1105
+ BACKUP_DIR="/secure/backups/$(date +%Y%m%d)"
1106
+ mkdir -p $BACKUP_DIR
1107
+
1108
+ # 데이터베이스 백업
1109
+ pg_dump -U postgres innovation_db > $BACKUP_DIR/db_backup_$(date +%H%M).sql
1110
+
1111
+ # 애플리케이션 상태 백업
1112
+ kubectl get all --all-namespaces -o yaml > $BACKUP_DIR/k8s_state_$(date +%H%M).yaml
1113
+
1114
+ # S3 업로드 (암호화)
1115
+ aws s3 cp $BACKUP_DIR s3://innovation-backups/ --recursive --sse
1116
+ ```
1117
+
1118
+ ### 24/7 모니터링 및 알림
1119
+ ```python
1120
+ class AlertingSystem:
1121
+ def __init__(self):
1122
+ self.thresholds = {
1123
+ 'response_time': 200, # ms
1124
+ 'error_rate': 0.01, # 1%
1125
+ 'cpu_usage': 80, # %
1126
+ 'participation_drop': 20 # %
1127
+ }
1128
+
1129
+ def monitor(self):
1130
+ while True:
1131
+ metrics = self.collect_metrics()
1132
+
1133
+ for metric, value in metrics.items():
1134
+ if self.is_threshold_breached(metric, value):
1135
+ self.trigger_alert(metric, value)
1136
+ self.auto_remediate(metric)
1137
+
1138
+ time.sleep(60) # 1분마다 체크
1139
+ ```
1140
+
1141
+ ## 🎯 최종 체크리스트
1142
+
1143
+ ### Week 1 완료 사항
1144
+ - [ ] 보안 인프라 구축 완료
1145
+ - [ ] 전직원 타운홀 미팅 실시
1146
+ - [ ] 챔피언 그룹 선정
1147
+ - [ ] 기본 시스템 배포
1148
+
1149
+ ### Week 2-3 완료 사항
1150
+ - [ ] 파일럿 부서 선정 및 시작
1151
+ - [ ] 첫 아이디어 캠페인 런칭
1152
+ - [ ] AI 평가 시스템 가동
1153
+ - [ ] 첫 quick win 달성
1154
+
1155
+ ### Week 4-6 완료 사항
1156
+ - [ ] 전사 확대 시작
1157
+ - [ ] 자동화 파이프라인 완성
1158
+ - [ ] KPI 목표 50% 달성
1159
+ - [ ] 첫 ROI 리포트 작성
1160
+
1161
+ ## 💡 성공을 위한 팁
1162
+ 1. 매일 아침 5분 스탠드업 미팅
1163
+ 2. 주간 성공 사례 전사 공유
1164
+ 3. 월간 혁신 어워드 시상
1165
+ 4. 분기별 해커톤 개최
1166
 
1167
  ---
1168
+ *이 시스템은 지속적으로 진화합니다. 피드백은 innovation@company.com으로!*"""
 
1169
  }
1170
 
1171
+ # 역할과 프롬프트에 따라 적절한 응답 선택
1172
+ if role == "supervisor" and "창조자 AI가 제시한" in messages[0]["content"]:
1173
+ response = test_responses["supervisor_ideation_review"]
1174
+ elif role == "supervisor" and "평가자 AI의 종합 평가" in messages[0]["content"]:
1175
  response = test_responses["supervisor_execution"]
1176
+ elif role == "supervisor" and "평가자 AI의 실행 계획 평가" in messages[0]["content"]:
1177
+ response = test_responses["supervisor_final"]
1178
  elif role == "supervisor":
1179
  response = test_responses["supervisor_initial"]
1180
+ elif role == "creator":
1181
+ response = test_responses["creator"]
1182
  elif role == "researcher":
1183
  response = test_responses["researcher"]
1184
+ elif role == "evaluator" and "조사자 AI의 조사 결과" in messages[0]["content"]:
1185
+ response = test_responses["evaluator_research"]
1186
+ elif role == "evaluator":
1187
+ response = test_responses["evaluator_execution"]
1188
+ elif role == "executor" and "최종 솔루션" in messages[0]["content"]:
1189
  response = test_responses["executor_final"]
1190
  else:
1191
  response = test_responses["executor"]
 
1193
  yield from self.simulate_streaming(response, role)
1194
  return
1195
 
1196
+ # 실제 API 호출 (기존 코드와 동일)
1197
  try:
1198
  system_prompts = {
1199
  "supervisor": "당신은 거시적 관점에서 분석하고 지도하는 감독자 AI입니다.",
1200
+ "creator": "당신은 혁신적이고 창의적인 아이디어를 생성하는 창조자 AI입니다.",
1201
  "researcher": "당신은 정보를 조사하고 체계적으로 정리하는 조사자 AI입니다.",
1202
+ "evaluator": "당신은 객관적이고 비판적인 시각으로 평가하는 평가자 AI입니다.",
1203
  "executor": "당신은 세부적인 내용을 구현하는 실행자 AI입니다."
1204
  }
1205
 
 
1260
  # 시스템 인스턴스 생성
1261
  llm_system = LLMCollaborativeSystem()
1262
 
1263
+ # 내부 히스토리 관리
1264
  internal_history = []
1265
 
1266
  def process_query_streaming(user_query: str):
1267
+ """향상된 협업 프로세스를 통한 쿼리 처리"""
1268
  global internal_history
1269
 
1270
  if not user_query:
1271
+ return "", "", "", "", "", "❌ 질문을 입력해주세요."
1272
 
1273
+ all_responses = {
1274
+ "supervisor": [],
1275
+ "creator": [],
1276
+ "researcher": [],
1277
+ "evaluator": [],
1278
+ "executor": []
1279
+ }
1280
 
1281
  try:
1282
+ # 1단계: 감독자 AI 초기 분석
1283
  supervisor_prompt = llm_system.create_supervisor_initial_prompt(user_query)
1284
  supervisor_initial_response = ""
1285
 
 
1290
  ):
1291
  supervisor_initial_response += chunk
1292
  supervisor_text = f"[초기 분석] - {datetime.now().strftime('%H:%M:%S')}\n{supervisor_initial_response}"
1293
+ yield supervisor_text, "", "", "", "", "🔄 감독자 AI가 분석 중..."
1294
 
1295
  all_responses["supervisor"].append(supervisor_initial_response)
1296
 
1297
+ # 2단계: 창조자 AI 혁신적 아이디어 생성
1298
+ creator_prompt = llm_system.create_creator_prompt(user_query, supervisor_initial_response)
1299
+ creator_response = ""
1300
+
1301
+ creator_text = "[혁신 아이디어] 🔄 생성 중...\n"
1302
+ for chunk in llm_system.call_llm_streaming(
1303
+ [{"role": "user", "content": creator_prompt}],
1304
+ "creator"
1305
+ ):
1306
+ creator_response += chunk
1307
+ creator_text = f"[혁신 아이디어] - {datetime.now().strftime('%H:%M:%S')}\n{creator_response}"
1308
+ yield supervisor_text, creator_text, "", "", "", "💡 창조자 AI가 아이디어 생성 중..."
1309
+
1310
+ all_responses["creator"].append(creator_response)
1311
+
1312
+ # 3단계: 감독자 AI 아이디어 검토 및 조사 지시
1313
+ supervisor_review_prompt = llm_system.create_supervisor_ideation_review_prompt(user_query, creator_response)
1314
+ supervisor_review_response = ""
1315
+
1316
+ supervisor_text += "\n\n---\n\n[아이디어 검토] 🔄 생성 중...\n"
1317
+ for chunk in llm_system.call_llm_streaming(
1318
+ [{"role": "user", "content": supervisor_review_prompt}],
1319
+ "supervisor"
1320
+ ):
1321
+ supervisor_review_response += chunk
1322
+ temp_text = f"{all_responses['supervisor'][0]}\n\n---\n\n[아이디어 검토] - {datetime.now().strftime('%H:%M:%S')}\n{supervisor_review_response}"
1323
+ supervisor_text = f"[초기 분석] - {datetime.now().strftime('%H:%M:%S')}\n{temp_text}"
1324
+ yield supervisor_text, creator_text, "", "", "", "🎯 감독자 AI가 검토 중..."
1325
+
1326
+ all_responses["supervisor"].append(supervisor_review_response)
1327
+
1328
  # 키워드 추출
1329
+ keywords = llm_system.extract_keywords(supervisor_review_response)
1330
  logger.info(f"추출된 키워드: {keywords}")
1331
 
1332
+ # 4단계: 브레이브 검색 수행
1333
  researcher_text = "[웹 검색] 🔍 검색 중...\n"
1334
+ yield supervisor_text, creator_text, researcher_text, "", "", "🔍 웹 검색 수행 중..."
1335
 
1336
  search_results = {}
1337
  total_search_count = 0
1338
 
 
1339
  for keyword in keywords:
1340
  results = llm_system.brave_search(keyword)
1341
  if results:
1342
  search_results[keyword] = results
1343
  total_search_count += len(results)
1344
  researcher_text += f"✓ '{keyword}' 검색 완료 ({len(results)}개 결과)\n"
1345
+ yield supervisor_text, creator_text, researcher_text, "", "", f"🔍 '{keyword}' 검색 중..."
1346
 
 
1347
  synonyms = llm_system.generate_synonyms(keyword)
1348
  for synonym in synonyms:
1349
  syn_results = llm_system.brave_search(f"{keyword} {synonym}")
 
1351
  search_results[f"{keyword} ({synonym})"] = syn_results
1352
  total_search_count += len(syn_results)
1353
  researcher_text += f"✓ 동의어 '{synonym}' 검색 완료 ({len(syn_results)}개 결과)\n"
1354
+ yield supervisor_text, creator_text, researcher_text, "", "", f"🔍 동의어 '{synonym}' 검색 중..."
1355
 
1356
  researcher_text += f"\n📊 총 {total_search_count}개의 검색 결과 수집 완료\n"
1357
 
1358
+ # 5단계: 조사자 AI가 검색 결과 정리
1359
+ researcher_prompt = llm_system.create_researcher_prompt(user_query, supervisor_review_response, search_results)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1360
  researcher_response = ""
1361
 
1362
  researcher_text = "[조사 결과 정리] 🔄 생성 중...\n"
 
1366
  ):
1367
  researcher_response += chunk
1368
  researcher_text = f"[조사 결과 정리] - {datetime.now().strftime('%H:%M:%S')}\n{researcher_response}"
1369
+ yield supervisor_text, creator_text, researcher_text, "", "", "📝 조사자 AI가 정리 중..."
1370
 
1371
  all_responses["researcher"].append(researcher_response)
1372
 
1373
+ # 6단계: 평가자 AI가 조사 결과 평가
1374
+ evaluator_research_prompt = llm_system.create_evaluator_research_prompt(
1375
+ user_query, creator_response, researcher_response
1376
+ )
1377
+ evaluator_research_response = ""
1378
+
1379
+ evaluator_text = "[조사 결과 평가] 🔄 생성 중...\n"
1380
+ for chunk in llm_system.call_llm_streaming(
1381
+ [{"role": "user", "content": evaluator_research_prompt}],
1382
+ "evaluator"
1383
+ ):
1384
+ evaluator_research_response += chunk
1385
+ evaluator_text = f"[조사 결과 평가] - {datetime.now().strftime('%H:%M:%S')}\n{evaluator_research_response}"
1386
+ yield supervisor_text, creator_text, researcher_text, evaluator_text, "", "⚖️ 평가자 AI가 평가 중..."
1387
+
1388
+ all_responses["evaluator"].append(evaluator_research_response)
1389
+
1390
+ # 7단계: 감독자 AI가 실행 지시
1391
+ supervisor_execution_prompt = llm_system.create_supervisor_execution_prompt(
1392
+ user_query, evaluator_research_response
1393
+ )
1394
  supervisor_execution_response = ""
1395
 
1396
+ supervisor_text = f"{all_responses['supervisor'][0]}\n\n---\n\n[아이디어 검토] - {datetime.now().strftime('%H:%M:%S')}\n{all_responses['supervisor'][1]}\n\n---\n\n[실행 지시] 🔄 생성 중...\n"
1397
  for chunk in llm_system.call_llm_streaming(
1398
  [{"role": "user", "content": supervisor_execution_prompt}],
1399
  "supervisor"
1400
  ):
1401
  supervisor_execution_response += chunk
1402
+ temp_text = f"{all_responses['supervisor'][0]}\n\n---\n\n[아이디어 검토] - {datetime.now().strftime('%H:%M:%S')}\n{all_responses['supervisor'][1]}\n\n---\n\n[실행 지시] - {datetime.now().strftime('%H:%M:%S')}\n{supervisor_execution_response}"
1403
  supervisor_text = f"[초기 분석] - {datetime.now().strftime('%H:%M:%S')}\n{temp_text}"
1404
+ yield supervisor_text, creator_text, researcher_text, evaluator_text, "", "🎯 감독자 AI가 지시 중..."
1405
 
1406
  all_responses["supervisor"].append(supervisor_execution_response)
1407
 
1408
+ # 8단계: 실행자 AI가 초기 실행 계획 수립
1409
+ full_context = f"""
1410
+ 창조자 AI의 아이디어:
1411
+ {creator_response}
1412
+
1413
+ 조사자 AI의 조사 결과:
1414
+ {researcher_response}
1415
+
1416
+ 평가자 AI의 평가:
1417
+ {evaluator_research_response}
1418
+ """
1419
+
1420
+ executor_prompt = llm_system.create_executor_prompt(
1421
+ user_query, supervisor_execution_response, full_context
1422
+ )
1423
  executor_response = ""
1424
 
1425
+ executor_text = "[초기 실행 계획] 🔄 생성 중...\n"
1426
  for chunk in llm_system.call_llm_streaming(
1427
  [{"role": "user", "content": executor_prompt}],
1428
  "executor"
1429
  ):
1430
  executor_response += chunk
1431
+ executor_text = f"[초기 실행 계획] - {datetime.now().strftime('%H:%M:%S')}\n{executor_response}"
1432
+ yield supervisor_text, creator_text, researcher_text, evaluator_text, executor_text, "🔧 실행자 AI가 계획 중..."
1433
 
1434
  all_responses["executor"].append(executor_response)
1435
 
1436
+ # 9단계: 평가자 AI 실행 계획 평가
1437
+ evaluator_execution_prompt = llm_system.create_evaluator_execution_prompt(
1438
+ user_query, executor_response
1439
+ )
1440
+ evaluator_execution_response = ""
 
 
 
 
1441
 
1442
+ evaluator_text += "\n\n---\n\n[실행 계획 평가] 🔄 생성 중...\n"
1443
+ for chunk in llm_system.call_llm_streaming(
1444
+ [{"role": "user", "content": evaluator_execution_prompt}],
1445
+ "evaluator"
1446
+ ):
1447
+ evaluator_execution_response += chunk
1448
+ temp_text = f"{all_responses['evaluator'][0]}\n\n---\n\n[실행 계획 평가] - {datetime.now().strftime('%H:%M:%S')}\n{evaluator_execution_response}"
1449
+ evaluator_text = f"[조사 결과 평가] - {datetime.now().strftime('%H:%M:%S')}\n{temp_text}"
1450
+ yield supervisor_text, creator_text, researcher_text, evaluator_text, executor_text, "⚖️ 평가자 AI가 검증 중..."
1451
 
1452
+ all_responses["evaluator"].append(evaluator_execution_response)
1453
+
1454
+ # 10단계: 감독자 AI 최종 지시
1455
+ supervisor_final_prompt = llm_system.create_supervisor_final_prompt(
1456
+ user_query, evaluator_execution_response
1457
+ )
1458
+ supervisor_final_response = ""
1459
+
1460
+ supervisor_text = f"{all_responses['supervisor'][0]}\n\n---\n\n[아이디어 검토] - {datetime.now().strftime('%H:%M:%S')}\n{all_responses['supervisor'][1]}\n\n---\n\n[실행 지시] - {datetime.now().strftime('%H:%M:%S')}\n{all_responses['supervisor'][2]}\n\n---\n\n[최종 지시] 🔄 생성 중...\n"
1461
  for chunk in llm_system.call_llm_streaming(
1462
+ [{"role": "user", "content": supervisor_final_prompt}],
1463
  "supervisor"
1464
  ):
1465
+ supervisor_final_response += chunk
1466
+ temp_text = f"{all_responses['supervisor'][0]}\n\n---\n\n[아이디어 검토] - {datetime.now().strftime('%H:%M:%S')}\n{all_responses['supervisor'][1]}\n\n---\n\n[실행 지시] - {datetime.now().strftime('%H:%M:%S')}\n{all_responses['supervisor'][2]}\n\n---\n\n[최종 지시] - {datetime.now().strftime('%H:%M:%S')}\n{supervisor_final_response}"
1467
  supervisor_text = f"[초기 분석] - {datetime.now().strftime('%H:%M:%S')}\n{temp_text}"
1468
+ yield supervisor_text, creator_text, researcher_text, evaluator_text, executor_text, "🎯 감독자 AI가 최종 검토 중..."
1469
 
1470
+ all_responses["supervisor"].append(supervisor_final_response)
1471
 
1472
+ # 11단계: 실행자 AI 최종 솔루션
1473
+ executor_final_prompt = llm_system.create_executor_final_prompt(
1474
+ user_query, executor_response, supervisor_final_response, full_context
 
 
 
1475
  )
1476
  final_executor_response = ""
1477
 
1478
+ executor_text += "\n\n---\n\n[최종 실행 솔루션] 🔄 작성 중...\n"
1479
  for chunk in llm_system.call_llm_streaming(
1480
+ [{"role": "user", "content": executor_final_prompt}],
1481
  "executor"
1482
  ):
1483
  final_executor_response += chunk
1484
+ temp_text = f"[초기 실행 계획] - {datetime.now().strftime('%H:%M:%S')}\n{all_responses['executor'][0]}\n\n---\n\n[최종 실행 솔루션] - {datetime.now().strftime('%H:%M:%S')}\n{final_executor_response}"
1485
  executor_text = temp_text
1486
+ yield supervisor_text, creator_text, researcher_text, evaluator_text, executor_text, "📄 최종 솔루션 작성 중..."
1487
 
1488
  all_responses["executor"].append(final_executor_response)
1489
 
1490
+ # 최종 결과 생성
1491
+ final_summary = f"""## 🎯 최적화된 실용적 문제 해결 보고서
1492
 
1493
  ### 📌 사용자 질문
1494
  {user_query}
1495
 
1496
+ ### 🚀 최종 실행 솔루션
1497
  {final_executor_response}
1498
 
1499
  ---
1500
 
1501
  <details>
1502
+ <summary>📋 전체 협력 프로세스 보기</summary>
1503
 
1504
+ #### 1️⃣ 거시적 분석 (감독자 AI)
1505
  {all_responses['supervisor'][0]}
1506
 
1507
+ #### 2️⃣ 혁신적 아이디어 (창조자 AI)
1508
+ {all_responses['creator'][0]}
1509
 
1510
+ #### 3️⃣ 아이디어 검토 및 조사 지시 (감독자 AI)
1511
  {all_responses['supervisor'][1]}
1512
 
1513
+ #### 4️⃣ 조사 결과 (조사자 AI)
1514
+ {all_responses['researcher'][0]}
1515
+
1516
+ #### 5️⃣ 조사 결과 평가 (평가자 AI)
1517
+ {all_responses['evaluator'][0]}
1518
 
1519
+ #### 6️⃣ 실행 지시 (감독자 AI)
1520
+ {all_responses['supervisor'][2]}
1521
+
1522
+ #### 7️⃣ 초기 실행 계획 (실행자 AI)
1523
+ {all_responses['executor'][0]}
1524
+
1525
+ #### 8️⃣ 실행 계획 평가 (평가자 AI)
1526
+ {all_responses['evaluator'][1]}
1527
+
1528
+ #### 9️⃣ 최종 지시 (감독자 AI)
1529
+ {all_responses['supervisor'][3]}
1530
 
1531
  </details>
1532
 
1533
  ---
1534
+ *이 보고서는 5개 AI의 협력적 프로세스를 통해 최적화된 실용적 해결책을 제공합니다.*
1535
+ *프로세스: 감독 → 창조 → 감독 → 조사 → 평가 → 감독 → 실행 → 평가 → 감독 → 실행*"""
1536
 
 
1537
  internal_history.append((user_query, final_summary))
1538
 
1539
+ # 최종 마크다운 반환
1540
+ yield supervisor_text, creator_text, researcher_text, evaluator_text, executor_text, final_summary
1541
 
1542
  except Exception as e:
1543
  error_msg = f"❌ 처리 중 오류: {str(e)}"
1544
+ yield "", "", "", "", "", error_msg
1545
 
1546
  def clear_all():
1547
  """모든 내용 초기화"""
1548
  global internal_history
1549
  internal_history = []
1550
+ return "", "", "", "", "", "🔄 초기화되었습니다."
1551
 
1552
  # Gradio 인터페이스
1553
  css = """
 
1556
  }
1557
  .supervisor-box textarea {
1558
  border-left: 4px solid #667eea !important;
1559
+ background-color: #f3f4f6 !important;
1560
+ }
1561
+ .creator-box textarea {
1562
+ border-left: 4px solid #f59e0b !important;
1563
+ background-color: #fffbeb !important;
1564
  }
1565
  .researcher-box textarea {
1566
  border-left: 4px solid #10b981 !important;
1567
+ background-color: #ecfdf5 !important;
1568
+ }
1569
+ .evaluator-box textarea {
1570
+ border-left: 4px solid #ef4444 !important;
1571
+ background-color: #fef2f2 !important;
1572
  }
1573
  .executor-box textarea {
1574
  border-left: 4px solid #764ba2 !important;
1575
+ background-color: #faf5ff !important;
1576
  }
1577
  """
1578
 
1579
+ with gr.Blocks(title="최적화된 협력적 LLM 시스템", theme=gr.themes.Soft(), css=css) as app:
1580
  gr.Markdown(
1581
+ """
1582
+ # 🚀 최적화된 최고의 실용적 문제 해결자
1583
+ ### 5개 AI의 협력적 프로세스: 감독 → 창조 → 감독 → 조사 → 평가 → 감독 → 실행 → 평가 → 감독 → 실행
1584
  """
1585
  )
1586
 
 
1588
  with gr.Row():
1589
  with gr.Column():
1590
  gr.Markdown("""
1591
+ ## 🎯 향상된 기능
1592
+ - **창조자 AI**: 혁신적이고 파괴적인 아이디어 생성
1593
+ - **평가자 AI**: 객관적이고 비판적인 검증 및 평가
1594
+ - **강화된 프로세스**: 11단계 협력적 문제 해결
1595
+ - **실용성 극대화**: 즉시 실행 가능한 솔루션 제공
 
1596
  """)
1597
 
1598
  user_input = gr.Textbox(
1599
  label="질문 입력",
1600
+ placeholder="예: 우리 회사의 고객 만족도를 획기적으로 향상시킬 수 있는 혁신적인 방법은?",
1601
  lines=3
1602
  )
1603
 
 
1612
  max_lines=1
1613
  )
1614
 
1615
+ # 최종 결과 (상단에 크게 표시)
1616
  with gr.Row():
1617
  with gr.Column():
1618
+ with gr.Accordion("📊 최종 실행 솔루션", open=True):
1619
  final_output = gr.Markdown(
1620
+ value="*질문을 입력하면 최종 솔루션이 여기에 표시됩니다.*"
1621
  )
1622
 
1623
+ # AI 출력들 - 2줄로 배치
1624
+ # 첫 번째 줄: 감독자, 창조자, 조사자
1625
  with gr.Row():
 
1626
  with gr.Column():
1627
+ gr.Markdown("### 🧠 감독자 AI (전략적 지휘)")
1628
  supervisor_output = gr.Textbox(
1629
  label="",
1630
+ lines=15,
1631
+ max_lines=20,
1632
  interactive=False,
1633
  elem_classes=["supervisor-box"]
1634
  )
1635
 
 
1636
  with gr.Column():
1637
+ gr.Markdown("### 💡 창조자 AI (혁신적 아이디어)")
1638
+ creator_output = gr.Textbox(
1639
+ label="",
1640
+ lines=15,
1641
+ max_lines=20,
1642
+ interactive=False,
1643
+ elem_classes=["creator-box"]
1644
+ )
1645
+
1646
+ with gr.Column():
1647
+ gr.Markdown("### 🔍 조사자 AI (정보 수집)")
1648
  researcher_output = gr.Textbox(
1649
  label="",
1650
+ lines=15,
1651
+ max_lines=20,
1652
  interactive=False,
1653
  elem_classes=["researcher-box"]
1654
  )
1655
+
1656
+ # 두 번째 줄: 평가자, 실행자
1657
+ with gr.Row():
1658
+ with gr.Column():
1659
+ gr.Markdown("### ⚖️ 평가자 AI (객관적 평가)")
1660
+ evaluator_output = gr.Textbox(
1661
+ label="",
1662
+ lines=15,
1663
+ max_lines=20,
1664
+ interactive=False,
1665
+ elem_classes=["evaluator-box"]
1666
+ )
1667
 
 
1668
  with gr.Column():
1669
+ gr.Markdown("### 🔧 실행자 AI (실용적 구현)")
1670
  executor_output = gr.Textbox(
1671
  label="",
1672
+ lines=15,
1673
+ max_lines=20,
1674
  interactive=False,
1675
  elem_classes=["executor-box"]
1676
  )
1677
 
1678
+ # 프로세스 다이어그램
1679
+ gr.Markdown("""
1680
+ ---
1681
+ ### 🔄 협업 프로세스 흐름도
1682
+ ```
1683
+ 사용자 질문
1684
+
1685
+ [1] 감독자 AI (초기 분석)
1686
+
1687
+ [2] 창조자 AI (혁신 아이디어)
1688
+
1689
+ [3] 감독자 AI (아이디어 검토)
1690
+
1691
+ [4] 조사자 AI (웹 검색 & 정리)
1692
+
1693
+ [5] 평가자 AI (조사 결과 평가)
1694
+
1695
+ [6] 감독자 AI (��행 지시)
1696
+
1697
+ [7] 실행자 AI (초기 계획)
1698
+
1699
+ [8] 평가자 AI (계획 평가)
1700
+
1701
+ [9] 감독자 AI (최종 지시)
1702
+
1703
+ [10] 실행자 AI (최종 솔루션)
1704
+
1705
+ 최적화된 실용적 해결책
1706
+ ```
1707
+ """)
1708
+
1709
  # 예제
1710
  gr.Examples(
1711
  examples=[
1712
+ "우리 회사의 고객 만족도를 획기적으로 향상시킬 수 있는 혁신적인 방법은?",
1713
+ "원격 근무 환경에서 생산성을 2배로 높이는 구체적인 전략은?",
1714
+ "스타트업이 6개월 내에 수익을 3배 늘릴 수 있는 실행 가능한 방법은?",
1715
+ "기존 제품을 완전히 혁신하여 시장을 선도할 수 있는 아이디어는?",
1716
+ "AI를 활용해 운영 비용을 50% 절감하는 실질적인 방안은?"
1717
  ],
1718
  inputs=user_input,
1719
  label="💡 예제 질문"
 
1723
  submit_btn.click(
1724
  fn=process_query_streaming,
1725
  inputs=[user_input],
1726
+ outputs=[supervisor_output, creator_output, researcher_output, evaluator_output, executor_output, final_output]
1727
  ).then(
1728
  fn=lambda: "",
1729
  outputs=[user_input]
 
1732
  user_input.submit(
1733
  fn=process_query_streaming,
1734
  inputs=[user_input],
1735
+ outputs=[supervisor_output, creator_output, researcher_output, evaluator_output, executor_output, final_output]
1736
  ).then(
1737
  fn=lambda: "",
1738
  outputs=[user_input]
 
1740
 
1741
  clear_btn.click(
1742
  fn=clear_all,
1743
+ outputs=[supervisor_output, creator_output, researcher_output, evaluator_output, executor_output, status_text]
1744
  )
 
1745
 
1746
  if __name__ == "__main__":
1747
+ app.queue()
1748
  app.launch(
1749
  server_name="0.0.0.0",
1750
  server_port=7860,