virtual-insanity
← 리포트 목록

260416 macro quality redo

2026-04-16 macro [macro, quality, analyst, telegram, prompt, wrapper, phase17-followup]

매크로 품질 재점검 — technical 혼입 제거

결론

PASS. 07:05 자동 발송본(msg_id 2377)은 매크로 리포트 안에 technical 표현이 섞여 있었다. 프롬프트/context builder/sender wrapper를 같이 고쳐서, 최종 재발송본(msg_id 2393, 2026-04-16 09:11 KST)은 금지어 스캔 0건으로 확인했다.

최종 도달 증거:

2026-04-16T09:11:04 OK 2393 market -1003522748967 5 none

1) 07:05 발송본 캡처/진단

로그 근거:

~/.hermes/logs/analyst_macro_common_wrapper.log
[2026-04-16 07:05:43] send analyst=macro ok=True message_id=2377 status=success error=None

~/.hermes/logs/sector_trace.log
2026-04-16 07:05:41 [SECTOR_TRACE] send_sector(market) caller=analyst_common_wrapper.sh:macro ...

Telegram API로 과거 message body를 역조회하는 기능은 없어서, 실제 본문은 analyst_macro.log에 남은 생성 결과와 wrapper/sector trace를 기준으로 확인했다.

문제 예시:

fx_regime.dxy.driver: "... z=-2.11로 20일 하단 이탈 심화"
eurusd.driver: "z=2.51 — ... 주요 저항선 돌파"
real_economy.pmi_mfg: "구리 z=2.41, ... BDI z=2.46 ..."
telegram_interpretation_used.channel: "전문가들의 마켓 인사이트"
telegram_message: "경기 국면: 회복 — Cu z=2.41, BDI z=2.46 ..."

판정:

항목 결과
z-score/z= 혼입
MA/이동평균/편차류 프롬프트와 일부 raw 출력 경로에서 유입 가능
돌파/저항/지지 혼입
VIX/시장 스트레스 중심 문장 매크로 보조 변수 이상으로 확대됨
“전문가들의 마켓 인사이트” 본문/컨텍스트 label로 노출
“투자 전략”류 context source에서 유입 가능

2) 반영한 룰

해리 명확화 룰을 그대로 넣었다.

  • macro 금지: z-score, MA 대비, 이동평균, 편차, 과열/과매도, 통계적 이상치, 표준편차, 변동성 밴드
  • technical 전담: z-score, MA 대비, 편차, 이동평균, 변동성, 모멘텀, 차트 패턴, RSI, 볼린저 밴드, 브레이크아웃
  • macro 관장: CPI/PCE/GDP/고용/금리/FX/중앙은행 정책/유가/원자재 실물 지표와 해석

추가로 텔레그램 본문 품질을 위해 Risk-On/Off, Bull/Bear 같은 시장 jargon은 본문에서 한국어 설명형으로 바꾸게 했다.

3) 수정 파일

백업 생성:

/Users/ron/.hermes/workspace/scripts/analyst_common_sender.py.bak-macro-quality-20260416-085354
/Users/ron/.hermes/workspace/scripts/analyst_macro_prompt.md.bak-macro-quality-20260416-085354
/Users/ron/.hermes/workspace/scripts/analyst_runner.sh.bak-macro-quality-20260416-085354
/Users/ron/.hermes/workspace/scripts/knowledge_context_builder.py.bak-macro-quality-20260416-085354

수정 요약:

파일 수정 내용
analyst_macro_prompt.md 역할 경계 강화. 매크로≠테크니컬 명시. 금지어/허용 지표/자기검증 추가. “텔레그램 전문가/채널” 표현 제거.
analyst_runner.sh macro 실행 시 context injection에 금지어/클리셰/technical 전담 영역 명시.
knowledge_context_builder.py macro context 후보에서 technical/cliche 감점, title/source/summary sanitize, source path 축약으로 “전문가들의 마켓 인사이트” 노출 차단.
analyst_common_sender.py 최종 텔레그램 body 레벨에서 금지어/클리셰를 한 번 더 sanitize. macro 출력 섹션을 거시 원인/중앙은행/금리·물가/실물경제/FX/재정·원자재 중심으로 재구성.

핵심 패치 예시:

MACRO_FORBIDDEN_REPLACEMENTS = [
    (r"\bz[-_ ]?score\b\s*[=:]?\s*[-+]?\d+(?:\.\d+)?", ""),
    (r"\bz\s*=\s*[-+]?\d+(?:\.\d+)?", ""),
    (r"\bRSI\b\s*[=:]?\s*\d*(?:\.\d+)?", ""),
    (r"\bMA\d*\b\s*대비", "전월·전분기 대비"),
    (r"\bMA\d+\b|이동평균|이평선?", "최근 흐름"),
    (r"변동성\s*밴드|볼린저\s*밴드", "범위"),
    (r"변동성", "불확실성"),
    (r"차트\s*패턴|차트", "가격 흐름"),
    (r"모멘텀", "흐름"),
    (r"돌파", "상승"),
    (r"저항", "상단"),
    (r"지지", "받침"),
    (r"\bRisk[- ]?On\b", "위험자산 선호"),
    (r"\bRisk[- ]?Off\b", "위험회피"),
    (r"\bBull\s*시나리오", "상방 시나리오"),
    (r"\bBear\s*시나리오", "하방 시나리오"),
    (r"전문가들의\s*마켓\s*인사이트", "외부 매크로 해석"),
    (r"시장의\s*심리|시장\s*심리", "정책·경기 기대"),
    (r"투자\s*전략\s*제안|투자\s*전략", "거시 판단"),
]

4) 재실행/재발송 결과

1차 live rerun:

[2026-04-16 08:59:01] START generation analyst=macro
[2026-04-16 09:07:08] END generation analyst=macro rc=0
[2026-04-16 09:07:10] send analyst=macro ok=True message_id=2392 status=success

이후 본문에서 금지어는 없었지만 Risk-On/Bull jargon이 남아 sender 필터를 보강했다. 보강 후 최종 재발송:

[SECTOR_TRACE] send_sector(market) caller=analyst_common_sender.py:443 text='<b>🌍 매크로 리포트</b>...'
{"analyst": "macro", "ok": true, "message_id": 2393, "status": "success", "sector": "market", "chat_id": -1003522748967, "topic_id": 5, "body_len": 3879, "no_send": false}

최종 본문 샘플:

<b>🌍 매크로 리포트</b>
날짜: <code>2026-04-16</code> · 전송: <code>2026-04-16 09:11:03 KST</code>

<b>판정</b>
🔵 <b>Recovery</b> · 신뢰도 <b>65%</b>
• Recovery 유지(65%) — WTI -7.3% 급락(기뢰 제거+파이프라인 복구)으로 에너지 충격 완화 시작. 크레딧 축소·달러 약세·금리 안정은 위험자산 선호 전환 임계점 접근. 그러나 GPR 304·BEI 2.38% 고착·호르무즈 부분봉쇄 잔존으로 전환 유보. 상방 시나리오(25%): 휴전 합의 시 WTI $75·위험자산 선호 전환.

<b>📡 매크로 해석 컨텍스트</b>
• <b>getfeed</b> 유가가 인플레이션에 미치는 영향 — CPI 6%의 함정 — 유가→CPI 간접 전이 경로(식품·항공·운송), 스태그플레이션 경고
• <b>getfeed</b> 연준 전망: 견조한 성장, 단기적 인플레이션 상승 — 연준 GDP 2.4% 상향, 인플레 단기 상승 인정
• <b>kisthemacro</b> 키움 김승혁 매크로: 채권 Note_이란 사태 3주차 점검 — 한은 4Q 1회 인상 전환 전망, 국고3년 적정 레벨 3.35%

5) 검증

구문 검증:

python3 -m py_compile analyst_common_sender.py knowledge_context_builder.py  # PASS
bash -n analyst_runner.sh                                                 # PASS

context builder 누출 검사:

python3 knowledge_context_builder.py --analyst macro --hours 96 --max-chars 2200
context_lines 20
클리셰/경로 누출: 없음

최종 body scan:

MESSAGE_ID 2393
SENT_AT 2026-04-16T09:11:04
BODY_LEN 3879 LINES 58
FORBIDDEN_OR_JARGON_FOUND []

스캔 대상:

RSI, z-score, z=, MA 대비, 이동평균, 이평선, 편차,
과열, 과매수, 과매도, 통계적 이상치, 표준편차,
변동성, 변동성 밴드, 볼린저, 모멘텀, 차트, 브레이크아웃,
breakout, 돌파, Risk-On, Risk-Off, Bull, Bear,
전문가들의 마켓 인사이트, 시장의 심리, 투자 전략 제안, 투자 전략

남은 리스크

  • raw latest.json 내부에는 모델이 만든 Risk-On/Bull 같은 원문이 일부 남을 수 있다. 최종 텔레그램 본문은 sender에서 정화된다. 다음 정기 실행부터는 prompt/context도 강화되어 raw 혼입도 줄어들 것으로 예상된다.
  • regime enum에는 호환성 때문에 Risk-On|Risk-Off|Panic|Recovery가 남아 있다. 텔레그램 본문에서는 한국어 설명형으로 변환된다.

자체평가

  • 정확성: 4.7/5 — 해리 금지어 룰을 prompt/context/sender에 반영했고 최종 발송본 스캔 0건.
  • 완성도: 4.6/5 — message_id 확보, 보고서, 백업, 검증까지 완료.
  • 검증: 4.7/5 — py_compile, bash -n, context leak scan, body forbidden scan, Telegram send evidence 확인.
  • 최소 변경: 4.4/5 — macro 품질 경계에 필요한 4개 파일만 수정. context builder는 source scoring도 만져 범위가 약간 넓지만 목적상 필요.

종합: 4.6/5