7.0 KiB
7.0 KiB
프롬프트 동적 관리 시스템 계획
날짜: 2025-12-25
최종 보강: 2026-03-03
작성자: happybell80, Claude
상태: 미구현 (실행 계획 보강)
원칙 참조:
book/300_architecture/311_백엔드_구조_원칙.md(계층 분리, DB state 경유)book/300_architecture/312_문서_작성_원칙.mdbook/300_architecture/315_테스트_원칙.md(TDD)book/300_architecture/313_Gemini_프롬프트_설계_원칙.md
1. 목표
하드코딩 프롬프트를 DB 정책으로 전환해 다음을 달성한다.
- 무중단 프롬프트 수정
- 사용자/로빙/작업별 개인화
- A/B 실험 기반 자동 개선
- 안전한 자동 승격 + 즉시 롤백
2. 현재 상태 요약 (2026-03-03 기준)
- rb8001 코드 하드코딩 프롬프트 템플릿: 약 40개
- 사용자 핵심 UX 경로 프롬프트 유형: 약 8~10종
- chat(감정 반영), summarize, analyze, extract, calendar_confirm 등
- 현재 문제:
- 프롬프트 수정 시 코드 배포 필요
- 버전/실험/성과 추적이 일관되지 않음
- 회귀 시 신속 롤백이 어려움
3. 범위
포함
rb8001LLM 경로의 시스템/작업별 프롬프트- 감정 기반 동적 규칙(톤/길이/금지 규칙)
- A/B 실험, 메트릭 수집, 자동 승격 정책
제외
- 모델 자체 교체/튜닝
- 감정 분류기 모델 재학습
- 인프라 토폴로지 변경
4. 데이터 모델 (최소 스키마)
4.1 prompt_templates
- purpose: 프롬프트 논리 단위(식별자)
- columns:
id,template_key(unique)prompt_type(system,chat,extract,calendar_confirm, ...)scope_level(global,robeing,task,user)scope_id(nullable)is_enabledcreated_at,updated_at
4.2 prompt_versions
- purpose: 템플릿 버전 이력
- columns:
id,template_id,versioncontent(TEXT/JSONB)variables_schema(JSONB)status(draft,candidate,active,retired)created_by,change_reason,created_at
4.3 prompt_experiments
- purpose: 실험 라우팅
- columns:
id,experiment_key,template_keycontrol_version_id,treatment_version_idtraffic_ratio(예: 90:10)guardrail_config(JSONB)status(running,paused,completed)started_at,ended_at
4.4 prompt_events
- purpose: 요청 단위 결과 로그
- columns:
id,request_id,template_key,version_id,variantuser_id,robeing_id,task_typelatency_ms,tokens_in,tokens_outfeedback_signal(up/down/reask/abandon)created_at
4.5 prompt_metrics_daily
- purpose: 일별 집계
- columns:
date,template_key,version_id,variantsuccess_rate,reask_rate,fallback_rateavg_latency_ms,avg_tokens,feedback_score
5. 런타임 병합 규칙
5.1 해석 순서 (낮음 → 높음 우선순위)
- Global
- Robeing
- Task
- User
- Runtime modifier(감정/리스크 규칙)
5.2 병합 원칙
- 문자열 덮어쓰기 금지, 섹션 단위 병합(
role,constraints,output_format) - 금지 규칙(예: 민감 라벨 직접 노출 금지)은 항상 최종 승자
- 해석 실패 시 즉시 fallback (최근 stable active 버전)
6. 자동 개선 정책
6.1 실험 지표
- 1차 품질 지표:
reask_rate(낮을수록 좋음)negative_feedback_rate(낮을수록 좋음)task_success_rate(높을수록 좋음)
- 2차 비용/성능 지표:
avg_latency_msavg_tokensfallback_rate
6.2 자동 승격 조건(예시)
- 최소 샘플 수 충족 (예: n >= 500)
- treatment가 control 대비:
reask_rate10% 이상 개선negative_feedback_rate악화 없음latency_ms15% 이상 악화 없음
- guardrail 위반 0건
6.3 자동 롤백 조건
- 15분 윈도우 기준
fallback_rate급증 negative_feedback_rate임계치 초과- 5xx/파싱 실패 연쇄 발생
6.4 운영 모드
- 기본: 자동 제안 + 사람 승인 후 승격
- 완전 자동 승격은 초기 1개월 관찰 후 제한 적용
7. 구현 단계
Phase 1: 인벤토리/스키마/TDD
- 하드코딩 프롬프트 인벤토리 확정(파일/함수/용도)
prompt_templates,prompt_versions생성- Repository + Service 뼈대 구현
- 테스트:
- 스키마 생성/마이그레이션
- 버전 조회/활성 버전 선택
Phase 2: 읽기 경로 전환 (safe fallback)
llm_service.py,gemini_handler.py에 DB 조회 연결- 기존 하드코딩은 fallback로 유지
- 테스트:
- DB 성공 시 DB 프롬프트 사용
- DB 실패 시 하드코딩 fallback
Phase 3: 병합/개인화/감정 modifier
- scope 병합 및 변수 치환
- 감정/리스크 modifier를 DB 규칙으로 부분 이관
- 테스트:
- 병합 우선순위
- 금지 규칙 우선 적용
Phase 4: 실험/메트릭/자동 승격
prompt_experiments,prompt_events,prompt_metrics_daily구현- 실험 라우터 + 승격/롤백 워커 구현
- 테스트:
- 라우팅 결정 일관성
- guardrail 위반 시 자동 중단/롤백
8. 수용 기준 (Definition of Done)
- 하드코딩 의존 프롬프트 80% 이상 DB 전환
- 핵심 UX 경로(chat/summarize/extract/calendar_confirm) DB 관리
- 실험 대시보드에서 버전별 지표 확인 가능
- 자동 롤백 시나리오 리허설 1회 이상 통과
- 장애 시 서비스 무중단 fallback 확인
9. 위험과 대응
- 위험: 잘못된 프롬프트 배포로 UX 악화
- 대응: candidate → canary → full 단계적 승격
- 위험: 과도한 개인화로 톤 불안정
- 대응: immutable safety constraints 최종 적용
- 위험: 지표 왜곡/샘플 편향
- 대응: 최소 샘플 수 + 시간/사용자 분산 조건
10. 체크리스트 (누락 방지)
설계
- 실제 하드코딩 인벤토리 목록화 완료
- scope 우선순위 충돌 규칙 정의
- 안전 제약(금지 규칙) 최종 우선순위 명시
구현
- Repository/DDL/Service 동시 반영
- fallback 경로(코드/DB) 모두 테스트
- 실험 라우팅 deterministic 보장
운영
- 승격/롤백 가드레일 임계값 합의
- 대시보드/알람 연결
- 장애 훈련(롤백 drill) 수행
11. 2회 점검 기록 (2026-03-03)
1차 점검에서 추가한 누락 항목
- 자동 승격 조건(샘플 수/가드레일)
- 자동 롤백 조건
- 이벤트/메트릭 테이블 분리
- 현재 하드코딩 인벤토리 규모 반영
2차 점검에서 확정한 항목
- scope 병합 우선순위 명시
- immutable safety constraints 최종 우선 적용 명시
- DoD/운영 체크리스트/리허설 항목 추가
참고 문서
book/300_architecture/311_백엔드_구조_원칙.mdbook/300_architecture/312_문서_작성_원칙.mdbook/300_architecture/315_테스트_원칙.mdbook/300_architecture/313_Gemini_프롬프트_설계_원칙.mdjourney/troubleshooting/250806_happybell80_동적프롬프트구현.md