EVENING §1~§2.5 중복 제거 설계안¶
작성: S297 (2026-05-22) | 상태: 설계 — PM 검토 대기 발단: PM 지적 — "§1~§2.5에 중복 내용이 너무 많다. 에이전트가 각자 다른 질문에 답하는데 중복이 있냐."
1. 문제 — 중복 맵¶
§1~§2.5는 6개 에이전트 산출. 같은 원시 지표·결론이 반복 서술된다.
| 산출 섹션 | 에이전트 .md | 고유 질문 |
|---|---|---|
| §1 글로벌 매크로 | evening/macro-interpreter.md |
4축(금리/원자재/환율/유동성) → 내일 한국 영향 |
| §2 섹터 자금흐름 | evening/sector-flow.md |
미장 섹터 → 한국 전이 테마 |
| §2.5 3축 진단 | macro/triaxis-diagnoser.md |
4축(성장/인플레/유동성/신용) → 사이클 위치 + 전환 임박 |
| §2.5 외인 자본흐름 | macro/capital-flow-tracker.md |
외인 추세 vs 일회성 + 환율 동조 |
| §2.5 파생/포지셔닝 | postmarket/derivatives.md |
파생 4분면(선물 주체별/옵션/COT/야간) |
| §2.5 인터마켓 | macro/intermarket-leader.md |
자산군 시퀀스 → KOSPI 환경 + favored_angles |
Type A — 원시 지표 재서술 (같은 수치를 여러 에이전트가 처음부터 다시 서술)¶
| 지표 | 중복 등장 | 횟수 |
|---|---|---|
| 10Y 4.67% + 2-10 커브 0.54% steepening | §1 금리 / triaxis #2 / capflow #3 / intermarket #3 | 4 |
| HY OAS 2.86% benign | §1 금리 / triaxis #2 / capflow #3 / intermarket #4 | 4 |
| WTI $100.82 post_peak | §1 원자재 / triaxis #1 / intermarket #1 | 3 |
| VIX 17.x normal·contango | §1 유동성 / 파생 #2 / capflow #3 | 3 |
| USD/KRW 1,508 원화 약세 | §1 환율 / capflow #2 | 2 |
Type B — 결론 중첩 (판정 자체가 겹침)¶
| 결론 | 중복 에이전트 | 문제 |
|---|---|---|
| 외인 선물 5d 표 (-1,982 / 5/21 -4,429) | capital-flow #1 ↔ derivatives #1 | 거의 동일한 표·분석을 양쪽이 각자 작성 |
| 사이클 = Late Expansion / late_expansion_consistent | triaxis #3 ↔ intermarket #1·#5 | M1·M8이 같은 사이클 결론을 따로 도출 |
2. 원인¶
- 공유 입력 재서술: 6개 에이전트가 동일한
global_assets.json을 각자 소비. 자기 고유 분석 전에 원시 지표(10Y·커브·HY·WTI·VIX)를 처음부터 다시 서술. 프롬프트에 "원시 지표 재서술 금지" 출력 제약이 없다. - 산출 경계 중첩: triaxis(M1)·intermarket(M8)이 둘 다 "사이클 위치"를 산출. capital-flow(M5)·derivatives(P1-1)가 둘 다 외인 선물 5d를 1차 데이터로 다룸.
3. 설계 원칙 — "1 항목 = 1 owner. 나머지는 인용만"¶
각 지표/결론에 단일 owner 에이전트를 지정한다. 비-owner 에이전트는 그 항목을 재서술하지 않고, 자기 판정 근거로 1줄 인라인 인용만 한다 (별도 서술 문단·표 금지).
Owner 테이블¶
| 항목 | Owner | 비-owner 처리 |
|---|---|---|
| 10Y/2Y/커브/HY (금리·신용 원시) | macro §1 | 판정 근거로 수치 1회 인라인 인용. 별도 금리/신용 문단 금지 |
| WTI/구리/금 (원자재 원시) | macro §1 | 동일 |
| USD/KRW/DXY (환율 원시) | macro §1 | capital-flow는 "환율 동조 판정"만, 원시 추세 서술은 §1 인용 |
| VIX/텀구조 원시값 | macro §1 | derivatives는 옵션 P/C·Max Pain만 작성. VIX 수치는 §1 인용 |
| 사이클 위치 (Late Expansion 등) | triaxis | intermarket은 사이클 재판정 금지 — triaxis 결론 1줄 인용 후 "자산군 시퀀스 관점 보강"만 |
| 외인 선물 5d 표 | derivatives | capital-flow는 표 재게시 금지 — derivatives 표 인용 + "추세 vs 일회성 + 환율 동조" 판정만 |
| 한국 전이 테마 | sector-flow | 유지 (중복 없음) |
| favored_angles / KOSPI 환경 라벨 | intermarket | 유지 (고유 산출) |
Owner 분리 후 각 에이전트의 순수 고유 산출¶
- macro §1: 원시 4축 + 한국 영향 1줄 + 거시→한국 회전 연결표 (원시 지표의 유일한 주인)
- sector-flow §2: 한국 전이 테마
- triaxis: cycle_position + transition_imminent (원시는 §1 인용)
- capital-flow: 외인 verdict(recent/sustained outflow/inflow) + fx_correlation (선물 표는 derivatives 인용)
- derivatives: 외인 선물 5d 표 + VIX/옵션/COT/야간선물 포지셔닝
- intermarket: 자산군 시퀀스 라벨 + favored_angles + KOSPI 발굴 환경 (사이클은 triaxis 인용)
→ 에이전트 6개 전부 유지. 폐기·병합 없이 출력 경계만 분리하면 Type A·B 중복이 모두 사라진다.
4. 필요한 변경¶
4-1. 프롬프트 출력 제약 (코드 변경 — step 프롬프트)¶
macro/* 3개 에이전트(triaxis/capital-flow/intermarket)는 공유 에이전트 — macro-economist 도메인 등 다른 호출자도 사용. 따라서 dedup 제약을 공유 .md에 넣으면 안 된다 (standalone 호출 시 §1이 없어 깨짐).
→ 제약은 evening step 프롬프트에만 주입:
- step_triaxis.py / step_capital_flow.py / step_intermarket.py / step_derivatives.py 프롬프트에 다음 1블록 추가:
"이 산출은 EVENING 리포트 §2.5에 들어간다. §1 글로벌 매크로가 원시 지표(10Y·커브·HY·WTI·VIX·환율)를 이미 서술했다. 원시 지표를 재서술하지 말 것 — 자기 판정 근거로 수치 1회 인라인 인용만. {에이전트별 owner 규칙}" - 에이전트별 owner 규칙은 §3 Owner 테이블 그대로.
4-2. evening 전용 에이전트 (.md 직접 수정 가능)¶
evening/macro-interpreter.md: 변경 없음 (원시 지표 owner — 현행 유지).evening/sector-flow.md: 변경 없음 (중복 없음).
4-3. 인터-에이전트 참조 경로 (선택)¶
비-owner가 "§1 참조"하려면 §1 산출을 받아야 정확히 인용 가능. 두 방안: - (A) 입력 비전달 + 출력 제약만: 에이전트는 global_data를 그대로 입력받되, 출력에서 원시 지표 문단을 쓰지 않도록 제약. 수치는 자기가 본 global_data에서 인라인 인용. → 코드 변경 최소(프롬프트만). 권장. - (B) §1 산출 전달: macro 산출(sec1)을 이후 step에 인자로 전달. 정확한 "§1 참조"가 되나 step 함수 시그니처 4개 변경 필요. - Phase B 실행 순서상 macro가 가장 먼저 실행되므로 (B)도 가능하나, (A)로 충분 — 원시 수치는 어차피 같은 global_data 출처.
5. 변경 범위 요약¶
| 파일 | 변경 | 비고 |
|---|---|---|
step_triaxis.py |
프롬프트에 dedup 제약 블록 추가 | owner: 사이클 |
step_capital_flow.py |
동일 | 선물 표 인용, 환율 판정만 |
step_intermarket.py |
동일 | 사이클 인용, 시퀀스+angle만 |
step_derivatives.py |
동일 | VIX 원시 §1 인용, 선물 표 owner |
macro/*.md 3개 |
수정 안 함 | 공유 에이전트 — standalone 호환 보존 |
evening/*.md 2개 |
수정 안 함 | macro=owner, sector=중복 없음 |
코드 변경 = step 프롬프트 4곳. 에이전트 .md 변경 0. 에이전트 개수 6개 유지.
6. 대안 — 에이전트 통폐합 (미채택 제안)¶
triaxis↔intermarket 병합, capital-flow↔derivatives 병합도 검토 가능하나: - intermarket의 favored_angles, capital-flow의 fx_correlation은 고유 산출 — 병합 시 큰 에이전트로 비대해짐. - 원자화 원칙(1 에이전트 = 1 질문)에 역행. - → owner 분리(§3)로 중복은 이미 제거됨. 통폐합 불필요.
7. 미적용 시 영향¶
- 리포트 §1~§2.5가 계속 같은 수치를 4회까지 반복 → PM 가독성 저하, 리포트 길이 불필요 팽창(현 59KB).
- 중복 서술 간 수치 불일치 리스크(예: VIX §1 "17.81" vs 파생 "17.57" — 실제 현 리포트에 존재) — owner 단일화로 해소.
8. 구현 결과 (S297 — 본 설계안과 일부 상이)¶
PM과의 대화로 §4 "option A(출력 제약만)"보다 강한 방향으로 확정·구현됨:
- MORNING 패턴 이식 — POST_MARKET·MORNING이 이미 "데이터 unit 분리 + 상류 출력 전달"을 쓰고 있음을 확인. EVENING도 동일 적용: macro §1 = 원시 지표 단일 owner, triaxis/intermarket이 raw global_data가 아닌 §1·triaxis 출력 마크다운을 입력받음.
- derivatives + capital-flow 폐기 — §6 "통폐합 미채택"을 넘어 두 에이전트를 EVENING에서 완전 폐기. 사유: 파생 포지셔닝은 forward edge가 약하고(방향 결론을 못 냄), POST_MARKET UNIT 2와 중복, 야간선물은 MORNING이 적기. §2.5 = triaxis + intermarket(매크로 사이클)만.
→ 본 문서의 §3 owner 테이블·§4·§6은 S297 구현으로 대체됨. 최신 상태는 work_log 2026-05-22_S297_evening_dedup_policy_writeback.md 및 Topic M M.2.37 참조.