통화 후 요약 스포크 — D-1·D-2·D-3 구현

무엇을

POST /hub/calls/{call_id}/close 뒤에 붙는 실제 요약·분류·후속조치 추출을 만든다. 계약·배선·DTO 는 w7-postcall-contract에서 끝났고 지금은 501 이다.

경계

계약 티켓이 적어 둔 그대로다 — 요약·분류를 실제로 하는 것은 ai/ 이고, server/ 는 계약·배선·저장까지다. 이 티켓이 ai/ 몫이다.

이미 타입에 박혀 있는 제약 둘

절대 원칙 9(판정은 규칙이, 설명만 LLM이)를 계약 형태로 옮긴 것이므로 스포크가 이것을 되돌리지 않는다.

SEC-1

받는 것도 돌려주는 것도 마스킹 완료본뿐이다. 통화 후 처리라고 원문을 다시 꺼내오지 않는다 — 애초에 저장돼 있지 않다.

완료 조건


2026-09-15 — 장민석 님 규칙 초안 위에 얹었다. 새로 만든 것은 D-1 모델 요약과 D-2 유형 제안이다

501 은 이미 w4-postcall-rule-draft(장민석, decisions/306)가 규칙 발췌 초안으로 걷었다. 그 티켓이 «LLM 요약은 w7-postcall-spoke 로 남는다» 고 적었으므로 바꾸지 않고 위에 얹었다(ai/apps/postcall_summary/, 이름이 postcall 이 아닌 것은 서버 모듈과 경로가 겹쳐서다).

마스킹 자막 ─▶ 규칙 초안(server/apps/postcall)   발췌 요약 · 유형 None · 약속 발화 후속조치
            ├▶ D-1 kanana 요약 → 규칙 검사       자막에 없는 숫자·금지 표현·길이 → 걸리면 발췌 요약 그대로
            └▶ D-2 고객 발화 검색 → TERM 장 투표  2 대중교통 · 3 생활하수도 · 4 일반행정 · 5 코로나19 (1·6장·MANUAL 은 투표 안 함)
D-3 은 규칙 초안 것을 그대로 쓴다 — 모델이 «할 일» 을 지어내면 상담원 할 일로 저장된다

실측 — 골든셋 D 케이스가 0건이라 AI Hub 실제 대화셋으로 쟀다

측정일 2026-09-15 · 커밋 38f2fc3-dirty · AI Hub 민원 질의응답 validation · 다산콜센터 대화셋 1,009개(카테고리 라벨) · 로컬 MPS
ELASTICSEARCH_URL=http://localhost:9200 .venv/bin/python scripts/eval_postcall.py --device mps
라벨 분포: 대중교통 243 · 일반행정 313 · 코로나19 196 · 생활하수도 257

D-2 유형 제안        정확도              대중교통   생활하수도   일반행정   코로나19   제안 없음
  BM25              0.678 (684/1009)    0.745      0.790       0.601     0.571       53
  dense + rerank    0.872 (880/1009)    0.996      0.992       0.725     0.796        6

D-1 모델 요약 (kanana, 표본 50 · 시드 20260915)
  화면에 모델 요약 42 · 규칙 발췌로 반려 8 (금지 표현 8 · 자막에 없는 숫자 2 — 한 건에 둘 다 걸린 것 포함)
  지연 p50 1.88s · p95 3.01s  (통화 후 처리라 4.3절 실시간 예산 대상이 아니다)

읽는 법