LLM 프롬프트 엔지니어링 고급 기법: 실전에서 바로 쓰는 프롬프트 패턴
Chain of Thought, Few-Shot Learning, Self-Consistency 등 실무에서 즉시 활용 가능한 고급 프롬프트 엔지니어링 기법을 코드 예제와 함께 소개합니다.
AI 기술이 우리 삶의 모든 영역에 스며들면서, 윤리적 AI 개발은 선택이 아닌 필수가 되었습니다.
실제 사례들:
이러한 문제들은 기술적 결함이 아니라 윤리적 설계 부재에서 발생합니다.
AI는 인종, 성별, 나이 등에 따라 차별해서는 안 됩니다.
구현 방법:
from fairlearn.metrics import demographic_parity_difference
from sklearn.metrics import accuracy_score
# 그룹별 공정성 측정
dpd = demographic_parity_difference(
y_true=y_test,
y_pred=predictions,
sensitive_features=sensitive_attribute
)
print(f"Demographic Parity Difference: {dpd}")
# 0에 가까울수록 공정함
실전 체크리스트:
사용자는 AI가 어떻게 결정을 내리는지 이해할 수 있어야 합니다.
설명 가능한 AI (XAI):
import shap
# SHAP으로 예측 설명
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_test)
# 시각화
shap.summary_plot(shap_values, X_test, plot_type="bar")
# 개별 예측 설명
shap.force_plot(
explainer.expected_value,
shap_values[0],
X_test.iloc[0]
)
문서화 필수 항목:
## 모델 카드 (Model Card)
### 모델 정보
- 이름: 신용 평가 모델 v2.1
- 목적: 대출 신청자 신용도 평가
- 알고리즘: XGBoost
### 학습 데이터
- 출처: 2020-2024 대출 신청 데이터
- 크기: 100만 건
- 특성: 연령, 소득, 직업, 신용 이력 등 25개
### 성능
- 전체 정확도: 87%
- 그룹별 정확도:
- 남성: 88%
- 여성: 86%
### 한계점
- 2020년 이전 데이터 부족
- 자영업자 데이터 과소 대표
개인정보를 보호하면서 AI를 개발해야 합니다.
차등 프라이버시 (Differential Privacy):
from diffprivlib.models import GaussianNB
# 차등 프라이버시가 적용된 모델
model = GaussianNB(epsilon=1.0)
model.fit(X_train, y_train)
# epsilon이 작을수록 프라이버시 강화 (정확도는 낮아짐)
데이터 최소화:
# 나쁜 예: 불필요한 데이터 수집
user_data = {
'name': '홍길동',
'age': 30,
'gender': '남',
'address': '서울시...',
'phone': '010-1234-5678',
'email': 'hong@example.com',
# 추천 시스템에 불필요한 정보들
}
# 좋은 예: 필요한 데이터만 수집
user_data = {
'user_id': 'hashed_id', # 익명화
'age_range': '30-40', # 범주화
'purchase_history': [...],
# 추천에 필요한 최소 정보
}
AI가 의도하지 않은 해로운 결과를 초래하지 않도록 해야 합니다.
Adversarial Attack 방어:
from art.attacks.evasion import FastGradientMethod
from art.estimators.classification import KerasClassifier
from art.defences.trainer import AdversarialTrainer
# 적대적 공격 시뮬레이션
classifier = KerasClassifier(model=model)
attack = FastGradientMethod(estimator=classifier, eps=0.3)
x_test_adv = attack.generate(x=x_test)
# 방어 학습
trainer = AdversarialTrainer(classifier, attack)
trainer.fit(x_train, y_train, nb_epochs=10)
모니터링 시스템:
class AIMonitor:
def __init__(self, model):
self.model = model
self.predictions_log = []
def predict_with_monitoring(self, X):
predictions = self.model.predict(X)
# 이상 탐지
confidence = self.model.predict_proba(X).max(axis=1)
low_confidence = confidence < 0.7
if low_confidence.any():
self.alert(f"낮은 신뢰도 예측 발견: {low_confidence.sum()}건")
# 로깅
self.log_predictions(X, predictions, confidence)
return predictions
def alert(self, message):
# 슬랙, 이메일 등으로 알림
print(f"⚠️ 알림: {message}")
AI의 결정과 영향에 대해 책임질 수 있어야 합니다.
감사 로그 (Audit Log):
import logging
from datetime import datetime
class AIAuditLogger:
def __init__(self, model_name):
self.logger = logging.getLogger(model_name)
def log_prediction(self, input_data, prediction, user_id=None):
log_entry = {
'timestamp': datetime.now().isoformat(),
'model': self.model_name,
'input': self._anonymize(input_data),
'output': prediction,
'user_id': user_id,
'version': self.model_version
}
self.logger.info(log_entry)
# 데이터베이스에 저장
self.save_to_db(log_entry)
Google의 7가지 AI 원칙:
금지 사항:
6가지 핵심 원칙:
1. **공정성**: 모든 사람을 공정하게 대우
2. **신뢰성과 안전**: 안전하고 신뢰할 수 있게 작동
3. **프라이버시와 보안**: 안전하고 프라이버시 존중
4. **포용성**: 모든 사람에게 권한 부여
5. **투명성**: 사람들이 이해할 수 있도록
6. **책임성**: 사람이 책임
2024년 시행된 세계 최초 AI 포괄 규제:
위험도별 분류:
🔴 금지 (Prohibited)
- 소셜 스코어링
- 실시간 원격 생체인식 (공공장소)
- 무차별 감시
🟠 고위험 (High-Risk)
- 의료 진단
- 신용 평가
- 채용 시스템
→ 엄격한 규제, 인증 필요
🟡 중위험 (Limited Risk)
- 챗봇
→ 투명성 의무
🟢 저위험 (Minimal Risk)
- 추천 시스템
- 스팸 필터
→ 자율 규제
from aif360.datasets import BinaryLabelDataset
from aif360.metrics import BinaryLabelDatasetMetric
# 데이터셋 로드
dataset = BinaryLabelDataset(
df=df,
label_names=['approved'],
protected_attribute_names=['gender']
)
# 공정성 측정
metric = BinaryLabelDatasetMetric(
dataset,
unprivileged_groups=[{'gender': 0}],
privileged_groups=[{'gender': 1}]
)
print(f"Disparate Impact: {metric.disparate_impact()}")
# 1.0에 가까울수록 공정함 (0.8-1.25 권장)
from lime.lime_tabular import LimeTabularExplainer
# LIME으로 설명
explainer = LimeTabularExplainer(
X_train.values,
feature_names=X_train.columns,
class_names=['거절', '승인'],
mode='classification'
)
# 개별 예측 설명
exp = explainer.explain_instance(
X_test.values[0],
model.predict_proba
)
exp.show_in_notebook()
from pysyft import TorchHook
import torch
# Federated Learning으로 프라이버시 보호
hook = TorchHook(torch)
# 데이터는 로컬에 유지, 모델만 공유
alice = sy.VirtualWorker(hook, id="alice")
bob = sy.VirtualWorker(hook, id="bob")
# 분산 학습
for epoch in range(epochs):
for data, target in federated_train_loader:
model.send(data.location)
optimizer.zero_grad()
output = model(data)
loss = criterion(output, target)
loss.backward()
optimizer.step()
model.get()
문제: AI가 남성 지원자를 선호
원인 분석:
# 학습 데이터 분석
print(f"남성 합격률: {df[df['gender']=='M']['hired'].mean():.2%}")
# 출력: 남성 합격률: 65%
print(f"여성 합격률: {df[df['gender']=='F']['hired'].mean():.2%}")
# 출력: 여성 합격률: 35%
# → 과거 데이터 자체가 편향됨
해결 방법:
from sklearn.utils import resample
# 1. 데이터 리샘플링
df_majority = df[df['hired'] == 1]
df_minority = df[df['hired'] == 0]
df_minority_upsampled = resample(
df_minority,
replace=True,
n_samples=len(df_majority),
random_state=42
)
df_balanced = pd.concat([df_majority, df_minority_upsampled])
# 2. 성별 특성 제거
features = [col for col in df.columns if col != 'gender']
# 3. 공정성 제약 추가
from fairlearn.reductions import ExponentiatedGradient, DemographicParity
constraint = DemographicParity()
mitigator = ExponentiatedGradient(base_estimator, constraint)
mitigator.fit(X_train, y_train, sensitive_features=A_train)
요구사항: 투명한 결정, 이의 제기 가능
구현:
class ExplainableLoanModel:
def __init__(self, model):
self.model = model
self.explainer = shap.TreeExplainer(model)
def predict_with_explanation(self, applicant_data):
# 예측
prediction = self.model.predict_proba(applicant_data)[0][1]
decision = "승인" if prediction > 0.5 else "거절"
# 설명 생성
shap_values = self.explainer.shap_values(applicant_data)
# 주요 요인 추출
top_factors = self._get_top_factors(shap_values, applicant_data)
return {
'decision': decision,
'confidence': prediction,
'explanation': top_factors,
'appeal_process': self._get_appeal_info()
}
def _get_top_factors(self, shap_values, data):
"""결정에 가장 영향을 준 요인들"""
feature_importance = list(zip(
data.columns,
shap_values[0]
))
sorted_factors = sorted(
feature_importance,
key=lambda x: abs(x[1]),
reverse=True
)[:5]
return [
f"{name}: {'+' if val > 0 else ''}{val:.2f}"
for name, val in sorted_factors
]
## AI 윤리 위원회
### 구성원
- CTO (의장)
- 데이터 과학자 대표
- 법무팀 대표
- 보안팀 대표
- 외부 윤리 전문가
### 역할
- 신규 AI 프로젝트 윤리 검토
- 정기적인 감사 수행
- 윤리 가이드라인 업데이트
- 사고 대응 및 개선
### 회의
- 월 1회 정기 회의
- 긴급 안건 발생 시 임시 회의
필수 교육 커리큘럼:
# 좋은 예: 윤리 지표를 평가에 포함
performance_score = (
0.4 * model_accuracy +
0.3 * fairness_score +
0.2 * transparency_score +
0.1 * privacy_score
)
규제 강화
기술 발전
사회적 요구
AI 윤리는 더 이상 선택 사항이 아닙니다.
핵심 실천 사항:
시작하기:
# 오늘부터 할 수 있는 것들
1. 현재 모델의 공정성 측정
2. 모델 카드 작성
3. 모니터링 시스템 구축
4. 팀 교육 계획 수립
윤리적 AI는 사회적 책임이자, 장기적으로 더 나은 비즈니스 결과를 가져옵니다. 지금부터 실천하세요! 🚀