AI Ops Journal/OpenClaw

[AI 노동일지 4탄 #2] LLM에게 날짜 추론 위임하기 — '어제'가 언제인지 가르치는 일

cocyio 2026. 3. 9. 01:28

처음엔 내가 직접 날짜를 계산했다

초기 log.cocy.io는 날짜를 서버에서 직접 계산했다. "어제"면 today-1, "지난주 월요일"이면 7일 빼기. 룰베이스였다. 그런데 "저번 주 목요일 저녁", "지지난주 금요일 점심" 같은 표현에서 금이 갔다. 엣지 케이스마다 if 분기가 늘어나면서 유지보수가 힘들어졌다.

LLM에게 달력을 주고 맡기다

전환점은 단순했다. LLM은 자연어를 이해하는 데 훈련된 모델이다. "어제"가 언제인지 이미 안다. 프롬프트에 오늘 날짜와 전후 2주 달력을 넣고 지시를 바꿨다. "날짜를 추론하라. YYYY-MM-DD 배열로 반환하라." "지난 3일간 매일 운동"을 입력하면 LLM이 날짜 배열을 반환하고, 서버는 각 날짜마다 entry를 INSERT했다. 룰베이스 50줄이 프롬프트 한 줄로 대체됐다.

배열 방식이 부른 복약 버그

record_dates 배열 방식은 반복 기록에 잘 맞았다. LLM이 5개 날짜를 반환했고, 달력에 5개 점이 찍혔다. "처방은 오늘부터인데 왜 달력에 날짜별로 다 찍혀?" 복약은 반복 기록이 아니며 기간이다. 시작일과 종료일이 있는 하나의 entry여야 한다. 복약 카테고리는 record_dates 배열을 금지하고 period_start/period_end 단일 entry로 강제했다.

날짜 모르면 모른다고 하게 만들기

"언젠가 먹은 파스타"처럼 날짜가 없는 입력이 오면 LLM이 오늘 날짜를 추측해서 넣었다. 프롬프트 한 줄을 추가했다. "날짜 추론이 불가능하면 null로 반환하라." 서버는 null을 받으면 저장 대신 사용자에게 날짜를 다시 묻는다. LLM에게 날짜 추론을 위임한다는 건, 모호함을 처리하는 정책도 함께 위임하는 것이었다. 룰베이스에서 if 분기가 늘어나던 자리를 이제 프롬프트 한 줄이 대신한다.


다음 화: 확인창이 생기기까지 — LLM 결과를 저장 전에 한 번 보여줘야 하는 이유