docs: 프롬프트 동적 관리 계획 문서 업데이트 - 구현 시 주의사항 추가

- DB 스키마: scope_id NULL 처리 및 병합 로직 명확화
- 캐싱 전략: Redis 선택 사항, 메모리 캐시로 시작 가능
- 변수 치환: 런타임 치환 방식 명시
- 폴백 전략: DB 조회 실패 시 하드코딩 프롬프트 사용 (필수)
- 웹 검색 기반 재검토 결과 반영
This commit is contained in:
Claude-51124 2025-12-25 22:29:24 +09:00
parent 71ff134b32
commit 216c1cf361

View File

@ -49,6 +49,8 @@ CREATE TABLE prompt_templates (
### 3. 병합 로직
Global → Robeing → User 순서로 조회, 상위에서 정의되면 하위가 상속, 하위에서 오버라이드 시 상위 우선순위 적용.
- 각 레벨별 개별 쿼리 후 애플리케이션에서 병합 (복잡한 JOIN 대신)
- Global scope는 scope_id=NULL로 조회 (PostgreSQL NULL은 UNIQUE 제약에서 제외)
## 관리 포인트 (10가지)
@ -79,12 +81,16 @@ Global → Robeing → User 순서로 조회, 상위에서 정의되면 하위
### Phase 2: 핵심 프롬프트 DB화
- 시스템 프롬프트 (gemini_handler, openai_handler)
- 작업 타입별 프롬프트 (chat, extract, calendar_confirm)
- 폴백 로직 (DB 조회 실패 시 하드코딩 사용)
- 폴백 로직 (DB 조회 실패 시 하드코딩 사용) - 필수
- DB 조회 실패/타임아웃 시 기존 _get_system_prompt() 메서드 사용
- 점진적 마이그레이션 가능, 안전한 전환 보장
### Phase 3: 개인화 및 동적 프롬프트
- 사용자별 프롬프트 오버라이드
- 감정 기반 동적 프롬프트 조합
- 변수 치환 시스템 ({current_time}, {emotion_labels} 등)
- DB 저장 시 변수 플레이스홀더 유지
- 조회 후 str.format() 또는 템플릿 엔진으로 런타임 치환
### Phase 4: A/B 테스트 및 모니터링
- 프롬프트 버전 관리
@ -96,6 +102,26 @@ Global → Robeing → User 순서로 조회, 상위에서 정의되면 하위
- Redis/Memory 캐시 (키: `prompt:{scope}:{type}:{version}`)
- TTL 1시간, DB 변경 시 무효화 (웹훅/이벤트)
- 캐시 히트율 99%+ 목표 (테스트 결과 99.8% 달성)
- Redis는 선택 사항: 메모리 캐시(ThreadDocCache 패턴)로 시작, 필요 시 Redis 전환
- Redis 없이도 동작하도록 폴백 로직 구현
## 구현 시 주의사항
### DB 스키마
- scope_id NULL 처리: Global scope는 scope_id=NULL로 조회 (PostgreSQL NULL은 UNIQUE 제약에서 제외되어 문제 없음)
- 각 레벨별 개별 쿼리 후 애플리케이션에서 병합 권장 (복잡한 JOIN 대신)
### 캐싱
- Redis는 선택 사항, 메모리 캐시로 시작 가능
- Redis 없이도 동작하도록 폴백 로직 구현 필수
### 변수 치환
- 템플릿 변수({current_time}, {emotion_labels})는 DB 저장 시 플레이스홀더로 유지
- 조회 후 런타임에 str.format() 또는 템플릿 엔진으로 치환
### 폴백 전략
- DB 조회 실패/타임아웃 시 하드코딩 프롬프트 사용 (기존 코드 유지)
- 점진적 마이그레이션으로 안전한 전환 보장
## 참고 문서