에이전트 프레임워크 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
반도식적 해석 적용:
❌ "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" 태그
→ 해당 도식의 조건부 분기를 에이전트 스펙에 추가