프롬프트 버전 관리 시스템 도입기
배경
사내 AI 기능이 20개를 넘어가면서 프롬프트 관리가 문제가 되었다. 코드 리뷰 때마다 "이전 버전이 더 나았던 것 같은데"라는 말이 나왔지만, Git diff로는 미묘한 차이를 비교하기 어려웠다.
요구사항
- A/B 테스트 결과와 프롬프트 버전 연결
- 성능 지표(응답 품질, 토큰 사용량) 자동 기록
- 롤백 시 관련 메트릭 함께 표시
- 프롬프트별 변경 이력 시각화
구현
interface PromptVersion {
id: string;
promptId: string;
content: string;
version: number;
metrics: {
avgTokens: number;
successRate: number;
avgLatency: number;
};
createdBy: string;
createdAt: Date;
deployedAt?: Date;
}
class PromptVersionControl {
async createVersion(promptId: string, content: string) {
const latest = await this.getLatestVersion(promptId);
const version = (latest?.version || 0) + 1;
return prisma.promptVersion.create({
data: { promptId, content, version, createdBy: getCurrentUser() }
});
}
async compareVersions(v1: string, v2: string) {
const [version1, version2] = await Promise.all([
this.getVersion(v1),
this.getVersion(v2)
]);
return {
contentDiff: diffLines(version1.content, version2.content),
metrics: this.compareMetrics(version1.metrics, version2.metrics)
};
}
}
메트릭 수집
AI 응답마다 자동으로 메트릭을 수집하도록 미들웨어를 추가했다.
async function aiMiddleware(req: Request, res: Response, next: Next) {
const startTime = Date.now();
const promptVersion = await getActivePromptVersion(req.params.promptId);
res.on('finish', () => {
recordMetrics({
versionId: promptVersion.id,
tokens: res.locals.tokenCount,
latency: Date.now() - startTime,
success: res.statusCode === 200
});
});
next();
}
결과
- 프롬프트 변경 시 이전 버전 대비 성능 변화를 즉시 확인 가능
- 문제 발생 시 3분 내 롤백 (이전엔 30분+)
- A/B 테스트 결과 기반 의사결정으로 주관적 논쟁 감소
개선점
프롬프트 자체를 코드와 분리해 non-tech 팀원도 수정 가능하도록 UI를 추가할 예정이다. 현재는 개발자만 접근 가능해서 병목이 생기고 있다.