입금 판정 배치에 AI 보조 판정과 폴백 큐 도입
목차
문제 배경
입금 완료 판정 배치가 은행별로 응답 포맷이 다 달라서 텍스트 패턴 매칭으로 분기 쳐놓은 상태였음. 신규 은행 붙일 때마다 if-else 늘어나고, 포맷 살짝만 바뀌어도 미처리 큐 쌓이는 문제 반복됨. 이번에 큐 배치에 AI 판정 한 단계 끼워넣고, 폴백 경로까지 정리함.
처리 흐름
룰 기반을 1차, AI를 2차로 둠. 추상 핸들러에서 공통 전처리하고, 구체 핸들러는 패턴 매칭만 책임짐.
- 큐에서 대기 건 pop
- 추상 핸들러가 공통 정규화 수행
- 구체 핸들러의 룰 매칭 시도
- 실패하면 AI 판정 호출
- 신뢰도 낮으면 수동 검수 큐로 이동
if (ruleMatched) confirm()
else if (aiScore >= 0.85) confirm(aiResult)
else queueForManualReview()
폴백 매트릭스
AI 응답을 단일 결정자로 두지 않은 게 핵심임. 신뢰도 임계값 아래는 무조건 사람 검수로 빠짐.
| 케이스 | 처리 |
|---|---|
| 룰 매칭 성공 | 즉시 완료 |
| 룰 실패 + AI 고신뢰 | AI 결과 채택 |
| 룰 실패 + AI 저신뢰 | 수동 검수 큐 |
| AI 호출 실패/타임아웃 | 재시도 후 수동 검수 |
시행착오
처음엔 AI를 1차에 둘 뻔했음. 근데 응답 지연·호출 비용·날짜별 정확도 편차 고려하니 룰이 먼저여야 맞다는 결론. AI는 룰이 못 잡는 엣지케이스 보강용으로 정리됨.
은행마다 입금 통보 텍스트가 미묘하게 다른 게 골치였는데, 추상 핸들러에 정규화 + AI 컨텍스트 주입을 묶어두니 신규 은행 추가 코스트가 확 줄음. 두 곳 먼저 적용해보고 나머지는 동일 패턴으로 확장 예정.
또 하나 까먹지 말아야 할 건, AI 응답을 그대로 신뢰하면 0.x% 오판이 잔액 사고로 직결됨. 그래서 임계값 + 수동 검수 큐 + 호출 로그 보존을 한 세트로 묶어둠. 셋 중 하나라도 빠지면 운영에서 못 버팀.
배운 점
- AI 판정은 단일 결정자가 되면 안 됨. 폴백 경로가 본체임.
- 신뢰도 임계값은 운영 데이터 쌓인 뒤 튜닝하는 게 답. 처음부터 정답 못 맞춤.
- 룰 기반과 AI는 경쟁 관계 아니라 계층 관계로 두는 게 안정적임.
다음
댓글 0
첫 댓글 달아줘.