DOCS/journey/troubleshooting/260311_naverworks_briefing_insight_preamble_leak.md
2026-03-11 19:02:45 +09:00

3.8 KiB

tags
tags
naverworks
briefing
insight
llm
troubleshooting

NAVER WORKS 브리핑 인사이트 서두 문구 누출

관련 문서

문제

  • 2026-03-11 NAVER WORKS 일일 브리핑에서 인사이트 1줄 앞에 아래 같은 서두가 함께 출력됐습니다.
  • 로빙입니다. 사용자님께서는 오늘 알아야 할 메일 핵심 내용을 1줄로 요약해 드리겠습니다.

발생 시점

  • 2026-03-11 09:00 KST NAVER WORKS 일일 브리핑 실행에서 확인됐습니다.
  • 같은 실행 로그에서 아래 순서가 확인됐습니다.
    • 09:00:00 Running job: NAVER WORKS Daily Briefing
    • 09:00:02 Generated insight: 로빙입니다...
    • 09:00:04 Briefing sent successfully: 14 emails

기대 동작

  • 인사이트는 바로 핵심 내용으로 시작해야 합니다.
  • 예: 회신 필요 4건(오후 3시까지 1건 포함), 결제/청구 1건, 안내/공지 9건

재현 조건

  • rb8001의 NAVER WORKS 일일 브리핑 스케줄 또는 동일한 수동 실행 경로에서 재현 가능합니다.
  • 메일 조회와 Slack 전송은 정상이어도, 인사이트 생성 결과에 서두가 포함되면 그대로 사용자에게 노출됩니다.

확인된 사실

  • 인사이트 생성 프롬프트는 이미 인사말, 서두 없이 바로 내용 시작을 요구합니다.
  • 관련 코드:
    • rb8001/app/services/skills/naverworks_briefing.py
    • _call_llm_for_insight() 프롬프트
    • _format_slack_message()*{insight}* 블록
  • Slack 포맷터는 전달받은 insight를 그대로 출력하므로, 해당 문구는 포맷터가 아니라 LLM 출력에서 유입된 것입니다.
  • _generate_insight()는 줄바꿈만 제거하고, 문장 시작 패턴에 대한 검증이나 정규화는 하지 않습니다.
  • 테스트는 회신 필요 1건, 결제 안내 1건, 일반 공지 4건 같은 정상 출력만 검증하고, 금지 서두 누출 케이스는 다루지 않습니다.

원인

  • 프롬프트 제약만 있고, 실제 출력값에 대한 강제 후처리가 없습니다.
  • 그 결과 LLM이 프롬프트를 어겨도 서두 문구가 그대로 Slack에 노출됩니다.

영향

  • 1줄 인사이트 UX 규칙이 깨집니다.
  • 브리핑 첫 줄이 장황해져 핵심 전달력이 떨어집니다.
  • 테스트는 정상 케이스만 검증하고 있어 이런 프리앰블 누출을 막지 못합니다.

권장 조치

  1. _generate_insight() 또는 Slack 포맷 직전에 서두 제거 후처리를 추가합니다.
  2. 프롬프트를 더 강하게 제한해 회신 필요, 결제/청구, 안내/공지 같은 분류어로 바로 시작하도록 고정합니다.
  3. 테스트에 로빙입니다, 요약해 드리겠습니다, 사용자님께서는 같은 금지 서두 케이스를 추가합니다.

수정 후 검증 기준

  • Slack 인사이트 첫 문장이 회신 필요, 결제/청구, 안내/공지, 오후 N시까지 회신 필요 같은 핵심 분류 표현으로 바로 시작해야 합니다.
  • 로빙입니다, 사용자님께서는, 요약해 드리겠습니다 같은 서두 문구는 0건이어야 합니다.
  • 스케줄 실행 로그에서 Generated insight: 값과 실제 Slack 노출 문구가 같은 기준으로 검증되어야 합니다.

한 줄 결론

  • 현재 출력은 의도된 정상 동작이 아니라, NAVER WORKS 브리핑 인사이트에 LLM 서두 문구가 누출된 상태입니다.