30

답변 품질 개선: 신뢰도와 사용성

KG 기반 Q&A

학습 목표

답변 신뢰도를 높이는 기법을 학습한다 할루시네이션 방지 전략을 이해한다 Few-shot 예시로 답변 품질을 향상한다 사용자 피드백 루프를 설계한다

답변 품질 개선

1. 할루시네이션 방지

# KG에 없는 정보에 대한 처리
def safe_answer(kg_results, question):
    if not kg_results:
        return """
        죄송합니다. Knowledge Graph에서 관련 정보를 찾지 못했습니다.

        가능한 원인:
        1. 해당 알람/설비가 시스템에 등록되지 않았습니다
        2. 질문을 다른 형태로 시도해보세요

        정비팀 연락처: 내선 2345
        """

    # KG에서 가져온 정보만 사용하여 답변 생성
    answer = generate_from_kg_only(kg_results)

    # 근거 표시
    answer += "\n\n---\n"
    answer += "이 답변은 Knowledge Graph 데이터를 기반으로 합니다.\n"
    answer += f"참조 노드: {len(kg_results)}개\n"
    answer += f"마지막 데이터 업데이트: 2026-01-28"
    return answer

2. Confidence Score

def assess_confidence(entities, kg_results):
    """답변 신뢰도 평가"""
    score = 0.0

    # 엔티티가 정확히 추출되었는가?
    if entities.get("alarm_code"):
        score += 0.3
    if entities.get("equipment"):
        score += 0.2

    # KG에서 결과가 있는가?
    if kg_results:
        score += 0.3
        # 결과가 3개 이상이면 추가 점수
        if len(kg_results) >= 3:
            score += 0.1

    # 확률 정보가 있는가?
    has_prob = any(r.get("probability") for r in kg_results)
    if has_prob:
        score += 0.1

    return min(score, 1.0)

# 사용 예시
confidence = assess_confidence(entities, results)
if confidence < 0.5:
    answer = "\u26a0\ufe0f 확인 필요: " + answer
    answer += "\n(신뢰도가 낮습니다. 정비팀에 확인을 권장합니다.)"

3. Few-shot 프롬프트

FEW_SHOT_EXAMPLES = """
예시 1:
질문: "알람 E-201 어떻게 해?"
좋은 답변:
"CNC밀링 3호기의 스핀들 과열(E-201) 대응:
1순위: 냉각수 부족 확인 (45%) - 15분
  → 후면 하단 패널의 냉각수 탱크 레벨 확인
  → 기본 정비 자격으로 수행 가능
2순위: 베어링 마모 (35%) - 4시간
  → 진동 측정 필요, 김기술 님 호출 권장
먼저 냉각수를 확인해보시겠습니까?"

나쁜 답변:
"스핀들 과열이면 냉각수나 베어링일 수 있어요."
(구체적 확률, 절차, 인력 정보 없음)

---
예시 2:
질문: "부품 수명 현황 보여줘"
좋은 답변:
"CNC밀링 3호기 부품 수명:
\u274c 메인 베어링: 81.3% (교체 임박)
\u26a0\ufe0f 냉각 시스템: 83.0% (주의)
\u2705 스핀들 모터: 62.3% (양호)
메인 베어링 교체를 권장합니다 (NSK BRG-6205-2RS, 45,000원)"

나쁜 답변:
"부품들이 좀 오래됐네요."
(구체적 수치, 부품번호, 비용 없음)
"""

4. 사용자 피드백 루프

class FeedbackCollector:
    def collect(self, question, answer, rating, comment=""):
        """사용자 피드백 수집"""
        feedback = {
            "question": question,
            "answer": answer,
            "rating": rating,     # 1-5
            "comment": comment,
            "timestamp": datetime.now(),
        }
        # 피드백을 KG에 저장하여 답변 품질 개선에 활용
        self.save_to_kg(feedback)

        if rating <= 2:
            # 낮은 평가: 정비팀에 알림
            self.notify_maintenance_team(feedback)
AI로 학습하기 — 꿀팁
할루시네이션 방지 전략 실효성 검증AI 학습 팁

KG 기반 Q&A에서 할루시네이션 방지 전략이 제조 도메인에서 실제로 효과적인지 비판적으로 검증하세요.

KG Q&A 시스템에서 할루시네이션을 줄이기 위해 '검색된 그래프 트리플만 컨텍스트로 제공, LLM에게 KG 외 정보 사용 금지 프롬프트 추가'라는 전략이 언급된다. 이 전략이 제조 도메인(전문 용어, 수치 정밀성 중요)에서 실제로 얼마나 효과적인지, 한계점과 보완 방법도 함께 평가해줘.
이 팁이 도움이 됐나요?
핵심 포인트
  • 할루시네이션 방지: KG 데이터만 사용, 없는 정보는 명시적으로 "확인 불가"
  • Confidence Score로 답변 신뢰도를 수치화하여 표시
  • Few-shot 예시로 구체적이고 실행 가능한 답변 유도
  • 사용자 피드백 수집으로 지속적 품질 개선