코드 반영·테스트·배포 검증 완료 확인 후 상태를 종결로 변경 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
4.2 KiB
4.2 KiB
tags
| tags | |||||
|---|---|---|---|---|---|
|
NAVER WORKS 브리핑 인사이트 서두 문구 누출
관련 문서
- NAVER WORKS 브리핑 인사이트 서두 누출 종료 리서치
- NAVER WORKS 브리핑 인사이트 서두 누출 수정 계획
- NAVER WORKS 브리핑 인사이트 서두 누출 수정 및 수동 배포 검증
상태: 종결 (2026-03-19)
종결 근거: 코드 반영(FORBIDDEN_PREAMBLES, _strip_known_preamble, _validate_insight), 테스트 13건 통과, 24 서버 배포 검증 완료. 상세는 수정 및 배포 검증 워크로그 참조.
문제
- 2026-03-11 NAVER WORKS 일일 브리핑에서 인사이트 1줄 앞에 아래 같은 서두가 함께 출력됐습니다.
로빙입니다. 사용자님께서는 오늘 알아야 할 메일 핵심 내용을 1줄로 요약해 드리겠습니다.
발생 시점
- 2026-03-11 09:00 KST NAVER WORKS 일일 브리핑 실행에서 확인됐습니다.
- 같은 실행 로그에서 아래 순서가 확인됐습니다.
09:00:00Running job: NAVER WORKS Daily Briefing09:00:02Generated insight: 로빙입니다...09:00:04Briefing 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 규칙이 깨집니다.
- 브리핑 첫 줄이 장황해져 핵심 전달력이 떨어집니다.
- 테스트는 정상 케이스만 검증하고 있어 이런 프리앰블 누출을 막지 못합니다.
권장 조치
_generate_insight()또는 Slack 포맷 직전에 서두 제거 후처리를 추가합니다.- 프롬프트를 더 강하게 제한해
회신 필요,결제/청구,안내/공지같은 분류어로 바로 시작하도록 고정합니다. - 테스트에
로빙입니다,요약해 드리겠습니다,사용자님께서는같은 금지 서두 케이스를 추가합니다.
수정 후 검증 기준
- Slack 인사이트 첫 문장이
회신 필요,결제/청구,안내/공지,오후 N시까지 회신 필요같은 핵심 분류 표현으로 바로 시작해야 합니다. 로빙입니다,사용자님께서는,요약해 드리겠습니다같은 서두 문구는 0건이어야 합니다.- 스케줄 실행 로그에서
Generated insight:값과 실제 Slack 노출 문구가 같은 기준으로 검증되어야 합니다.
한 줄 결론
- 현재 출력은 의도된 정상 동작이 아니라, NAVER WORKS 브리핑 인사이트에 LLM 서두 문구가 누출된 상태입니다.