브레인스토밍 AI 환각 제거로 데이터 기반 신뢰성 확보
목차
브레인스토밍 기능에서 AI가 생성한 콘텐츠를 실제 데이터 소스에 기반하도록 수정했다. 단순해 보이지만 생성 AI를 활용하는 모든 시스템에서 겪을 수 있는 전형적인 문제 — 그리고 늘 뒷전으로 밀리는 작업이었다.
AI의 "창작"은 자유로움이 아니다
생성 AI를 쓸 때 가장 매력적인 부분은 빠르게 콘텐츠를 뽑아낸다는 거다. 특히 브레인스토밍 같은 창의적 기능이면 "그게 좋은 거 아닌가?"라고 생각할 수 있다. 하지만 여기서 말하는 "사실 창작"은 다르다. AI가 근거 없이 그럴듯한 데이터를 만들어내는 것 — 이걸 hallucination이라 부르는데, 사용자가 그걸 실제 정보로 신뢰했을 때가 문제다.
브레인스토밍 결과물을 사용자가 의사결정에 참고할 때, "이건 추천일 뿐"이 아니라 "데이터 기반 제안"으로 받아들일 가능성이 높다. 우리 팀에서는 그 선을 명확하게 그어야 한다고 판단했다.
어디서 실제 데이터가 필요한가
| 영역 | 문제 | 해결 |
|---|---|---|
| 추천 생성 | AI가 존재하지 않는 옵션 제시 | 레이블, 카테고리, 과거 데이터만 참고 |
| 통계/수치 | 그럴듯한 숫자 창작 | 실제 쿼리로 조회한 값만 포함 |
| 출처 표기 | 없는 출처 언급 | 참고 링크/문서 명시 필수 |
| 트렌드 분석 | 경향성 과장 | 데이터 범위 명확히 |
fix하면서 깨달은 건, 개발 단계에선 "충분히 그럴듯해 보이는" 출력이 QA를 통과할 수 있다는 것. 우리가 직접 테스트할 때 "아, 이 추천이 말이 되네"라고 판단하기 쉽기 때문이다. 실제 데이터만 반영되도록 강제하려면 코드 레벨의 검증이 필수였다.
수정의 핵심 포인트
기본적으로 brainstorm.py에서 콘텐츠 생성 후 필터링 단계를 추가했다고 보면 된다:
# 수정 전: AI 생성 → 그대로 반환
output = generate_brainstorm_content(user_input)
# 수정 후: AI 생성 → 소스 검증 → 필터링된 출력
output = generate_brainstorm_content(user_input)
verified_output = filter_by_source(output, actual_data_sources)
구체적으로는:
- 생성된 아이템별로 실제 데이터 소스에 존재하는지 확인
- 없는 항목은 제거하거나 "추천"으로 명확히 표기
- 수치가 포함되면 데이터베이스/로그 조회 기반 값만 허용
- 참고한 소스를 명시하도록 강제
팀 관점에서 배운 점
이 작업이 우선순위에서 밀렸던 이유를 생각해봤다. 기능은 "작동"했고, 사용자도 결과를 쓰고 있었다. 하지만 우리가 제품의 신뢰성을 책임지는 입장이라면, AI 기반 기능에서 "작동한다"와 "정확하다"는 다르다는 걸 팀 모두가 인식해야 한다.
특히 멘토링 관점에서, 주니어 개발자들이 이런 gen-AI 기능을 구현할 때 "빠르게 반응하는 시스템"에만 집중하기 쉽다. 코드 리뷰에서 "이 함수가 실제로 뭘 검증하는가?"를 물어보는 습관이 필요했다.
비슷한 상황에서의 패턴:
- LLM 기반 검색: 검색 결과는 실제 DB 조회로 재검증
- 자동 분류: 분류 라벨은 사전정의된 집합 안에서만
- 요약 생성: 원문 범위 내에서만 요약 허용
- 대안 제시: 사용자 설정/선호도 기반만, 허공의 옵션 X
다음 고려사항
이제 brainstorm.py에서 모든 콘텐츠가 grounded된다. 하지만 이게 사용성에 미치는 영향을 모니터링해야 한다.
- 기존보다 제안이 줄어들 수 있다 (=hallucination 제거)
- 사용자가 "왜 더 많은 아이디어가 안 나오나?"라고 느낄 수도
- 그럼 문서에서 "이건 실제 데이터 기반이므로 신뢰할 수 있다"는 가치를 전달해야 함
기능의 속도/편의성과 정확성/신뢰성 사이의 트레이드오프인데, 이 경우 신뢰성이 더 중요하다고 봤다. 팀과 함께 이 의사결정 배경을 공유하고, 앞으로 유사한 상황에서도 일관되게 데이터 무결성을 우선하기로 했다.
🛒 이 글과 어울리는 추천 상품
*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.
댓글 0
첫 댓글 달아줘.