거버넌스·자동화
회귀 감지 연동
Evaluation Framework와 연결
AIDLC Evaluation Framework에서 정의한 Golden Dataset을 사용해 신버전 배포 전 회귀를 감지한다.
Workflow:
Baseline vs New 통계 비교
메트릭:
- 정확도: Exact Match, F1, BLEU(번역)
- 품질: LLM-as-Judge 점수(0-1)
- Latency: P50, P99
- 비용: 토큰 사용량
통계 검정:
from scipy.stats import ttest_ind
# baseline: 구버전 100개 샘플의 Exact Match 점수
baseline_scores = [...] # 예: 평균 0.82
# new: 신버전 100개 샘플
new_scores = [...] # 예: 평균 0.85
t_stat, p_value = ttest_ind(baseline_scores, new_scores)
if p_value < 0.05 and mean(new_scores) > mean(baseline_scores):
print("신버전이 통계적으로 유의하게 우수 → 배포 승인")
elif mean(new_scores) < mean(baseline_scores) * 0.95:
print("신버전이 5% 이상 저하 → 롤백")
else:
print("유의미한 차이 없음 → 추가 검증 필요")
자동 롤백 트리거
조건:
- 정확도 절대 하락:
new_exact_match < baseline_exact_match - 0.05 - Latency 회귀:
new_p99_latency > baseline_p99_latency * 1.5 - 에러율 증가:
new_error_rate > 5% - 사용자 피드백:
thumbs_down_rate > 20%
구현:
# Prometheus Alert
- alert: PromptRegressionDetected
expr: |
langfuse_eval_exact_match{prompt_version="6"}
< langfuse_eval_exact_match{prompt_version="5"} - 0.05
for: 30m
annotations:
summary: "프롬프트 v6 정확도 저하 → 자동 롤백"
# Webhook → Lambda → Langfuse API (production 라벨을 v5로 되돌림)
운영 거버넌스
변경 승인 워크플로
AIDLC Checkpoints 적용:
| 단계 | Checkpoint | 승인자 | 기준 |
|---|---|---|---|
| 1. 프롬프트 변경 제안 | [Answer]: | 도메인 전문가 | 의도와 리스크 평가 명시 |
| 2. Staging 평가 결과 | 회귀 감지 통과 | Lead Engineer | Exact Match ≥ 베이스라인 - 2% |
| 3. Canary 5% 배포 | 실시간 메트릭 검토 | SRE | 에러율 < 1%, P99 latency ≤ 1.2x |
| 4. Prod 100% 전환 | 최종 승인 | Product Owner | 비즈니스 메트릭 개선 확인 |
승인 자동화(GitHub Actions + Langfuse):
# .github/workflows/prompt-approval.yml
name: Prompt Approval
on:
pull_request:
paths:
- 'prompts/**'
jobs:
evaluate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run Golden Dataset Eval
run: |
python scripts/eval_prompt.py --new-version ${{ github.sha }}
- name: Post Results
uses: actions/github-script@v7
with:
script: |
const results = require('./eval_results.json');
if (results.exact_match < results.baseline - 0.02) {
core.setFailed('회귀 감지: Exact Match 저하');
}
github.rest.issues.createComment({
issue_number: context.issue.number,
body: `### 평가 결과\n- Baseline: ${results.baseline}\n- New: ${results.exact_match}\n- 판정: ${results.pass ? '✅ 승인' : '❌ 반려'}`
});
변경 기록(Audit Log)
Langfuse: 모든 프롬프트 변경은 자동으로 버전 히스토리에 기록됨. 추가로:
# 변경 시 메타데이터 기록
client.create_prompt(
name="financial-analysis",
prompt="...",
labels=["production"],
metadata={
"changed_by": "jane@example.com",
"jira_ticket": "AIDLC-1234",
"approval": "approved_by_john_2026-04-17",
"rollback_plan": "revert to v5 if error_rate > 5%"
}
)
AWS CloudTrail: Bedrock Prompt Management 사용 시
{
"eventName": "UpdatePromptAlias",
"userIdentity": {
"principalId": "AIDAI...",
"arn": "arn:aws:iam::123456789012:user/jane"
},
"requestParameters": {
"promptIdentifier": "fin-analysis",
"aliasIdentifier": "PROD",
"promptVersion": "6"
},
"eventTime": "2026-04-17T14:30:00Z"
}
롤백 계획 필수
모든 변경 요청에 Rollback Plan 첨부:
## Rollback Plan
**Trigger**: 배포 후 30분 이내 에러율 > 3%
**Steps**:
1. Langfuse에서 `production` 라벨을 v5로 되돌림
2. Gateway 재시작(pod restart 불필요, Langfuse SDK는 30초마다 폴링)
3. Slack #incident 채널에 알림
4. PostMortem 작성(원인, 재발 방지책)
**Validation**:
- 에러율 < 1% 복구 확인
- 5분간 모니터링 후 incident close
감사 증빙
금융권, 의료 등에서 요구하는 감사 증빙:
| 항목 | 기록 위치 | 보관 기간 |
|---|---|---|
| 프롬프트 버전 | Langfuse DB (S3+KMS) | 7년 |
| 모델 버전 | 추론 로그(trace) | 7년 |
| 승인 기록 | GitHub PR + JIRA | 7년 |
| 평가 결과 | Braintrust/Langfuse Eval | 3년 |
| 사용자 세션 | Langfuse Trace | 1년 |
| 롤백 이벤트 | CloudTrail + PagerDuty | 7년 |
예시 쿼리(감사관 요청 대응):
-- "2026년 4월 17일 14시에 프롬프트 v6을 누가 배포했나?"
SELECT version, metadata->>'changed_by', metadata->>'jira_ticket', created_at
FROM langfuse_prompts
WHERE name = 'financial-analysis'
AND created_at BETWEEN '2026-04-17 14:00:00' AND '2026-04-17 15:00:00';