안녕하세요, 사주 리포트 서비스 "방울당"을 만들고 있습니다.
로그인 따로 필요없이 비회원도 바로 볼 수 있습니다.

왜 만들었나?

사주는 LLM에게 통째로 맡기면 최악의 도메인입니다. 그럴듯한 서술은 잘 만드는데, 만세력 계산, 오행, 용신 판정처럼 "정답이 있는 부분"에 환각이 섞이는 순간 신뢰가 무너진다고 생각합니다. 또한, 용신을 계산하는 방식은 억부용신법, 조후용신법, 통관용신법, 병약용신법 등 다양한 계산 방법이 있으며 이로 인해서 풀이가 달라지는데, AI에게 "나 용신 이거야~" 라고 넘기기에는 AI가 잘못된 서술을 하게될 우려가 있습니다.

기존 AI 사주 서비스들을 써보면 같은 생년월일인데 볼 때마다 용신 및 서술이 달라지는 경우가 흔했고, 이걸 구조적으로 막아보고 싶었습니다.

어떻게 만들었나 — "판정은 코드가, 서술만 LLM이"

  • 만세력 엔진(결정론): 오행 가중치, 십성, 12운성, 신살, 대운/세운 계산은 전부 코드입니다. 태어난 지역에 따른 진태양시 보정도 코다단에서 전부 처리합니다.
  • 판정 레이어(결정론): 연애·직업·재물·건강 판정과 월별 흐름까지 코드가 결정합니다. LLM은 이 결과를 뒤집을 수 없습니다.
  • LLM은 개인화 서술만: "이 기운이 이 사람에게 어떻게 작동하는가"만 씁니다. 개념 정의("십성이란 ~")는 하드코딩 사전이 렌더링해서, 이 영역은 토큰 0·환각 0입니다.
  • 가드레일: 파싱 → 스키마 검증 → 금지어/톤 체크 → 엔진 결과와 대조하는 팩트체크 → 실패 시 재시도 → 리포트를 5개 그룹으로 쪼개 병렬 생성해 지연을 줄였습니다.

만들면서 배운 것

  • 프롬프트에 "하지 마라" 목록을 늘리는 것보다, 애초에 LLM이 결정할 수 없도록 입력과 역할을 좁히는 쪽이 훨씬 효과적이었습니다.
  • 결정론 레이어가 두꺼워질수록 LLM 비용과 재시도율이 같이 떨어졌습니다. 환각 대책이 곧 비용 최적화였습니다.
  • 사주라는 것은 예언서가 아닙니다. 빅데이터일뿐이며, 그저 내가 태어난 시각에 따른 기운일 뿐이며, 이를 알고 대처하는 것이 곧 제 인생에 도움이되는 방향이라고 판단하였습니다.

기능 제안이든 지적이든 어떤 피드백이라도 감사히 받겠습니다!
마지막으로 고양이는 너무 귀엽습니다. 😺😺

댓글과 토론