virtual-insanity
← 리포트 목록

260416 morning briefing v2 quality redo

2026-04-16 morning [morning-briefing, telegram, quality, report, phase17-followup]

아침 브리핑 v2 품질 재점검

결론

PASS. 06:45 자동 발송본(msg_id 2375)은 짧지만 애매한 LLM 문장과 markdown 잔재가 남아 있었다. v2에서는 LLM 문체에 의존하지 않고, deterministic compact 브리핑으로 고정했다. 최종 재발송 msg_id는 2399.

최종 발송 증거:

[briefing_wrapper] send_result={"ok": true, "message_ids": [2399], "error": null, "chat_id": -1003522748967, "topic_id": 8, "transport": "telegram_api"}

1) 06:45 msg_id 2375 캡처

로그 근거:

~/.hermes/logs/morning-briefing-telegram.log
[briefing_wrapper] kind=morning chars=644 meta={"morning_briefing_ok": true, "stderr_signal": ""}
[SECTOR_TRACE] send_sector(report) caller=telegram_briefing_wrapper.py text='<b>🌅 아침 투자 브리핑</b>\n<i>2026-04-16 06:45 KST / LLM</i>\n\n# 🌅 아침 투자 브리핑 — 2026-04-16'
[briefing_wrapper] send_result={"ok": true, "message_ids": [2375], "error": null, "chat_id": -1003522748967, "topic_id": 8, "transport": "telegram_api"}

LLM 로그 근거:

~/.hermes/logs/llm/20260416.jsonl
2026-04-16T06:45:05 KST
model=github-copilot/gpt-4o-mini
response_chars=585
response_preview="# 🌅 아침 투자 브리핑 — 2026-04-16\n\n## 1. 오늘 한 줄\n- 미국 시장의 유동성 축소가 지속되며, 한국 시장의 반응을 주목해야 할 시점.\n\n## 2. 시장 온도\n- 미국 시장은 유동성 축소 국면에 진..."

Telegram 과거 본문 전체 역조회는 불가했다. 대신 wrapper log, sector trace, LLM response preview로 실제 발송 형식과 품질 문제를 확인했다.

2) 남은 문제 5개

문제 근거 조치
Markdown 잔재 노출 sector trace에 HTML 헤더 뒤 # 🌅 ..., ## 형식이 그대로 보임 wrapper HTML 렌더러 섹션명을 v2로 정리
애매한 문장 “한국 시장의 반응을 주목해야 할 시점” 금지 문구 필터 + 판단형 문장으로 교체
수치 부족 06:45 본문 644자, preview상 핵심 숫자 부족 핵심 숫자 8개 고정: 미국 대형주/나스닥/코스피/미10년/달러/원달러/유가/금
technical 용어 혼입 s:6 개선 후에도 dry-run에 변동성지수, 이상치, 통계값, 이동평균, 이탈, 되돌림 노출 아침 브리핑 전용 sanitizer 추가, anomaly 라인 제거
매크로/펀더/테크 경계 불명확 macro/fund/technical latest를 섞어 문장화하면서 raw 용어 유입 “매크로 / 펀더멘탈 / 가격 흐름” 3줄로 역할 분리

3) 수정 파일

백업:

/Users/ron/.hermes/workspace/scripts/pipeline/morning_briefing.py.bak-morning-v2-20260416-093641
/Users/ron/.hermes/workspace/scripts/pipeline/telegram_briefing_wrapper.py.bak-morning-v2-20260416-093641

수정:

파일 내용
scripts/pipeline/morning_briefing.py generate_compact_korean_briefing() v2 재작성. 2,500자 이하, 숫자 중심, macro/fund/가격 흐름 분리. _brief_forbidden_sanitize() 추가.
scripts/pipeline/telegram_briefing_wrapper.py v2 섹션 렌더링 추가, 제목을 “아침 브리핑”으로 변경, 최종 visible body sanitizer 추가.

주요 금지어 필터:

z-score, z=, MA, 이동평균, 편차, 과열/과매도, 통계적 이상치,
표준편차, 변동성, 모멘텀, 차트, RSI, 볼린저, 브레이크아웃,
돌파, 저항, 지지, 이탈, 되돌림, 이상치, 통계값,
전문가들의 마켓 인사이트, 시장의 심리, 투자 전략 제안,
주목해야 할 시점, 긍정적인 흐름

4) 최종 dry-run 본문

검증 command:

cd /Users/ron/.hermes/workspace
python3 scripts/pipeline/telegram_briefing_wrapper.py --kind morning --dry-run

스캔 결과:

technical hits []
cringe hits []
bad_text hits []
message_chars 1256

본문 샘플:

<b>🌅 아침 브리핑</b>
<i>2026-04-16 09:39 KST</i>

<b>🧭 오늘 결론</b>
• 오늘은 유가 급락, 달러 약세, 금 강세가 동시에 나온 날이다. 한국장은 반도체·환율·유가 민감 업종을 분리해서 본다.

<b>🔢 핵심 숫자</b>
• 시장 지표는 <b>2026-04-15 수집, 전일 종가 기준</b>입니다.
• 미국 대형주 <b>6,951.24</b> (+0.9%)
• 나스닥 <b>23,558.09</b> (+1.6%)
• 코스피 <b>5,808.62</b> (-0.9%)
• 미국 10년금리 <b>4.26</b> (-0.9%)
• 달러지수 <b>98.14</b> (-0.2%)
• 원달러 <b>1,471.88</b> (-0.7%)
• 서부텍사스유 <b>91.87</b> (-7.3%)
• 금 <b>4,857.9</b> (+2.4%)

5) 1회 재실행 결과

실행 command:

cd /Users/ron/.hermes/workspace
python3 scripts/pipeline/telegram_briefing_wrapper.py --kind morning

결과:

[briefing_wrapper] kind=morning chars=1256 meta={"morning_briefing_ok": true, "stderr_signal": ""}
[SECTOR_TRACE] send_sector(report) caller=telegram_briefing_wrapper.py text='<b>🌅 아침 브리핑</b>\n<i>2026-04-16 09:40 KST</i>...'
[briefing_wrapper] send_result={"ok": true, "message_ids": [2399], "error": null, "chat_id": -1003522748967, "topic_id": 8, "transport": "telegram_api"}

6) 검증

python3 -m py_compile scripts/pipeline/morning_briefing.py scripts/pipeline/telegram_briefing_wrapper.py  # PASS
최종 body technical scan: 0건
최종 body cringe scan: 0건
최종 body bad_text scan: 0건
본문 길이: 1,256자
Telegram send: ok, msg_id 2399

남은 리스크

  • wrapper는 현재도 내부적으로 morning_briefing.py를 호출하며, LLM이 실행될 수 있다. 다만 quality gate 때문에 최종 사용자 본문은 deterministic compact v2로 정화된다.
  • “가격 흐름”은 technical 세부 용어가 아니라 역할 라벨로만 사용했다. 실제 금지어 스캔에는 걸리지 않았다.

자체평가

  • 정확성: 4.7/5 — 요청한 06:45 증거, 문제 5개, 수정, 1회 재발송, msg_id 확보 완료.
  • 완성도: 4.6/5 — 보고서와 재현 가능한 검증 로그 포함.
  • 검증: 4.8/5 — py_compile, dry-run, 금지어 scan, 실제 Telegram send 확인.
  • 최소 변경: 4.4/5 — morning briefing 관련 2개 파일만 수정. sanitizer는 중복 가드라 약간 넓지만 사용자-visible 품질 안정 목적상 필요.

종합: 4.6/5