DEV Community

jidong
jidong

Posted on

AI에게 사주를 맡기면 안 되는 이유 — 그리고 올바르게 맡기는 법

사주 앱을 만들면서 가장 먼저 배운 건, AI한테 뭘 시킬지가 아니라 뭘 안 시킬지였다.

아직 매출은 $0이다. 성공 스토리가 아니라 삽질 일지다.


"1990년 3월 15일생 사주 알려줘."

이렇게 LLM한테 바로 던졌다. 답변은 그럴듯하게 나온다. 문장도 매끄럽고, 오행이 어쩌고, 목화토금수가 어쩌고.

근데 문제가 있다. 간지가 틀린다.

나: "1990년 3월 15일 오전 6시생 사주 분석해줘"
Claude: "경오년 기묘월 임진일 계묘시입니다. 오행 분석을 하면..."
나: "...경오년은 맞는데 기묘월이 아니야."
Enter fullscreen mode Exit fullscreen mode

LLM은 만세력 계산을 못 한다. 정확히 말하면, 확률적으로 맞추는 것처럼 보일 뿐이다.

천간지지는 60갑자 순환이고, 월주는 절기 경계로 바뀌고, 시주는 일간에 따라 달라진다. 이건 "추론"이 아니라 "계산"이다.

계산을 언어 모델한테 시키면 틀린다.

그리고 틀린 간지로 해석하면? 전부 무의미하다. 오행이 틀리고, 십성이 틀리고, 격국이 틀린다.

그럴듯한 문장 속에 틀린 정보가 들어 있으면, 그건 사주 분석이 아니라 창작 소설이다.


올바른 구조: 코드가 계산하고, AI가 읽는다

깨닫고 나서 구조를 완전히 바꿨다.

[생년월일+시간] → [만세력 엔진] → [정확한 JSON] → [LLM] → [해석 결과]
Enter fullscreen mode Exit fullscreen mode

만세력 엔진은 코드로 직접 구현했다. lunar-typescript 기반이고, 절기 보정, 윤달 처리, 자시 경계까지 전부 알고리즘으로 돌린다.

출력은 JSON이다. 천간, 지지, 오행 배분, 십성 관계, 격국, 용신 — 전부 숫자와 코드로 나온다.

LLM한테는 이 JSON을 던져준다. "이 데이터를 읽고 해석해줘." 이게 전부다.

코드가 하는 일은 만세력 계산이다. 100% 정확해야 하는 것. LLM이 하는 일은 그 데이터를 사람 말로 바꿔주는 것이다.

이 분리가 되니까 테스트도 가능해졌다. 99개 테스트 케이스, 42개 골든 케이스. 만세력닷컴, 한국천문연구원 데이터와 교차 검증했다.

엔진이 틀리면 테스트가 실패한다. 즉시 알 수 있다.

LLM한테 전부 맡기면 "어디서 틀렸는지"조차 알 수가 없다.


"완벽하다"고 했는데 틀렸다

엔진을 처음 만들었을 때 "테스트 전부 통과합니다, 완벽합니다"라는 결과를 받았다.

그래서 넘어갔다.

나중에 엣지 케이스를 돌려보니 틀리는 게 나왔다.

진짜 사례 하나. 2024년 2월 4일은 입춘이다. 이 날을 기준으로 연주가 계묘년에서 갑진년으로 바뀐다. 근데 입춘 시각이 오후 4시 27분이다.

오전에 태어난 사람은 아직 계묘년. 오후 5시에 태어난 사람은 갑진년.

엔진은 날짜만 보고 갑진년으로 처리했다. 절기 "시각"까지 반영을 안 한 거다. 연주가 통째로 틀리고, 그 위에 쌓인 오행 분석이 전부 뒤집어진다.

자시(밤 11시~새벽 1시)에서도 비슷한 문제가 터졌다. 자시 전반(23:00~23:59)은 당일인지 다음날인지가 유파마다 다른데, 코드는 그 선택 자체를 안 했다.

이런 건 1990-03-15 같은 평범한 날짜에서는 안 잡힌다.

"통과했으니 완벽하다"가 아니라 "어떤 케이스를 안 돌려본 건지"를 의심했어야 했다.

QA를 완전히 뜯어고쳤다. 절기 경계일, 윤달, 자시, 연말연초 전환일을 전부 엣지 케이스로 추가했고 외부 3곳 이상 교차 검증을 의무화했다. 하나라도 실패하면 전수 재검증.

"통과"가 아니라 "더 이상 실패할 곳을 못 찾을 때"가 기준이 됐다.


이건 사주만의 이야기가 아니다

같은 프로젝트에서 이름 분석을 추가하면서 똑같은 실수를 할 뻔했다.

한국 성명학에서 "박"이 6획인지 7획인지에 따라 오행이 완전히 달라진다. LLM한테 물어보면 "보통 6획입니다." 근데 성명학에서는 본래 한자 기준 7획이다.

이 한 획 차이로 수리 분석이 뒤집어진다.

그래서 획수는 코드 테이블에서 뽑고, "이 수리 조합이 의미하는 바를 설명해줘"만 AI한테 맡겼다.

AI 앱을 만들 때 핵심 질문은 이거다.

"이 작업은 정확해야 하나, 유창해야 하나?"

정확해야 하면 코드. 유창해야 하면 AI. 둘 다 필요하면 코드가 먼저 계산하고, AI가 그 결과를 읽는다.

"AI 앱 개발에서 가장 중요한 결정은 AI에게 뭘 시킬지가 아니라, 뭘 안 시킬지다."

Top comments (0)