문제
이 고객사는 전통 명리학 기반의 사주 풀이 서비스를 기획하고 있었습니다. 핵심 과제는 두 가지였습니다. 첫째, 사주를 구성하는 명리 데이터(사주팔자, 오행, 십성, 용신 등)를 생년월일로부터 정확하게 도출하는 연산 레이어. 둘째, 이 구조화된 데이터를 바탕으로 자연어 풀이 텍스트를 생성하는 레이어.
사람이 직접 풀이를 작성하면 품질은 높지만 속도와 비용이 한계에 부딪힙니다. 반면 LLM에 생년월일만 넘기면 명리 연산의 정확도를 보장할 수 없습니다. LLM은 명리 계산에 특화된 모델이 아니기 때문에, 연산 결과 없이 풀이를 생성하면 오류가 섞인 출력이 나올 위험이 컸습니다.
접근
명리 연산과 LLM 생성을 분리하는 구조를 채택했습니다. Python으로 사주 연산 모듈을 구현해 생년월일로부터 사주팔자·오행 분포·십성·대운 주기 등의 명리 데이터를 결정론적으로 도출합니다. 이 모듈은 전통 명리학 계산 규칙을 코드로 인코딩한 것으로, 같은 입력에는 항상 같은 출력을 보장합니다.
연산이 완료되면 그 결과를 구조화된 컨텍스트로 정리해 LLM 프롬프트에 주입합니다. LLM은 명리 계산을 직접 수행하는 것이 아니라, 검증된 연산 결과를 자연어로 풀어내는 역할만 담당합니다. 프롬프트는 풀이 영역(성격, 직업적성, 건강, 대운 흐름 등)별로 분리되어 각 영역의 출력 형식과 어조를 일관되게 제어합니다.
기능
명리 연산 + LLM 생성 분리 구조
사주 연산은 Python 모듈이 결정론적으로 처리하고, LLM은 그 결과를 자연어로 변환하는 역할만 담당합니다. 연산 오류와 생성 오류가 분리되어 디버깅과 품질 관리가 용이합니다.
API 엔드포인트는 생년월일을 입력받아 연산 → 컨텍스트 구성 → LLM 호출 → 결과 반환의 흐름을 순차 처리합니다. 동일한 입력에 대해 일관된 풀이를 제공하기 위해, LLM 호출 파라미터(temperature 등)를 생산 환경에서 제어 가능하도록 설정값으로 관리합니다.
결과
생년월일 입력부터 풀이 텍스트 반환까지의 흐름이 자동화되어, 사람이 직접 개입하지 않아도 일관된 품질의 풀이 결과가 생성됩니다. 명리 연산 모듈이 계산의 정확도를 담보하고, LLM이 자연스러운 풀이 문장을 생성하는 역할을 분담하기 때문에 두 레이어를 독립적으로 개선할 수 있습니다.
풀이 영역별 프롬프트 분리 구조 덕분에 특정 영역의 어조나 깊이를 조정할 때 전체 시스템을 수정하지 않아도 됩니다. 서비스 트래픽이 늘어나도 연산과 생성 파이프라인이 독립적으로 스케일됩니다.