사주 풀이 LLM 서비스

AI · 콘텐츠4분 읽기

문제

이 고객사는 전통 명리학 기반의 사주 풀이 서비스를 기획하고 있었습니다. 핵심 과제는 두 가지였습니다. 첫째, 사주를 구성하는 명리 데이터(사주팔자, 오행, 십성, 용신 등)를 생년월일로부터 정확하게 도출하는 연산 레이어. 둘째, 이 구조화된 데이터를 바탕으로 자연어 풀이 텍스트를 생성하는 레이어.

사람이 직접 풀이를 작성하면 품질은 높지만 속도와 비용이 한계에 부딪힙니다. 반면 LLM에 생년월일만 넘기면 명리 연산의 정확도를 보장할 수 없습니다. LLM은 명리 계산에 특화된 모델이 아니기 때문에, 연산 결과 없이 풀이를 생성하면 오류가 섞인 출력이 나올 위험이 컸습니다.

특히 명리학은 생년월일시를 절기와 간지 체계로 변환하는 규칙이 촘촘하게 정해져 있는 영역입니다. 이 변환 규칙은 확률적으로 추론할 대상이 아니라 정확하게 계산해야 하는 대상이기 때문에, 자연어 생성에 강점을 가진 LLM의 특성과는 다른 종류의 정확성이 요구되었습니다.

접근

명리 연산과 LLM 생성을 분리하는 구조를 채택했습니다. Python으로 사주 연산 모듈을 구현해 생년월일로부터 사주팔자·오행 분포·십성·대운 주기 등의 명리 데이터를 결정론적으로 도출합니다. 이 모듈은 전통 명리학 계산 규칙을 코드로 인코딩한 것으로, 같은 입력에는 항상 같은 출력을 보장합니다.

연산이 완료되면 그 결과를 구조화된 컨텍스트로 정리해 LLM 프롬프트에 주입합니다. LLM은 명리 계산을 직접 수행하는 것이 아니라, 검증된 연산 결과를 자연어로 풀어내는 역할만 담당합니다. 프롬프트는 풀이 영역(성격, 직업적성, 건강, 대운 흐름 등)별로 분리되어 각 영역의 출력 형식과 어조를 일관되게 제어합니다.

기능

명리 연산 + LLM 생성 분리 구조

사주 연산은 Python 모듈이 결정론적으로 처리하고, LLM은 그 결과를 자연어로 변환하는 역할만 담당합니다. 연산 오류와 생성 오류가 분리되어 디버깅과 품질 관리가 용이합니다.

API 엔드포인트는 생년월일을 입력받아 연산 → 컨텍스트 구성 → LLM 호출 → 결과 반환의 흐름을 순차 처리합니다. 동일한 입력에 대해 일관된 풀이를 제공하기 위해, LLM 호출 파라미터(temperature 등)를 생산 환경에서 제어 가능하도록 설정값으로 관리합니다.

생년월일만 프롬프트에 넣고 LLM에게 명리 계산까지 맡기는 방식도 고려할 수 있지만, 이 경우 계산 과정이 프롬프트 안에 숨어버려 어디서 오류가 발생했는지 추적하기 어렵습니다. 연산과 생성을 코드 레벨에서 분리해두면 검증 방식도 달라집니다. 같은 생년월일을 입력했을 때 항상 같은 사주팔자와 오행 분포가 나오는지를 연산 모듈만 따로 테스트할 수 있고, 이는 LLM 출력물을 사람이 매번 읽고 확인하는 방식보다 훨씬 체계적입니다.

결과

생년월일 입력부터 풀이 텍스트 반환까지의 흐름이 자동화되어, 사람이 직접 개입하지 않아도 일관된 품질의 풀이 결과가 생성됩니다. 명리 연산 모듈이 계산의 정확도를 담보하고, LLM이 자연스러운 풀이 문장을 생성하는 역할을 분담하기 때문에 두 레이어를 독립적으로 개선할 수 있습니다.

풀이 영역별 프롬프트 분리 구조 덕분에 특정 영역의 어조나 깊이를 조정할 때 전체 시스템을 수정하지 않아도 됩니다. 서비스 트래픽이 늘어나도 연산과 생성 파이프라인이 독립적으로 스케일됩니다.

자주 묻는 질문

사주 계산까지 LLM에게 맡기면 안 되나요?

LLM은 자연어를 생성하는 데는 강하지만, 생년월일을 절기와 간지 체계로 변환하는 명리 계산은 정확한 규칙에 따라 결정론적으로 처리해야 하는 영역입니다. LLM에게 이 계산까지 맡기면 같은 생년월일을 넣어도 매번 다른 계산 결과가 나올 위험이 있어, 연산은 코드로 분리해 별도 모듈이 담당하도록 했습니다.

이 구조의 가장 큰 장점은 무엇인가요?

연산 오류와 생성 오류를 분리해서 확인할 수 있다는 점입니다. 풀이 결과가 이상하다면 사주 연산 모듈의 계산이 틀렸는지, LLM이 결과를 잘못 풀어냈는지를 나누어 점검할 수 있어 디버깅과 품질 관리가 훨씬 수월합니다.

풀이 영역별로 프롬프트를 나눈 이유는 무엇인가요?

성격, 직업적성, 건강, 대운 흐름처럼 풀이 영역마다 요구되는 어조와 깊이가 다르기 때문입니다. 프롬프트를 영역별로 분리해두면 특정 영역의 표현을 조정하고 싶을 때 해당 프롬프트만 수정하면 되고, 전체 시스템을 건드릴 필요가 없습니다.

사용자가 많아지면 풀이 품질이나 응답 속도가 떨어지지 않나요?

연산 모듈과 LLM 생성 파이프라인이 분리되어 있어 각각 독립적으로 확장할 수 있습니다. 명리 연산은 가벼운 결정론적 계산이라 트래픽 증가의 영향을 크게 받지 않고, 응답 생성 구간만 트래픽에 맞춰 확장하면 되는 구조입니다.

도입 결과

전통 명리 데이터를 구조화하고 LLM 프롬프트와 결합하여 일관된 풀이 결과물을 자동으로 생성하는 흐름이 구현되었다.
#LLM#AI서비스#Python

비슷한 업무 자동화가 필요하신가요?

무료 상담 신청