아침 브리핑 품질 개선 — 로그 제거·모델 상향·프롬프트 축소
결론
해리 피드백 3가지를 모두 반영했다.
- Telegram 본문에 섞이던 실행 로그 제거 완료.
ollama/qwen2.5:3b기본 사용을 중단하고openai-codex/gpt-5.4 → github-copilot/gpt-4o-mini순서로 상향했다.- LLM이 실패해도 이상한 3B 출력 대신 짧은 한국어 deterministic fallback을 보내게 했다.
- 프롬프트는 2,500자 이내·한국어 전용·6개 섹션으로 단순화했다.
- launchd kickstart로 1회 라이브 재발송 성공:
message_id=2353.
확인한 기존 문제
1. 실행 로그가 본문에 섞임
근거 파일: /private/tmp/claude-501/.../bt3dup5gb.output
[2026-04-15 16:55:56] === 모닝 브리핑 시작: 2026-04-15 (수) ===
[2026-04-15 16:55:56] 데이터 수집 시작: 2026-04-15
[2026-04-15 16:55:56] 수집 완료: {"indicators_count": 87, "anomalies_count": 32, "hypotheses_count": 6, "experiments_count": 0, "ideas_count": 20, "sector_news_count": 0}
[2026-04-15 16:55:56] LLM 호출: 프롬프트 10758자
[2026-04-15 16:58:03] 브리핑 생성 완료: 7893자 (모델: ollama/qwen2.5:3b)
원인:
- shared.log.make_logger()가 stdout에 로그를 찍음.
- morning_briefing.py --dry-run도 stdout에 본문을 찍음.
- telegram_briefing_wrapper.py가 stdout 전체를 <pre>로 감싸서 발송함.
2. 모델이 작음
기존 로그:
[2026-04-15 16:58:03] 브리핑 생성 완료: 7893자 (모델: ollama/qwen2.5:3b)
문제:
- openai-codex/gpt-5.4가 Codex token refresh 401로 실패.
- OpenRouter key 없음.
- ollama/qwen2.5:3b가 성공하면서 낮은 품질 출력이 그대로 채택됨.
3. 섹션 반복·영어/번역투
기존 출력 일부:
#### 네이버 시스템
---
**1. 주요 경제 동향 및 활성 가설 분석**
- **주요 경제 동향**:
- WTI 원유 가격이 한 달간 -7.3% 급락하며, 지정학적 위험(GPR 304)과 디센트크랙(-12.5%) 및 히팅오일(-9.3%)의 동반 붕괴로 인해 원유 가격 하락이 주요 요인으로 분석된다.
- 반도체 산업에서, SOX 지수는 한 달간 +18% 상승하며, z-score가 2.28로 과열 상태를 보이고 있다.
- **활성 가설 분석**:
- [S50_에너지] 교차 연결: 에너지 전환과 관련 인프라 투자 수혜에 대한 재해석 가능성이 제기된다.
- [S10_반도체기술] Lumotive의 Optical breakthrough가 AI반도체 수요 지속성 vs 피크아웃 리스크 판단과 연결될 수 있다.
- [S30_산업재방산] 이란 전쟁 충돌로 IEA가 4억 배럴 유량 방출이 발생할 경우, 미국 약세와 함께 한국의 방산 산업에 긍정적인 영향을 미칠 수 있다.
- [S60_금융] 금리 인상과 보유세 상승이 동시에 가속화될 경우, 은행 주택담보대출 수익 증가 예측과 반대되는 경로를 형성할 것.
- **최근 발견**:
- IBM 메인프레임 시대의 중앙집중형 전산 구조에서 분산·수평적 아키텍처로의 전환에 따른 확장성 향상 및 단일장애점(SPOF) 감소.
- Netflix의 binge drop 기능으로 TV 시청 경험을 개선하는 등 디테일한 사용자 경험 제공이 중요해진 추세.
- **실험 판정**:
- 최근 7일 동안의 활성 가설은 아직 확인되지 않았다.
---
**2. 다음 주 경제 캘린더**
- **17일 한국은행 기준금리 결정**: 한국은행이 발표하는 기준 금리를 통해 국내 금융 시장의 움직임을 예측할 수 있다.
- **17일 ECB 금리 결정**: 유럽중앙 bank(ECB)의 금리 결정도 주요 경제 동향 중 하나이며, 이는 글로벌 금융 시장에 큰 영향을 미칠 수 있다.
---
**3. 결론**
주요 경제 동향은 원유 가격 하락과 반도체 산업의 성장세를 중심으로 진행되고 있으며, 이를 바탕으로 활성 가설들이 제기되었다. 다음 주에는 한국은행 기준금리 결정이 예정되어 있으므로 이에 대한 주시가 필요하다.
---
**4. 참고 자료**
- [S50_에너지] 교차 연결: 재해석 가능
- [S10_반도체기술] Lumotive의 Optical breakthrough: 추가 검증 필요
- [S30_산업재방산] 이란 전쟁 충돌 유량 방출 시기: 긍정적 영향 가능성
- [S60_금융] 금리 인상과 보유세 상승 동시 가속화: 은행 주택담보대출 수익 예측 반대
---
**5. 활성 가설 검토**
- **[S50_에너지]** 에너지 전환 관련 중소형 기업의 자금 조달 비용 하락 가능성
- **[S10_반도체기술]** AI반도체 수요 피크아웃 경계에서 미래에셋 윤재홍 ETF의 편입 비중 변화 가능성
- **[S30_산업재방산]** 이란 전쟁 충돌 유량 방출 시기: 한국 방산 산업에 긍정적 영향 가능성
- **[S60_금융]** 은행 주택담보대출 수익 증가 예측과 반대의 경로 형성 가능
---
**6. 활성 가설 검토 방법**
- [S50_에너지] 에너지 전환 관련 중소형 기업들의 자금 조달 비용 하락 가능성: 실제 투자 프로젝트와 유관 기업들의 움직임을 모니터링하여 확인할 수 있다.
- [S10_반도체기술] AI반도체 수요 피크아웃 경계에서 미래에셋 윤재홍 ETF의 편입 비중 변화 가능성: ETF의 구성과 주식 시장 움직임을 통해 추적할 수 있다.
- [S30_산업재방산] 이란 전쟁 충돌 유량 방출 시기: IEA와 관련
문제: - “네이버 시스템” 같은 무의미 헤더. - 활성 가설이 5/6/7번 섹션에 반복. - 영어 원문 제목과 어색한 번역체가 섞임.
수정 내역
morning_briefing.py
파일: /Users/ron/.hermes/workspace/scripts/pipeline/morning_briefing.py
핵심 변경:
- contextlib.redirect_stdout(sys.stderr)로 생성 중 로그를 stderr로 분리.
- stdout에는 최종 브리핑 본문만 출력.
- 기본 모델 체인을 아래로 변경:
- openai-codex/gpt-5.4
- github-copilot/gpt-4o-mini
- 작은 로컬 qwen2.5:3b는 기본 체인에서 제외.
- 환경변수로 모델 체인 조정 가능:
- MORNING_BRIEFING_MODEL_CHAIN
- MORNING_BRIEFING_MAX_TOKENS
- MORNING_BRIEFING_TEMPERATURE
- 프롬프트를 “한국어 전용 / 2,500자 이내 / 6개 섹션 / 반복 금지”로 재작성.
- LLM 실패 시 generate_compact_korean_briefing()으로 짧고 안정적인 한국어 브리핑 생성.
- _postprocess_briefing_text()로 로그 패턴, 무의미 헤더, 중복 섹션, 긴 영문 토큰 제거.
주요 함수 위치:
64: _morning_model_chain()
725: build_llm_messages()
903: generate_compact_korean_briefing()
1115: _postprocess_briefing_text()
telegram_briefing_wrapper.py
파일: /Users/ron/.hermes/workspace/scripts/pipeline/telegram_briefing_wrapper.py
핵심 변경:
- wrapper에서 로그 라인 필터링 추가.
- <pre> 전체 감싸기 제거. 일반 Telegram 텍스트로 읽히게 변경.
- 유동성/채권/일정 중복 header 제거. morning_briefing.py 본문 중심으로 발송.
- LLM 실패는 fallback으로 처리되므로 해리 메시지에는 내부 실패 로그를 노출하지 않음.
- weekly 시장 조회 실패 문구도 영어 티커 나열 대신 한국어 문장으로 축약.
주요 함수 위치:
152: _clean_briefing_body()
170: _stderr_signal()
188: build_morning_message()
219: _weekly_market_lines()
검증
구문/런트 검증
python3 -m py_compile morning_briefing.py OK
python3 -m py_compile telegram_briefing_wrapper.py OK
bash -n morning_briefing_wrapper.sh OK
bash -n weekly_briefing_wrapper.sh OK
plutil -lint morning-briefing-telegram.plist OK
plutil -lint weekly-briefing-telegram.plist OK
dry-run 품질 체크
자동 체크:
no_timestamp_logs=True
no_pre_block=True
no_qwen=True
no_duplicate_hypothesis_header=True
has_korean_sections=True
샘플 첫 20줄:
<b>🌅 아침 투자 브리핑</b>
<i>2026-04-15 17:15 KST / LLM</i>
# 🌅 아침 투자 브리핑 — 2026-04-15 (수)
## 1. 오늘 한 줄
- 유가 하락과 금 강세가 동시에 보이는 만큼, 성장주 반등보다 매크로 위험 신호를 먼저 확인해야 합니다.
## 2. 시장 온도
- 미국 대형주 6951.24 (+0.9%)
- 나스닥 23558.09 (+1.6%)
- 변동성지수 18.46 (-3.5%)
- 미국 10년금리 4.26 (-0.9%)
- 달러지수 98.14 (-0.2%)
- 원달러 1471.88 (-0.7%)
- 서부텍사스유 91.87 (-7.3%)
- 금 4857.9 (+2.4%)
- 이상치: 변동성지수 공포지수 19.12→18.46 (-3.45%) 급락 / 달러인덱스 통계값=-2.11, 20일 이동평균(99.47) 대비 하락 이탈 / 통계값=2.51, 20일 이동평균(1.16) 대비 상승 이탈
## 3. 유동성·매크로
- 국면: 유동성 축소 — 흡수 국면 순유동성 $+5.95T 전주 $-0.1B 연준자산 $+6.69T 전주 $0.0B 역레포 $+0.3B 전주 $+0.1B 재무부계정 $+0.75T 전주 $0.0B 지급준비금 $+3.12T 전주 $0.0B 재무부계정 증가 또는 연준 자산 감소로 시장에서 자금이 회수되고 있음. → 단기 위험자산 비중 축소. 연준 정책 전환 시점 주시
- 매크로는 회복 국면(확신도 57%), 포지셔닝은 적극. 에너지 복합체 전면 급락이 핵심 변화. 지정학위험 304 극단에도 시장은 수요 약화 반영. 산업금속(구리 통계값=2.41, 벌크운임 통계값=2.46) 강세 지속으로 에너지 대비 비에너지 이분화 구조 심화. 달러 약세 가속(달러지수 통계값=-2.11)은 글로벌 유동성 완화 방향
## 4. 해리 체크포인트
LLM 라우팅 검증
라이브 kickstart 당시 LLM 로그:
[
{
"ts": "2026-04-15T17:16:10.717362+09:00",
"model": "openai-codex/gpt-5.4",
"caller": "llm_chat_direct",
"error": "HTTP Error 500: Internal Server Error | {\"error\": {\"message\": \"Internal server error: Codex token refresh failed with status 401.\", \"type\": \"server_error\", \"param\": null, \"code\": null}}",
"latency_ms": 345,
"response_chars": 0
},
{
"ts": "2026-04-15T17:16:19.031854+09:00",
"model": "github-copilot/gpt-4o-mini",
"caller": "llm_chat_direct",
"error": null,
"latency_ms": 8313,
"response_chars": 608
}
]
해석:
- Codex gpt-5.4는 현재 gateway token refresh 401로 실패.
- 그 다음 github-copilot/gpt-4o-mini가 성공.
- 더 이상 ollama/qwen2.5:3b로 떨어지지 않는다.
라이브 발송 결과
명령:
launchctl kickstart -k gui/501/com.openclaw.morning-briefing-telegram
결과 로그:
[briefing_wrapper] kind=morning chars=2925 meta={"morning_briefing_ok": true, "stderr_tail": ""}
[SECTOR_TRACE] send_sector(report) caller=telegram_briefing_wrapper.py text='<b>🌅 아침 투자 브리핑 · Telegram</b>\n<i>2026-04-15 16:49 KST / source=morning_briefing.'
[briefing_wrapper] send_result={"ok": true, "message_ids": [2352], "error": null, "chat_id": -1003522748967, "topic_id": 8, "transport": "telegram_api"}
[briefing_wrapper] kind=morning chars=665 meta={"morning_briefing_ok": true, "stderr_signal": ""}
[SECTOR_TRACE] send_sector(report) caller=telegram_briefing_wrapper.py text='<b>🌅 아침 투자 브리핑</b>\n<i>2026-04-15 17:16 KST / LLM</i>\n\n# 🌅 아침 투자 브리핑 — 2026-04-15'
[briefing_wrapper] send_result={"ok": true, "message_ids": [2353], "error": null, "chat_id": -1003522748967, "topic_id": 8, "transport": "telegram_api"}
결과:
- 재실행 성공
- message_id=2353
- topic_id=8 report 토픽
- last exit code=0
weekly 점검
weekly wrapper도 같은 Telegram wrapper 파일을 통과하므로 함께 점검했다.
수정:
- 시세 조회 실패 시 S&P500/NASDAQ/DOW 영어 에러를 그대로 노출하지 않음.
- 한국어 문장으로 축약: “시장: 현재 실행 환경에서 시세 조회 실패 — 다음 정기 실행에서 재시도”
샘플:
[briefing_wrapper] kind=weekly chars=360 meta={"done": 18, "queued": 5, "avg_kpi": "N/A", "discoveries": 0}
<b>📅 주간 운영·시장 리포트 · Telegram</b>
<i>2026-04-08 ~ 2026-04-15 / source=weekly-telegram-wrapper</i>
<b>운영</b>
완료 작업 18건 / 현재 대기 5건 / 에이전트 평균 KPI N/A점
<b>시장</b>
시장: 현재 실행 환경에서 시세 조회 실패 — 다음 정기 실행에서 재시도
<b>파이프라인 발견</b>
이번 주 발견 0건
<b>유동성</b>
연준 순유동성 $+5.95T (전주 $-0.1B) / 국면: 유동성 축소 — 흡수 국면 / 단기 위험자산 비중 축소. 연준 정책 전환 시점 주시.
<b>최근 일간 리포트</b>
일간 리포트: 데일리 마켓 인텔리전스
남은 리스크
openai-codex/gpt-5.4는 여전히 Hermes gateway token refresh 401로 실패한다. 현재는github-copilot/gpt-4o-mini가 성공해 품질을 보완한다.- Codex sandbox 내부에서는 외부 DNS가 막혀 LLM/Telegram 직접 호출이 실패하지만, launchd 환경에서는 실제 발송 성공을 확인했다.
- 실제 Telegram 메시지 전문은 Bot API로 사후 조회할 수 없어, 보고서에는 dry-run 샘플과 launchd 발송 로그/message_id를 함께 기록했다.
자체평가
- 정확성: 4.7/5 — 해리 지적 3개 원인 모두 제거/완화. 라이브 message_id 확인.
- 완성도: 4.6/5 — fallback까지 안정화. 단, gpt-5.4 token refresh 문제는 별도 인증 이슈.
- 검증: 4.6/5 — py_compile, bash -n, plutil, dry-run, launchd kickstart, message_id 확인 완료.
- 최소 변경: 4.5/5 — TTS/plist는 유지, 품질 문제 파일 2개만 수정.
종합: 4.6/5