From 20024c37c85fde1152468bffa7ccd882f28d0c99 Mon Sep 17 00:00:00 2001 From: Claude-51124 Date: Wed, 11 Mar 2026 18:46:33 +0900 Subject: [PATCH] docs: add plan for briefing insight preamble leak --- ...briefing_insight_preamble_leak_fix_plan.md | 85 +++++++++++++++++++ journey/plans/README.md | 5 ++ ..._insight_preamble_leak_closure_research.md | 1 + ...verworks_briefing_insight_preamble_leak.md | 4 + 4 files changed, 95 insertions(+) create mode 100644 journey/plans/260311_naverworks_briefing_insight_preamble_leak_fix_plan.md diff --git a/journey/plans/260311_naverworks_briefing_insight_preamble_leak_fix_plan.md b/journey/plans/260311_naverworks_briefing_insight_preamble_leak_fix_plan.md new file mode 100644 index 0000000..65bbf77 --- /dev/null +++ b/journey/plans/260311_naverworks_briefing_insight_preamble_leak_fix_plan.md @@ -0,0 +1,85 @@ +--- +tags: [plans, naverworks, briefing, insight, llm, langgraph] +--- + +# NAVER WORKS 브리핑 인사이트 서두 누출 수정 계획 + +**작성일**: 2026-03-11 +**상태**: draft +**목표**: NAVER WORKS 브리핑 인사이트가 금지 서두 없이 분류 문구로 바로 시작하도록 출력 계약을 고정한다. + +## 관련 문서 +- [NAVER WORKS 브리핑 인사이트 서두 문구 누출](../troubleshooting/260311_naverworks_briefing_insight_preamble_leak.md) +- [NAVER WORKS 브리핑 인사이트 서두 누출 종료 리서치](../research/260311_naverworks_briefing_insight_preamble_leak_closure_research.md) +- [프롬프트 DB 부분 도입 및 하드코딩 프롬프트 잔존](../troubleshooting/260311_prompt_db_partial_adoption_and_hardcoded_prompts.md) + +## 1. 문제 정의 +- `NAVER WORKS Daily Briefing`은 실행과 전송은 성공했지만, 인사이트 앞에 `로빙입니다`, `사용자님께서는`, `요약해 드리겠습니다` 같은 서두가 붙은 채 Slack에 노출됐다. +- 현재 프롬프트는 `인사말, 서두 없이 바로 내용 시작`을 요구하지만, 실제 출력값을 통과시키기 전 검증 계약이 없다. +- 따라서 이번 문제는 `프롬프트 실패`가 아니라 `LLM 출력 검증 부재` 문제로 본다. + +## 2. 이번 계획의 결정 +- 이 문제는 `LangGraph`를 버리거나 `Pydantic AI`를 새로 도입해서 닫지 않는다. +- 현재 브리핑 플로우 안에서 `generate -> validate -> regenerate 1회 -> fail visible` 계약을 추가해 닫는다. +- 알려진 금지 서두 제거는 허용하되, 기준 미달 출력을 성공처럼 전송하지 않는다. + +## 3. 범위 +- 포함: + - NAVER WORKS 브리핑 인사이트 생성 프롬프트 보강 + - 인사이트 검증/정규화 단계 추가 + - 금지 케이스 테스트 추가 + - 실패 로그 가시성 보강 +- 제외: + - Prompt DB 전면화 + - 다른 브리핑 skill 전수 수정 + - 공통 LLM 출력 정책 프레임워크 신설 + +## 4. 구현 원칙 +- 프롬프트에만 의존하지 않는다. +- 금지 출력은 다음 단계로 그대로 보내지 않는다. +- 정규화로 해결되지 않는 출력은 실패로 남긴다. +- 실패는 로그에 명확히 드러나야 하며, 성공처럼 포장하지 않는다. + +## 5. 구현 단계 + +### A. 프롬프트 보강 +- 인사이트가 반드시 `회신 필요`, `결제/청구`, `안내/공지` 중 하나로 시작하도록 명시한다. +- `로빙입니다`, `사용자님께서는`, `요약해 드리겠습니다`, `오늘 알아야 할 메일 핵심 내용을` 같은 서두를 금지 예시로 직접 적는다. + +### B. 검증 단계 추가 +- `_generate_insight()` 직후 또는 그 다음 단계에 `validate_insight()`를 둔다. +- 검증 항목: + - 금지 서두 포함 여부 + - 허용 시작 패턴 여부 + - 1줄 요약 여부 + +### C. 재생성 1회 +- 첫 생성 결과가 검증에 실패하면 같은 요청으로 1회만 재생성한다. +- 재생성 결과도 실패하면 알려진 서두 제거만 시도한다. +- 서두 제거 후에도 허용 시작 패턴이 아니면 전송하지 않고 실패로 남긴다. + +### D. 실패 가시성 +- `Generated insight:` 로그에 원문과 판정 결과가 남아야 한다. +- 검증 실패, 재생성 시도, 최종 실패는 구분되는 로그 메시지로 남긴다. +- `Briefing sent successfully`는 실제 검증을 통과한 경우에만 남긴다. + +### E. 테스트 추가 +- 단위 테스트: + - 정상 시작 패턴 통과 + - 금지 서두 포함 시 실패 또는 정규화 + - 재생성 후 정상화 + - 재생성 후에도 기준 미달이면 실패 +- 금지 케이스 예시: + - `로빙입니다... 회신 필요 1건` + - `사용자님께서는... 결제/청구 1건` + - `오늘 알아야 할 메일 핵심 내용을... 안내/공지 3건` + +## 6. 완료 판정 기준 +- 실제 생성값과 Slack 노출값 모두에서 금지 서두가 0건이다. +- 인사이트는 `회신 필요`, `결제/청구`, `안내/공지` 중 하나로 시작한다. +- 금지 케이스 테스트가 추가되고 모두 통과한다. +- 검증 실패 출력은 성공 전송 로그로 남지 않는다. + +## 7. 후속 경계 +- 이 계획이 끝나도 Prompt DB 미전면화 문제는 별도 트러블로 유지한다. +- 공통 브리핑 계층 확장은 이번 이슈를 닫은 뒤 별도 계획으로 다룬다. diff --git a/journey/plans/README.md b/journey/plans/README.md index 75f465d..0c16e20 100644 --- a/journey/plans/README.md +++ b/journey/plans/README.md @@ -21,6 +21,11 @@ ## 🔴 실제로 필요한 플랜 (미구현) +### 0. NAVER WORKS 브리핑 인사이트 서두 누출 수정 (260311) +**상태**: draft +**목표**: 인사이트 출력 계약을 강제해 금지 서두 누출을 차단 +**참고**: `plans/260311_naverworks_briefing_insight_preamble_leak_fix_plan.md` + ### 1. 자기개선 루프 DB/서비스 구현 (260303) **상태**: 미구현 **목표**: 예측-행동-평가-반성 루프의 정책 버전/실행 로그를 DB로 고정 diff --git a/journey/research/260311_naverworks_briefing_insight_preamble_leak_closure_research.md b/journey/research/260311_naverworks_briefing_insight_preamble_leak_closure_research.md index 8ec9177..c5089e4 100644 --- a/journey/research/260311_naverworks_briefing_insight_preamble_leak_closure_research.md +++ b/journey/research/260311_naverworks_briefing_insight_preamble_leak_closure_research.md @@ -7,6 +7,7 @@ tags: [research, naverworks, briefing, insight, llm, closure] ## 관련 문서 - [NAVER WORKS 브리핑 인사이트 서두 문구 누출](../troubleshooting/260311_naverworks_briefing_insight_preamble_leak.md) - [자가수정 에이전트 프레임워크 및 Workspace CLI 검증 리서치](./260311_자가수정_에이전트_프레임워크_및_workspace_cli_검증_리서치.md) +- [NAVER WORKS 브리핑 인사이트 서두 누출 수정 계획](../plans/260311_naverworks_briefing_insight_preamble_leak_fix_plan.md) ## 목적 - `로빙입니다. 사용자님께서는... 요약해 드리겠습니다.` 같은 서두가 NAVER WORKS 브리핑 인사이트에 노출되는 문제를 어떤 수정으로 닫는 것이 맞는지 결정 가능한 근거를 남깁니다. diff --git a/journey/troubleshooting/260311_naverworks_briefing_insight_preamble_leak.md b/journey/troubleshooting/260311_naverworks_briefing_insight_preamble_leak.md index f94fc44..dca9f7a 100644 --- a/journey/troubleshooting/260311_naverworks_briefing_insight_preamble_leak.md +++ b/journey/troubleshooting/260311_naverworks_briefing_insight_preamble_leak.md @@ -4,6 +4,10 @@ tags: [naverworks, briefing, insight, llm, troubleshooting] # NAVER WORKS 브리핑 인사이트 서두 문구 누출 +## 관련 문서 +- [NAVER WORKS 브리핑 인사이트 서두 누출 종료 리서치](../research/260311_naverworks_briefing_insight_preamble_leak_closure_research.md) +- [NAVER WORKS 브리핑 인사이트 서두 누출 수정 계획](../plans/260311_naverworks_briefing_insight_preamble_leak_fix_plan.md) + ## 문제 - 2026-03-11 NAVER WORKS 일일 브리핑에서 인사이트 1줄 앞에 아래 같은 서두가 함께 출력됐습니다. - `로빙입니다. 사용자님께서는 오늘 알아야 할 메일 핵심 내용을 1줄로 요약해 드리겠습니다.`