AgentSkillsCN

stock-data-verifier

股票/ETF 数据三重来源交叉验证协议,是防范幻觉的第一道防线。

SKILL.md
--- frontmatter
name: stock-data-verifier
description: "주식/ETF 데이터 3개 출처 교차검증 프로토콜. 환각 방지 첫 번째 방어선."
tools: mcp_exa_web_search_exa, mcp_websearch_web_search_exa, WebFetch

주식/ETF 데이터 교차검증 스킬

⚠️ CRITICAL: 스킬 사용 방법 (반드시 숙지)

이 스킬은 "함수"가 아닙니다. 지침 문서입니다.

  • search_stock("삼성전자") 같은 함수 호출은 작동하지 않습니다
  • ✅ 에이전트가 mcp_exa_web_search_exa 또는 mcp_websearch_web_search_exa 도구를 직접 호출해야 합니다
  • ✅ 이 스킬은 검색 쿼리 패턴과 검증 절차를 안내하는 문서입니다

올바른 사용 방법

code
1. 이 스킬 문서를 읽고 검색 쿼리 패턴 파악
2. mcp_exa_web_search_exa 또는 mcp_websearch_web_search_exa 도구를 직접 호출
3. 검색 결과에서 데이터 추출
4. 최소 2개 출처 교차 검증 수행
5. 출력 스키마에 맞춰 결과 포장

잘못된 사용 방법 (환각 발생)

code
❌ "search_stock() 호출" (존재하지 않는 함수)
❌ "스킬이 알아서 검색해줌" (스킬은 문서일 뿐)
❌ 예시 데이터의 숫자를 그대로 사용 (하드코딩된 오래된 값)

Overview

이 스킬은 주식/ETF 데이터(가격, PER, 배당률, 운용보수 등) 수집 시 환각을 방지하기 위한 표준 프로토콜입니다. 모든 수치 데이터는 에이전트가 직접 웹검색 도구를 호출하여 최소 2개 이상의 독립 출처에서 교차 검증 후에만 사용 가능합니다.


절대 규칙 (Zero Tolerance)

금지 사항 (NEVER)

  • ❌ 웹검색 없이 숫자 생성 → 즉시 FAIL
  • ❌ 단일 출처만으로 확정 → 최소 2개 필수
  • ❌ 출처 URL 없이 데이터 반환 → 검증 불가
  • ❌ 7일 이상 오래된 데이터 사용 (가격 데이터) → 최신성 위반
  • ❌ Blocklist 출처 사용 → 신뢰도 위반

필수 사항 (MUST)

  • ✅ 최소 2개 독립 출처에서 교차 검증
  • ✅ 1차 출처(공식) 최소 1개 필수 포함
  • ✅ 출처 간 ±5% 이내 일치 확인
  • ✅ 모든 데이터에 [출처: URL, 날짜] 태그 포함
  • ✅ 검증 실패 시 FAIL 반환 (추정값 금지)
  • 원문 인용 필수 - 숫자를 포함한 검색 결과 원문을 그대로 인용

⚠️ 원문 인용 규칙 (CRITICAL)

환각 방지의 핵심: 검색 결과에서 숫자를 추출할 때 반드시 원문을 그대로 인용해야 합니다. 원문과 보고 값이 일치하지 않으면 FAIL입니다.

올바른 숫자 추출 방법

code
1. 웹검색 실행
2. 검색 결과에서 숫자가 포함된 문장을 **그대로 복사**
3. 원문에서 숫자 추출
4. 추출한 숫자와 원문을 함께 보고

출력 형식 (필수)

모든 수치 데이터는 다음 형식으로 보고해야 합니다:

json
{
  "value": 58000,
  "original_text": "삼성전자 종가 58,000원 (2026.01.14 기준)",
  "source": "네이버 금융",
  "url": "https://finance.naver.com/item/main.naver?code=005930"
}

검증 규칙

규칙설명위반 시
원문 필수original_text 필드 없으면 무효FAIL
숫자 일치valueoriginal_text 내 숫자와 일치해야 함FAIL
복사 금지이전 결과나 예시 값을 복사하면 안 됨FAIL

원문 인용 예시

✅ 올바른 예시:

json
{
  "stock": "삼성전자",
  "per": {
    "value": 12.5,
    "original_text": "삼성전자 PER 12.5배 (2026.01.14 기준)",
    "source": "네이버 금융",
    "url": "https://finance.naver.com/item/main.naver?code=005930"
  }
}

❌ 잘못된 예시 (환각 위험):

json
{
  "stock": "삼성전자",
  "per": {
    "value": 12.5,
    "original_text": null,
    "source": "네이버 금융",
    "url": "https://finance.naver.com/item/main.naver?code=005930"
  }
}

→ 원문 없이 숫자만 보고하면 검증 불가능


검색 프로토콜

1. 한국 주식 데이터 검색

데이터 유형: 한국 상장 주식 (KOSPI, KOSDAQ)

⚠️ 아래는 검색 패턴 가이드입니다. search_korean_stock()라는 함수는 존재하지 않습니다. 반드시 mcp_exa_web_search_exa 또는 mcp_websearch_web_search_exa직접 호출하세요.

지원 데이터:

  • 현재가, 시가, 고가, 저가, 거래량
  • PER, PBR, ROE, EPS
  • 배당률, 배당수익률
  • 시가총액, 상장주식수

검색 쿼리 패턴 (2개 병렬 실행):

#패턴대상 출처
1"[종목명] 주가 site:finance.naver.com"네이버 금융 (1차)
2"[종목명] 시세 site:data.krx.co.kr OR site:kind.krx.co.kr"KRX (1차)
3"[종목명] 주가 site:securities.miraeasset.com OR site:securities.samsung.com"증권사 (2차)

검증 절차:

  1. 2개 이상 검색 결과에서 수치 추출
  2. 날짜 일치 확인 (동일 거래일)
  3. 값 일치 확인 (±5% 이내)
  4. 1차 출처 포함 확인

출력 스키마:

json
{
  "stock_code": "005930",
  "stock_name": "삼성전자",
  "price": {
    "value": "[SEARCH_RESULT - 웹검색 결과로 대체]",
    "unit": "KRW",
    "date": "[SEARCH_DATE - 검색 시점 날짜]",
    "original_text": "[REQUIRED - 숫자를 포함한 검색 결과 원문]"
  },
  "per": {
    "value": "[SEARCH_RESULT]",
    "original_text": "[REQUIRED]"
  },
  "pbr": {
    "value": "[SEARCH_RESULT]",
    "original_text": "[REQUIRED]"
  },
  "dividend_yield": {
    "value": "[SEARCH_RESULT]",
    "unit": "%",
    "original_text": "[REQUIRED]"
  },
  "verified": true,
  "variance": "[CALCULATED - 출처 간 편차 계산]",
  "sources": [
    {
      "name": "네이버 금융",
      "url": "[ACTUAL_URL]",
      "value": "[ACTUAL_VALUE]",
      "original_text": "[EXACT_QUOTE - 이 출처에서 숫자가 포함된 문장]",
      "tier": 1
    },
    {
      "name": "KRX",
      "url": "[ACTUAL_URL]",
      "value": "[ACTUAL_VALUE]",
      "original_text": "[EXACT_QUOTE]",
      "tier": 1
    }
  ]
}

⚠️ CRITICAL:
1. `original_text` 필드는 **필수**입니다. 없으면 FAIL.
2. `value`는 반드시 `original_text` 내의 숫자와 일치해야 합니다.
3. 예시 값을 그대로 사용하지 마세요.

2. 미국 주식 데이터 검색

데이터 유형: 미국 상장 주식 (NYSE, NASDAQ)

⚠️ 아래는 검색 패턴 가이드입니다. search_us_stock()라는 함수는 존재하지 않습니다. 반드시 mcp_exa_web_search_exa 또는 mcp_websearch_web_search_exa직접 호출하세요.

지원 데이터:

  • Price, Open, High, Low, Volume
  • P/E Ratio, P/B Ratio, ROE, EPS
  • Dividend Yield, Payout Ratio
  • Market Cap, Shares Outstanding

검색 쿼리 패턴:

#패턴대상 출처
1"[ticker] stock price site:finance.yahoo.com"Yahoo Finance (1차)
2"[ticker] quote site:bloomberg.com OR site:marketwatch.com"Bloomberg/MarketWatch (1차)
3"[ticker] stock site:seekingalpha.com"Seeking Alpha (2차)

검증 절차:

  1. 2개 이상 검색 결과에서 수치 추출
  2. 날짜 일치 확인 (동일 거래일)
  3. 값 일치 확인 (±5% 이내)
  4. 1차 출처 포함 확인

출력 스키마:

json
{
  "ticker": "NVDA",
  "stock_name": "NVIDIA Corporation",
  "price": {
    "value": "[SEARCH_RESULT - 웹검색 결과로 대체]",
    "unit": "USD",
    "date": "[SEARCH_DATE - 검색 시점 날짜]",
    "original_text": "[REQUIRED - 숫자를 포함한 검색 결과 원문]"
  },
  "pe_ratio": {
    "value": "[SEARCH_RESULT]",
    "original_text": "[REQUIRED]"
  },
  "pb_ratio": {
    "value": "[SEARCH_RESULT]",
    "original_text": "[REQUIRED]"
  },
  "dividend_yield": {
    "value": "[SEARCH_RESULT]",
    "unit": "%",
    "original_text": "[REQUIRED]"
  },
  "verified": true,
  "variance": "[CALCULATED - 출처 간 편차 계산]",
  "sources": [
    {
      "name": "Yahoo Finance",
      "url": "[ACTUAL_URL]",
      "value": "[ACTUAL_VALUE]",
      "original_text": "[EXACT_QUOTE - 이 출처에서 숫자가 포함된 문장]",
      "tier": 1
    },
    {
      "name": "Bloomberg",
      "url": "[ACTUAL_URL]",
      "value": "[ACTUAL_VALUE]",
      "original_text": "[EXACT_QUOTE]",
      "tier": 1
    }
  ]
}

⚠️ CRITICAL:
1. `original_text` 필드는 **필수**입니다. 없으면 FAIL.
2. `value`는 반드시 `original_text` 내의 숫자와 일치해야 합니다.
3. 예시 값을 그대로 사용하지 마세요.

3. ETF 데이터 검색

데이터 유형: ETF (상장지수펀드)

⚠️ 아래는 검색 패턴 가이드입니다. search_etf()라는 함수는 존재하지 않습니다. 반드시 mcp_exa_web_search_exa 또는 mcp_websearch_web_search_exa직접 호출하세요.

지원 데이터:

  • NAV (순자산가치), 시장가격
  • 총보수 (Expense Ratio)
  • 추적오차 (Tracking Error)
  • 배당률, 배당주기
  • 운용자산 (AUM)

검색 쿼리 패턴:

자산1차 출처 쿼리2차 출처 쿼리
한국 ETF"[ETF명] site:finance.naver.com""[ETF명] site:krx.co.kr"
미국 ETF"[ticker] ETF site:etf.com""[ticker] site:finance.yahoo.com"

운용사 공식 페이지 (필수 확인):

운용사URL 패턴확인 데이터
삼성자산운용site:samsungfund.com총보수, 운용보수
미래에셋자산운용site:miraeassetfund.co.kr총보수, 운용보수
BlackRocksite:ishares.comExpense Ratio
Vanguardsite:vanguard.comExpense Ratio

검증 절차:

  1. 운용사 공식 페이지에서 총보수 확인 (필수)
  2. 금융 데이터 사이트에서 NAV/가격 확인
  3. 값 일치 확인 (±5% 이내)
  4. 총보수는 운용사 공식 값 우선

출력 스키마:

json
{
  "etf_code": "360750",
  "etf_name": "TIGER 미국S&P500",
  "nav": {
    "value": "[SEARCH_RESULT - 웹검색 결과로 대체]",
    "unit": "KRW",
    "date": "[SEARCH_DATE - 검색 시점 날짜]",
    "original_text": "[REQUIRED - 숫자를 포함한 검색 결과 원문]"
  },
  "expense_ratio": {
    "value": "[SEARCH_RESULT]",
    "unit": "%",
    "original_text": "[REQUIRED - 운용사 공식 페이지 원문]",
    "source": "운용사 공식"
  },
  "tracking_error": {
    "value": "[SEARCH_RESULT]",
    "unit": "%",
    "original_text": "[REQUIRED]"
  },
  "dividend_yield": {
    "value": "[SEARCH_RESULT]",
    "unit": "%",
    "original_text": "[REQUIRED]"
  },
  "aum": {
    "value": "[SEARCH_RESULT]",
    "unit": "KRW",
    "original_text": "[REQUIRED]"
  },
  "verified": true,
  "variance": "[CALCULATED - 출처 간 편차 계산]",
  "sources": [
    {
      "name": "삼성자산운용",
      "url": "[ACTUAL_URL]",
      "value": "[ACTUAL_VALUE]",
      "original_text": "[EXACT_QUOTE - 이 출처에서 숫자가 포함된 문장]",
      "tier": 1,
      "official": true
    },
    {
      "name": "네이버 금융",
      "url": "[ACTUAL_URL]",
      "value": "[ACTUAL_VALUE]",
      "original_text": "[EXACT_QUOTE]",
      "tier": 1,
      "official": false
    }
  ]
}

⚠️ CRITICAL:
1. `original_text` 필드는 **필수**입니다. 없으면 FAIL.
2. `value`는 반드시 `original_text` 내의 숫자와 일치해야 합니다.
3. 총보수는 반드시 운용사 공식 페이지에서 확인해야 합니다.
4. 예시 값을 그대로 사용하지 마세요.

허용 출처 (Allowlist)

Tier 1: 공식 출처 (필수 1개 이상)

한국 주식/ETF

데이터출처URL
주식 시세네이버 금융finance.naver.com
주식 시세KRXdata.krx.co.kr, kind.krx.co.kr
공시 정보DARTdart.fss.or.kr
ETF 정보삼성자산운용samsungfund.com
ETF 정보미래에셋자산운용miraeassetfund.co.kr

미국 주식/ETF

데이터출처URL
주식 시세Yahoo Financefinance.yahoo.com
주식 시세Bloombergbloomberg.com
주식 분석MarketWatchmarketwatch.com
ETF 정보ETF.cometf.com
ETF 정보BlackRock (iShares)ishares.com
ETF 정보Vanguardvanguard.com

Tier 2: 교차검증 출처

한국 증권사

출처URL커버리지
삼성증권securities.samsung.com한국 주식
미래에셋증권securities.miraeasset.com한국 주식
키움증권kiwoom.com한국 주식
NH투자증권nhqv.com한국 주식

미국 금융 데이터

출처URL커버리지
Seeking Alphaseekingalpha.com미국 주식 분석
Morningstarmorningstar.com펀드/ETF 분석
CNBCcnbc.com미국 시장 뉴스

Tier 3: 보조 출처

한국 언론

출처URL용도
한국경제hankyung.com한국 주식 뉴스
매일경제mk.co.kr한국 주식 뉴스
연합뉴스yna.co.kr한국 경제 속보

글로벌 언론

출처URL용도
Reutersreuters.com글로벌 주식 뉴스
Financial Timesft.com글로벌 금융 분석
Wall Street Journalwsj.com미국 주식 뉴스

Blocklist (금지)

절대 사용 금지 출처:

유형이유예시
개인 블로그신뢰도 미검증tistory, naver blog, medium 개인 글
커뮤니티비전문가 의견네이버 카페, 다음 카페, Reddit r/wallstreetbets, DC인사이드
YouTube검증 불가개인 유튜버 주식 분석
위키피디아실시간 데이터 부정확wikipedia.org (실시간 주가용)
소셜미디어확인 불가Twitter/X, Facebook

교차 검증 프로토콜

검증 기준

데이터 유형최소 출처 수허용 오차우선 출처
주가2개±5%1차 출처 (네이버/Yahoo)
PER/PBR2개±5%1차 출처
배당률2개±5%1차 출처
총보수1개 (운용사)0%운용사 공식 페이지
시가총액2개±5%1차 출처

검증 절차

code
1. 최소 2개 출처에서 데이터 수집
2. 각 출처에서 original_text 추출
3. 수치 일치 확인 (±5% 이내)
4. 불일치 시:
   - 5% 이내: 평균값 사용
   - 5% 초과: 가장 최신 출처 우선
   - 10% 초과: FAIL 반환
5. verified: true/false 설정

불일치 처리

편차대응
0~5%평균값 사용, verified: true
5~10%최신 출처 우선, verified: true, 경고 포함
10%+FAIL 반환, verified: false, 수동 확인 요청

검증 실패 처리

실패 유형별 대응

실패 유형코드대응
출처 부족INSUFFICIENT_SOURCES추가 검색 시도 (최대 3회)
값 불일치VALUE_MISMATCH범위로 표현 또는 1차 출처 우선
날짜 불일치DATE_MISMATCH가장 최신 날짜 출처 우선
1차 출처 없음NO_PRIMARY_SOURCE경고 + 2차 출처로 진행
전체 실패COMPLETE_FAILUREFAIL 반환, 수동 확인 요청

실패 출력 스키마

json
{
  "stock_code": "005930",
  "stock_name": "삼성전자",
  "price": null,
  "verified": false,
  "error": {
    "code": "VALUE_MISMATCH",
    "reason": "출처 간 8.2% 차이 (허용: ±5%)",
    "details": {
      "source1": {"name": "네이버 금융", "value": 58000},
      "source2": {"name": "KRX", "value": 62800}
    }
  },
  "recommendation": "수동 확인 필요"
}

사용 예시

에이전트에서 스킬 사용

markdown
# stock-analyzer 에이전트

## 데이터 수집

1. stock-data-verifier 스킬 로드 확인 (검색 패턴 가이드로 참조)
2. 삼성전자 데이터 수집:
   - mcp_exa_web_search_exa(query="삼성전자 주가 site:finance.naver.com") **직접 호출**
   - 검색 결과에서 original_text 추출
   - verified: true 확인
3. NVIDIA 데이터 수집:
   - mcp_exa_web_search_exa(query="NVDA stock price site:finance.yahoo.com") **직접 호출**
   - 검색 결과에서 original_text 추출
   - verified: true 확인

## 검증 실패 시

verified: false인 경우:
- 해당 종목은 "데이터 수집 실패" 명시
- 추정값 생성 금지
- 에러 코드 전달

메타 정보

yaml
version: "1.0"
created: "2026-01-14"
updated: "2026-01-14"
author: "Claude"
purpose: "주식/ETF 데이터 환각 방지 표준화"
dependencies:
  - mcp_exa_web_search_exa
  - mcp_websearch_web_search_exa
  - WebFetch
consumers:
  - stock-analyzer
  - etf-analyzer
  - portfolio-builder
changes_v1.0:
  - "최초 작성"
  - "한국/미국 주식, ETF 검색 프로토콜 정의"
  - "original_text 필수화"
  - "2개 출처 교차검증 (±5% 허용)"