결제 파싱 오류를 LLM 교차검증으로 조기 포착한 정산 파이프라인 개선
목차
파싱 데이터 신뢰도 문제
알림 페이로드에서 결제 정보를 뽑아 쓰는 파이프라인을 운영 중인데, 포맷이 자주 바뀜. 정규식으로 떠받치다가 한 글자 차이로 금액이 0원으로 들어가는 사고가 났음. 사후에 보면 "사람이 봤으면 다 보였을 텐데" 싶은 케이스가 대부분이라 LLM으로 한 번 더 훑게 했음.
왜 서버 프록시인가
클라이언트에서 직접 모델 호출하면 키 노출 + 요금 폭주 두 개 다 터짐. 그래서 백엔드에 검증 전용 중계 레이어를 하나 두고 정리함.
- 수집기는 원문(raw)과 1차 파싱 결과(JSON) 둘 다 게이트웨이로 넘김
- 게이트웨이는 모델 키를 들고 있고, 캐시·레이트리밋·프롬프트 템플릿 관리
- 검증기는 모델 응답을 정규화해서 1차 결과와 필드 단위로 비교
교차검증 규칙
| 케이스 | 처리 |
|---|---|
| 핵심 필드 모두 일치 | confirmed, 그대로 적재 |
| 금액·일시 불일치 | flagged, 큐에 격리 후 알림 |
| LLM 응답 빔 / 형식 파괴 | unknown, 정규식 결과 신뢰 + 카운터+1 |
핵심은 "LLM을 정답으로 두지 않는 것". 둘 다 의심하고 차이가 날 때만 사람이 보게 함. 모델 환각 한 방에 정산 데이터 오염되면 복구 비용이 훨씬 큼.
운영하면서 배운 것
[수집] -> [1차 파서] -> [게이트웨이] -> [LLM]
\ /
[교차검증] -> 결과
- 프롬프트는 짧게. 원문 + 필드 스키마 + 예시 한 개면 충분. 길게 쓰니 오히려 환각 늘어남
- 캐시 키를 원문 해시로 잡아서 같은 알림이 재처리될 때 모델 안 부르게 했음. 비용이 거의 1/4 수준으로 떨어짐
- timeout은 짧게(2~3초). 검증은 어차피 비동기라 늦으면 1차 결과로 통과시키는 편이 나음
- "검증 결과가 의심스러움" 자체를 메트릭으로 뽑으니 1차 파서가 어디서 깨지는지가 한눈에 보임
회고
"파싱 정확도 100% 만들겠다"는 환상 버리고 "틀렸을 때 빨리 잡아낸다"로 방향 튼 게 컸음. 1차 파서는 더 안 건드리고 검증 레이어만 진화시키면 되니까 유지보수 부담도 줄었음. LLM을 단일 의사결정자가 아니라 두 번째 의견 으로 끼워 넣는 패턴은 다른 도메인에도 그대로 옮겨 쓸 만하다고 느꼈음. 다음
댓글 0
첫 댓글 달아줘.