콘텐츠로 이동

에이전트 프레임워크 v3

작성: 2026-05-15 v2 대비 변경: - 리포트 기반 에이전트(evening/postmarket)의 최신 해석 관점 반영 - 반도식적 해석 규율 추가 (학습 데이터 의존 경계) - 도메인별 해석 프레임워크를 실제 에이전트 스펙 수준으로 상세화 - 도메인 관통 핵심 질문 명시


핵심 아키텍처 (v2 유지)

원자 에이전트 (LLM)          synthesize.py (코드)        서술 에이전트 (LLM)
 도메인 해석 + 점수화    →    결정론적 종합 판정     →    사람이 읽을 리포트

LLM이 GO/WAIT/PASS를 결정하지 않는다. 코드가 결정한다.


0. 해석 규율 (모든 에이전트 공통)

0-A. 반도식적 해석 (Anti-Formulaic Reasoning)

LLM은 학습 데이터에서 "A이면 B"라는 도식을 꺼내는 경향이 있다. 이건 종종 틀리거나 과도하게 단순하다.

규칙: 인과 주장 시 경로 검증 의무

❌ "관세 부여 → 인플레이션" (학습 도식)
✅ "관세 → 1) 소비자 수요 감소 + 2) 공급자 비용 흡수(가격 미전가)
    → 초기 디플레 압력 → 공급자 마진 한계 → 그때서야 가격 전가 → 인플레
    → 시차: 6~18개월. 즉 관세 즉시 인플레는 도식적 해석."

모든 에이전트에 적용되는 체크리스트:

# 체크 방법
1 "A → B"라고 쓰려 할 때, B가 정말 발생하는가? 반대 사례 1개 이상 검색 (WebSearch)
2 발생한다면 어떤 조건에서? 조건 명시 (예: "공급자가 가격 전가할 수 있을 때만")
3 어떤 경로로, 얼마나 걸리는가? 중간 단계 + 시차 명시
4 현재 상황이 그 조건에 해당하는가? 현재 데이터로 확인

금지 표현: - "일반적으로 ~하는 경향이 있다" (학습 데이터 재생산) - "~이므로 당연히 ~" (도식적 비약) - "시장이 ~을 우려하고 있다" (주어 없는 심리 투사)

대체 표현: - "X 연구(2024)에 따르면 조건 Y일 때 B가 발생 (source_ref)" - "현재 데이터(Z)가 조건 Y에 해당하므로 B 가능성 있음" - "반대로 조건 W이면 B가 아닌 C가 발생할 수 있음"

0-B. 데이터 프레임: 변화+누적 (v1 유지)

모든 수치 데이터:

value: 현재값
change_1d / change_5d / change_20d
streak: 같은 방향 연속 일수
direction: accelerating | maintaining | decelerating | reversing | mixed

1일 데이터로 추세 판정 금지. 3일 연속 확인 필수.

0-C. 도메인 관통 핵심 질문

테마 선정, 재료 검증, 종목 판별, 실적 해석 모든 곳에서 반복 적용:

# 질문 적용
Q-S 구조적 변화인가, 일시적인가? material-validator Q1, 테마 lifecycle
Q-P 공급자 우위/독점/과점인가? substance-check, 종목 구조 평가
Q-D 더 비싸게라도 사야 하는 상품인가? substance-check, 수요 탄력성
Q-G 정책적 뒷받침이 있는가? material-validator Q3, POLICY_TRACKER
Q-V 현재 가격에 이미 반영되어 있는가? material-curator priced_in, PER 해석

1. 표준 출력 스키마 (v2 유지)

{
  "domain": "chart | flow | material | fundamentals | environment",
  "code": "042700",
  "name": "한미반도체",
  "as_of": "2026-05-15T16:30:00+09:00",
  "verdict": "긍정 | 중립 | 부정",
  "score": 8,
  "confidence": 0.85,
  "key_evidence": "수치 포함 1~2문장",
  "risk_factor": "1문장",
  "data_frame": { ... },
  "domain_specific": { ... }
}

2. 도메인 에이전트 상세 (v3 — 리포트 에이전트 관점 반영)

2-1. chart-analyst (불균형 기반)

질문: "시장참여자의 불균형이 매수를 지지하는가?"

해석 프레임워크: C10 불균형 4Layer

Layer 질문 데이터 판단
A 공간 불균형이 어디에 있는가? VP POC/HVN/LVN + sr_levels 현재가가 합의구간 안/밖, FVG 위치
B 동태 만들어지고 있나 해소되고 있나? VSA effort-vs-result + delta 생성 중 = 방향성, 해소 중 = 에너지 소진
C 귀속 누가 만들었나? 투자자별 체결 + 체결강도 외인/기관 = 신뢰, 개인 단독 = 경계
D 방향 상위TF가 지지하나? 주봉/월봉 구조 수렴 = 확신, 충돌 = 경고

phase_bias 조건부 해석 (같은 패턴도 맥락에 따라 반대 해석):

상승 중 climax_buying → trend_acceleration (67% win)
하락 중 climax_buying → dead_cat_bounce (0% win, 절대 진입 금지)
횡보 중 high_volume → accumulation_absorption

구조 무결성: - intact → hl_break → hh_hl_break → ll_confirmed (단계별 악화) - ll_confirmed = STOP (다른 축 무관)

SL 품질: - HVN 기반 = strong (합의 구간이 지지) - LVN 기반 = weak (빈 공간, 무너지면 급락) - SL >7% = "포지션 축소 권고"

domain_specific 추가 필드:

{
  "imbalance_map": "POC 385K, 현재가 420K VA 상단",
  "imbalance_dynamic": "generating — delta 양수 확대 중",
  "phase_bias": "accumulation_absorption",
  "structure_break_stage": "intact",
  "sl_vp_quality": "strong_HVN"
}


2-2. flow-analyst (수급 패턴 기반)

질문: "이 종목의 수급이 매수를 뒷받침하는가?"

해석 프레임워크: SEN-1 수급 패턴 분류

6패턴: 매집/추격/차익실현/전환/혼조/폭탄

주체간 동조 분석: | 분류 | 의미 | |------|------| | dual_buy | 외인+기관 동시 매수 → 가장 강한 신호 | | foreign_led | 외인 매수 + 기관 매도 → 방향성 있으나 편향 | | inst_led | 기관 매수 + 외인 매도 → 단기 수급 | | individual_only | 개인만 매수 → 추격 가능성 |

판정: - GO: dual_buy 또는 한 주체 매집 + 다른 주체 비매도 - CAUTION: 한쪽만 주도 (편향) - STOP: 차익실현 패턴 또는 individual_only

반도식적 해석 적용:

❌ "외인 순매수 = 상승 신호"
✅ "외인 5d 누적 +85만주(매집 streak 4일)인데, 20d 누적은 -180만주.
    장기 매도 추세 속 단기 반전. 3일 더 확인 필요."


2-3. material-analyst (재료→가치사슬 추적)

질문: "카탈리스트가 구조적인가, 실제 매출에 닿는가, 선반영되었는가?"

3단계 해석:

Stage 1: 재료 등급 (NC-3)

카탈리스트 3요소: | 요소 | HIGH | LOW | |------|------|-----| | 타이밍 | 2주 내 임박 | 불확실 | | 실현 확률 | 법안 통과/계약 확정 | 검토 중/루머 | | 밸류에이션 영향 | 매출 10%+ 변동 | 심리적 영향만 |

등급: S(전부 HIGH+미반영) / A(2 HIGH) / B(1 HIGH) / C(전부 LOW) / D(한국 무관)

Stage 2: 구조적 검증 (4Q Binary)

Q 질문 Y 기준
Q1 반복적/구조적? ISSUE_LOG 2회+
Q2 실체 있음? 수주/계약/매출 확인 가능
Q3 정책 뒷받침? 법/예산/규제 확인
Q4 시장이 인식? 증권사 2+ 또는 거래량 150%+

4Y=structural, 3Y=semi, ≤2Y=temporary, Q2=N이면 최대 semi

Stage 3: 선반영 판정 (3기준 중 2개) 1. 같은 뉴스 2주 내 5건+ (WebSearch 확인) 2. 테마/종목 이미 20일간 +15%+ 3. 유사 재료에 대한 시장 반응 감소 추세

가치사슬 추적 (propagation path):

❌ "반도체 관세 완화 → 반도체 테마 수혜"
✅ "반도체 관세 완화 → GPU 수출 확대 → HBM 탑재량 증가
    → SK하이닉스(HBM 공급 M/S 50%+, direct)
    → 한미반도체(TC본딩 독점, direct)
    → 솔브레인(식각액, indirect)"

반도식적 해석 적용:

❌ "관세 → 인플레 → 금리 인상 → 성장주 하락"
✅ "관세 → 1)소비 감소 + 2)공급자 비용 흡수 → 초기 디플레
    → 시차 후 공급자 마진 한계 시 가격 전가 → 인플레
    → 현재 조건: 공급자 여력 충분 (OP margin 15%+)
    → 즉각 인플레 가능성 낮음. 6개월 후 재확인 필요."

domain_specific 추가 필드:

{
  "catalyst_grade": "S",
  "structural_grade": "4Y_structural",
  "freshness": "Fresh",
  "freshness_days": 2,
  "priced_in": "no",
  "priced_in_evidence": ["뉴스 2건(5건 미달)", "20d +8%(15% 미달)", "반응 유지"],
  "propagation": "NVIDIA 매출↑ → HBM 수요↑ → SK하이닉스(M/S 50%, direct) → 한미반도체(TC본딩 독점, direct)",
  "theme": "AI반도체/HBM",
  "causal_verification": "HBM 수요 증가가 한국 수출에 반영되는지 → 4월 수출 +152.5% YoY 확인(관세청)"
}


2-4. fundamentals-analyst (가격 정당성 기반)

질문: "이익이 개선되고 있는가? 현재 가격이 정당화될 수 있는가?"

해석 프레임워크: 단순 지표 나열이 아닌 가격과의 관계 해석

Step 1: 이익 방향 (DART 3~4분기) - 영업이익 YoY 시퀀스: 가속/유지/감속/적자전환 - Accrual Ratio (영업이익/영업CF): 0.8~1.2 정상, CF 음수+이익 양수=RED_FLAG

Step 2: 시장 기대 수준 (PER 해석)

PER은 "비싸다/싸다"가 아니라 "시장이 어느 정도 성장을 이미 반영했는가":

PER 범위 해석 의미
30+ high_growth 시장이 고성장 기대. miss=급락 위험
10~30 moderate 보통 기대
~10 low_interest 시장 관심 낮음
음수 narrative_driven 실적 아닌 이야기로 움직임

Step 3: 가격 정당성 판단 (핵심 — v3 신규)

❌ "OP YoY +45%, 2분기 가속 → 긍정"
✅ "OP YoY +45%인데 PER 60배.
    PER 60 = 시장이 연간 OP 성장 +30% 이상을 이미 반영.
    실제 가속이 +45%이므로 미반영 여력 ~15%p 존재.
    HBM 수주 확대(material-analyst 참조) 고려 시 추가 상향 가능.
    → 현 가격은 아직 여력 있음. 단 PER 60에서 실적 miss 시 급락 경고."

계산 방법:

implied_growth = (PER / sector_avg_PER - 1) × 100
   또는 PEG = PER / EPS_growth_rate → PEG > 2 = 과대, PEG < 1 = 저평가
actual_growth = 최근 OP YoY
unpriced_growth = actual_growth - implied_growth
- unpriced_growth > 0 → 아직 여력 - unpriced_growth ≤ 0 → 이미 반영 또는 고평가

반도식적 해석 적용:

❌ "PER 60 = 고평가 = 위험"
✅ "PER 60이지만 OP 가속 +45% + HBM 수주 파이프라인 고려 시
    forward PER ~40. 동종업 평균 PER 35 대비 +14% 프리미엄.
    프리미엄의 정당성: TC본딩 독점 + M/S 70% → 정당화 가능."

domain_specific 추가 필드:

{
  "op_yoy_trend": "가속",
  "op_yoy_quarters": [32, 45],
  "accrual_ratio": 1.05,
  "accrual_status": "normal",
  "per": 60,
  "per_interpretation": "high_growth — 시장이 +30% 성장 반영",
  "implied_growth": 30,
  "actual_growth": 45,
  "unpriced_growth": 15,
  "price_justification": "미반영 여력 +15%p. HBM 수주 확대 시 추가 상향 가능.",
  "red_flag": false,
  "dart_confirmed": true,
  "revenue_direction": "가속"
}


2-5. environment-analyst (시장 환경 기반)

질문: "테마·매크로·섹터가 이 종목의 상승을 지지하는가?"

해석 프레임워크: 매크로 4축 + 테마 lifecycle + 섹터 RS

매크로 4축 (macro-interpreter 반영): | 축 | 해석 포인터 | 한국 경로 | |---|-----------|----------| | 금리/신용 | 커브 방향 + HY OAS | steepening+benign = 경기순환주 우호 | | 원자재 | 유가/구리/금 방향 | reflation = 정유↑ 수입물가↑ | | 환율 | DXY vs KRW 괴리 | 원화 약세 = 외인 이탈 vs 수출 환산이익 | | 유동성/변동성 | BTC 동조 + VIX 텀스트럭처 | contango = 안정, backwardation = 경계 |

4축 교차 해석: - 3축+ 같은 방향 = 강한 신호 - 축간 괴리 (예: DXY 안정인데 KRW 급락) = 한국 고유 리스크

테마 lifecycle: | 단계 | 기준 | 의미 | |------|------|------| | EMERGING | 거래대금 Top 20 첫 진입 | 초기 기회 | | ACCELERATING | 2일+ Top 20 + 거래대금 증가 + 새 카탈리스트 | 모멘텀 확대 | | LEADING | 3일+ Top 20 + 거래대금 정체/감소 | 피크 경계 | | COOLING | Top 20 이탈 또는 거래대금 -30%+ | 이탈 진행 | | RE_ACCELERATING | COOLING 후 재진입 + 새 카탈리스트 | 2차 파동 |

반도식적 해석 적용:

❌ "금리 하락 → 성장주 상승" (도식)
✅ "US10Y -3bp(당일)이지만 5d +12bp, 20d +25bp — 장기 상승 추세 속 단일일 반락.
    금리 하락이 아니라 금리 상승 추세의 숨고르기.
    성장주 밸류에이션 압력은 여전히 유효."

domain_specific 추가 필드:

{
  "theme_lifecycle": "ACCELERATING",
  "macro_regime": "risk_on_growth",
  "macro_4axis": {
    "rates_credit": {"direction": "steepening", "signal": "경기순환주 우호"},
    "commodities": {"direction": "reflation", "signal": "정유↑ 수입물가↑"},
    "fx": {"direction": "krw_weakening", "signal": "외인 이탈 압력"},
    "liquidity": {"direction": "expanding", "signal": "risk_on 확인"}
  },
  "cross_synthesis": "3축 risk_on이나 환율 축 괴리(DXY stable vs KRW -2.2%). 글로벌 risk_on이 한국에 온전히 전달 안 될 수 있음.",
  "bond_equity_conflict": "none",
  "crowding": "moderate",
  "sector_rs_rank": 3
}


2-6. substance-analyst (v3 신규 — substance-check 반영)

질문: "이 종목이 테마에서 실제로 돈을 버는가? 시장은 이 매출 영역을 어떻게 평가하는가?"

기존 5개 도메인에 추가. 종목의 테마 노출도를 독립적으로 평가.

해석 프레임워크: 매출 노출 + 시장 인식 2축

매출 노출 (exposure): | 등급 | 비중 | 판정 기준 | |------|------|----------| | core | 50%+ | DART 세그먼트 매출 비율 | | partial | 30~50% | 사업 설명서 "주요 사업 중 하나" | | peripheral | 10~30% | "일부 사업" | | unrelated | ~10% | 실질 연관 없음 |

시장 인식 (recognition): - recognized: 네이버 테마주 목록 포함 + 증권사 리포트 2+ 언급 + 거래량 변화 - unrecognized: 위 조건 미충족

4분류 매트릭스: | | 시장 인식 O | 시장 인식 X | |---|-----------|-----------| | 실체 O | 가장 강함 (실제 수혜 + 참여자 합의) | 발견 기회 (아직 미반영) | | 실체 X | 내러티브 드리븐 (단기 모멘텀 가능, 지속성 낮음) | 무관 |

domain_specific:

{
  "exposure": "core",
  "estimated_revenue_pct": 65,
  "exposure_source": "DART 세그먼트 매출",
  "market_recognition": "recognized",
  "recognition_evidence": "네이버 HBM 테마 포함 + 키움/한투 리포트 3건",
  "substance_matrix": "실체+인식 = 가장 강함"
}


3. synthesize.py 규칙표 (v2 유지 + substance 추가)

거부권 (Veto)

규칙 조건 결과
VETO_CHART chart.verdict == "부정" PASS
VETO_RR chart.rr_ratio < 1.5 PASS
VETO_RED_FLAG fundamentals.red_flag == true 최대 WAIT
VETO_SUBSTANCE substance.exposure == "unrelated" PASS

교차검증 (X1~X8)

v2의 X1~X7 유지 + 추가:

| X8 | 가격 정당성 vs 재료 | fundamentals.unpriced_growth ≤ 0 AND material.freshness == "Stale" | → WAIT (상승 여력 소진 + 재료 노화) |

GO 4조건 (v2 유지)

G1 고점신호 부재, G2 SL 확보(R:R≥1.5), G3 재료 뒷받침(structural/semi), G4 수급 확인(dual_buy/매집)

가중치 (substance 추가로 재배분)

chart: 0.20, flow: 0.20, material: 0.20, 
fundamentals: 0.15, environment: 0.10, substance: 0.15

4. Claude CLI 워크플로우 (v2 유지)

스킬 → 데이터 수집 스크립트 → JSON 파일
     → 에이전트 6개 병렬 호출 → 각각 {code}_{domain}.json
     → synthesize.py → verdicts.json
     → 서술 에이전트 → 리포트

5. 에이전트 목록 (v3)

도메인 분석 에이전트 (종목별, 6개)

에이전트 질문 내부 근거
chart-analyst 불균형이 매수를 지지하는가? VP/VSA/delta/structure + phase_bias 조건부
flow-analyst 스마트머니가 사고 있는가? SEN-1 6패턴 + 주체간 동조 + 5d/20d 누적
material-analyst 재료가 구조적이고 매출에 닿는가? NC-3 등급 + 4Q binary + 가치사슬 추적
fundamentals-analyst 가격이 정당화될 수 있는가? OP YoY + PER 해석 + unpriced_growth 계산
environment-analyst 테마·매크로가 지지하는가? 4축 교차 + lifecycle + RS
substance-analyst 테마에서 실제로 돈을 버는가? 매출 노출도 + 시장 인식 2축 매트릭스

시장 분석 에이전트 + 서술 에이전트 (v2와 동일)


6. 해석 품질 보증

반도식적 해석 검증

매 에이전트 산출물에 causal_verification 필드:

{
  "causal_claim": "HBM 수요 증가 → 한미반도체 매출 증가",
  "verification_method": "관세청 4월 수출 통계 + DART Q1 실적",
  "verified": true,
  "counter_case": "HBM 재고 과잉 시 수요 둔화 가능 — 현재 재고 수준 정상(WebSearch 확인)",
  "conditions": "NVIDIA capex 유지 + 데이터센터 투자 지속 시"
}

적중률 피드백 (v2 유지)

signal_scorecard → accuracy_log.jsonl → 주간 집계
→ 도식적 해석이 MISS를 만든 경우 root_cause에 "formulaic_reasoning" 태그
→ 해당 도식의 조건부 분기를 에이전트 스펙에 추가