쉬운 설명이 원문보다 자신 있어지면 안 된다

공시는 초보 투자자가 읽기 어렵지만, 숫자 하나의 오류도 주주 영향 설명을 바꿉니다. LLM에게 “쉽게 요약해 달라”고만 하면 발행가, 주식 수, 청약일을 반올림하거나 다른 표의 숫자를 자연스럽게 섞을 수 있습니다.

이 plugin은 유상증자와 전환사채 문서를 구조화해 설명하되, 생성 결과를 바로 반환하지 않습니다.

공시 원문
 -> 문서 유형별 field 추출
 -> LLM 설명 초안
 -> 숫자·근거·표현 validator
 -> 통과한 브리핑 또는 blocking failure

각 숫자 field는 source quotation과 연결됩니다. validator가 원문에서 같은 문자열을 찾지 못하면 부분 일치나 근사값으로 통과시키지 않습니다.

숫자 exact match와 의미 검증을 분리한다

1,000, 1000, 1천은 사람에게 같은 값처럼 보일 수 있습니다. 하지만 모델이 표현을 바꾸는 순간 근거 추적은 어려워집니다. 브리핑의 핵심 수치는 원문 표기와 exact match하도록 제한하고 표시 단위도 함께 보존했습니다.

그 위에 문서 유형별 관계를 검사합니다.

  • 유상증자: 신주 수, 발행가, 일정, 배정 방식이 각각 어떤 주주 영향을 설명하는가
  • 전환사채: 발행액, 전환가, 전환 가능 기간과 잠재 희석을 어떤 조건에서 언급하는가

원문에 존재하는 숫자라는 사실만으로 올바른 field라고 확정할 수는 없습니다. 같은 숫자가 여러 표에 있을 수 있어 section과 field mapping을 별도로 유지합니다. 그래도 복잡한 문맥 오선택 가능성은 남으므로 최종 한계에 명시합니다.

투자 판단 문장은 기능 범위 밖이다

validator는 “매수해야 한다”, “호재가 확실하다”, “수익이 보장된다”처럼 투자 행동이나 결과를 단정하는 표현을 금지합니다. 모든 결과에는 교육용 설명이며 원문과 전문가 판단을 대신하지 않는다는 disclaimer가 필요합니다.

정보가 부족하면 일반적인 정의로 빈칸을 채우지 않습니다. 예를 들어 전환가 조정 조건이 source에 없으면 “확인되지 않음”으로 남기고, 주주 영향도 조건부 표현만 허용합니다. 설명의 친절함보다 source boundary를 우선했습니다.

validator 자체를 공격해 본다

정상 fixture에서는 답변의 모든 핵심 숫자가 source와 exact match하고 필수 disclaimer가 포함되는지 확인했습니다. 숫자 한 자리 변경, 단위 교체, 존재하지 않는 주주 권리, 확정적 투자 권유와 disclaimer 삭제를 포함한 적대 case 8개는 모두 차단됐습니다.

현재 real DART mode는 목록 조회까지 연결했지만 상세 공시 원문을 안정적으로 가져오는 API 경로는 완성하지 않았습니다. 따라서 실제 입력은 사용자가 제공한 원문을 기준으로 하며 지원 문서도 유상증자와 전환사채에 한정됩니다.

8/8은 설계한 공격 fixture를 막았다는 뜻이지 금융 정확도 전체를 증명하지 않습니다. 핵심은 자연어 생성 뒤에 숫자, 문서 유형, 허용 표현을 각각 독립적으로 거부할 수 있는 경계를 둔 것입니다.