본문으로 건너뛰기

프롬프트·모델 레지스트리

왜 프롬프트 레지스트리가 필요한가

프롬프트와 모델 버전을 코드처럼 관리하는 중앙 저장소. 다음 문제를 해결한다:

  • 버전 추적: "어제 잘 됐는데 오늘 이상해요" → 어떤 프롬프트가 변경되었는지 추적
  • 환경별 배포: staging/canary/production 환경마다 다른 버전 사용
  • 롤백: 문제 발생 시 이전 버전으로 즉시 복구
  • 감사 증빙: 금융·의료 규제 대응을 위한 변경 이력 보관

Langfuse Prompt

Langfuse는 self-hosted 가능한 LLMOps 플랫폼이다. 프롬프트 레지스트리 기능:

  • 버전 관리: 매 변경마다 자동 버전 증가(v1, v2, ...)
  • 라벨: production, staging, canary로 환경별 라벨 부여
  • Rollout 관리: 특정 라벨을 특정 버전에 붙이면 애플리케이션은 라벨만 참조(get_prompt("financial-analysis", label="production"))
  • Diff 보기: 버전 간 변경 내용 시각화
  • Access Log: 어떤 세션이 어떤 프롬프트 버전을 사용했는지 추적
from langfuse import Langfuse

client = Langfuse()

# 프롬프트 버전 조회
prompt = client.get_prompt("financial-analysis", label="production")
print(prompt.version) # 예: 5
print(prompt.prompt) # 실제 텍스트

# 새 버전 배포
client.create_prompt(
name="financial-analysis",
prompt="당신은 보수적 투자 자문가입니다...",
labels=["staging"] # 먼저 staging에 배포
)
# 검증 후
client.update_prompt_label("financial-analysis", version=6, label="production")

장점:

  • Self-hosted, RBAC, S3+KMS 백엔드 가능
  • Observability와 통합(trace에서 프롬프트 버전 자동 기록)

단점:

  • Python SDK 중심(TypeScript SDK는 있지만 기능 제한적)
  • UI는 단순(diff는 보이지만 승인 워크플로 없음)

PromptLayer

PromptLayer는 SaaS 프롬프트 레지스트리다.

  • 버전 태깅: Git 스타일 태그(v1.0, v1.1-alpha)
  • Visual Diff: 두 버전 간 단어 단위 변경 강조
  • A/B 실험: 두 버전을 동시 배포하고 성능 비교
  • Analytics: 버전별 latency, 토큰 사용, 에러율 대시보드

장점:

  • 설치 없이 즉시 사용
  • 팀 협업 기능(댓글, 승인 워크플로)

단점:

  • SaaS 전용(온프레미스 불가)
  • 데이터 주권 이슈(프롬프트가 외부 서버에 저장)

Braintrust Prompts

Braintrust는 평가(Evaluation) 플랫폼이지만 프롬프트 관리 기능도 제공한다.

  • Playground: 프롬프트 작성 → 즉시 테스트 세트로 평가
  • Versioning: 자동 버전 증가 + commit message
  • Datasets 연동: 프롬프트 변경 시 자동으로 evaluation run 트리거
  • Experimentation: 두 프롬프트 버전을 side-by-side 비교

장점:

  • 평가와 프롬프트 관리가 하나의 플랫폼
  • 매 변경마다 자동으로 품질 회귀 체크

단점:

  • 런타임 배포보다는 개발·테스트 단계에 강점
  • Production rollout 기능은 약함(직접 구현 필요)

AWS Bedrock Prompt Management

AWS Bedrock는 Prompt Management 기능을 제공한다(2024년 11월 GA).

  • Prompt 버전: CreatePromptVersion API로 immutable 버전 생성
  • Alias: PROD, STAGING 같은 alias를 버전에 연결
  • IAM 통합: 특정 버전만 사용 가능하도록 정책 설정
  • CloudTrail: 누가 언제 어떤 버전을 배포했는지 감사 로그
import boto3

bedrock = boto3.client('bedrock-agent')

# 새 버전 생성
response = bedrock.create_prompt_version(
promptIdentifier='arn:aws:bedrock:us-east-1:123456789012:prompt/fin-analysis',
description='보수적 투자 자문 스타일로 변경'
)
version_id = response['version']

# 프로덕션 alias 업데이트
bedrock.update_prompt_alias(
promptIdentifier='arn:aws:bedrock:us-east-1:123456789012:prompt/fin-analysis',
aliasIdentifier='PROD',
promptVersion=version_id
)

장점:

  • AWS 네이티브, IAM/CloudTrail/KMS 통합
  • Lambda, Step Functions에서 직접 참조 가능

단점:

  • Bedrock 모델 사용 전제(Claude, Llama 등)
  • self-hosted LLM(vLLM, llm-d)과는 별도 구성 필요

비교표

기능LangfusePromptLayerBraintrustBedrock PM
배포 방식Self-hostedSaaSSaaSAWS Managed
버전 관리
라벨/Alias
Visual Diff기본
승인 워크플로❌(IAM으로 구현)
A/B 실험수동수동
자동 평가 연동가능(trace 기반)가능(Lambda)
데이터 주권✅(리전 내)
AIDLC 적합성⭐ 높음중간(SaaS)높음(Eval 중심)높음(Bedrock 전용)

AIDLC 권장: Langfuse(self-hosted 요구사항) 또는 AWS Bedrock PM(Bedrock 사용 시). PromptLayer/Braintrust는 SaaS 허용 시.


구축 가이드

Langfuse Self-hosted 배포

# langfuse-values.yaml (Helm)
replicaCount: 2

postgresql:
enabled: true
auth:
password: "secure-password"

env:
- name: DATABASE_URL
value: "postgresql://user:pass@postgres:5432/langfuse"
- name: NEXTAUTH_SECRET
valueFrom:
secretKeyRef:
name: langfuse-secrets
key: nextauth-secret
- name: S3_BUCKET_NAME
value: "langfuse-prompts"
- name: S3_ENDPOINT
value: "https://s3.us-east-1.amazonaws.com"

resources:
requests:
cpu: "500m"
memory: "1Gi"
limits:
cpu: "2000m"
memory: "4Gi"
helm repo add langfuse https://langfuse.github.io/langfuse-k8s
helm install langfuse langfuse/langfuse -f langfuse-values.yaml

Bedrock Prompt Management 설정

import boto3

bedrock = boto3.client('bedrock-agent', region_name='us-east-1')

# 1. 프롬프트 생성
prompt_response = bedrock.create_prompt(
name='financial-analysis',
description='금융 분석 전문가 프롬프트',
variants=[{
'name': 'default',
'templateType': 'TEXT',
'templateConfiguration': {
'text': {
'text': '당신은 금융 분석 전문가입니다...'
}
}
}]
)
prompt_arn = prompt_response['arn']

# 2. 버전 생성
version_response = bedrock.create_prompt_version(
promptIdentifier=prompt_arn,
description='v1 초기 버전'
)

# 3. PROD alias 생성
bedrock.create_prompt_alias(
promptIdentifier=prompt_arn,
name='PROD',
promptVersion='1'
)

참고 자료


다음 단계

프롬프트 레지스트리를 구축했다면:

  1. 배포 전략 — Canary/Shadow/A-B 전략 선택 및 구현
  2. 거버넌스·자동화 — 자동 회귀 감지 및 롤백 체계 구축
  3. Evaluation Framework — Golden Dataset 기반 평가 연동