# 기존-01 MCP/RAG 진단 리포트

## 대상 시나리오

- 질문 번호: 기존-01
- 분류: 권한 + RAG 질문형
- 이해관계자: 설계사 `FC00789`
- 질의: `C1001006 고객 자동차보험 갱신 상담 전에, 현재 KB 계약(41048)과 삼성화재 보유 자동차보험 약관을 비교해서 고객에게 설명할 차별 포인트를 정리해줘.`

## 정형 MCP 확인 결과

정형 MCP 경로는 복구 확인됐다.

- MCP endpoint: `https://kb.cloud-handson.com/mcp`
- tool: `ords.query.kb_select_ai_vpd`
- Select AI profile: `KB_AIDP_SELECTAI_GPT55_OCI_PROFILE_V2`
- 검증 결과:
  - `HTTP_STATUS=200`
  - `MCP_HAS_ERROR=FALSE`
  - `MCP_IS_ERROR=FALSE`
  - `ITEM_COUNT=1`

생성 SQL은 `41048`을 `CONTRACT_NO`가 아니라 `PRODUCT_CD`로 해석했다.

```text
KC.CUST_ID = 'C1001006'
KC.PRODUCT_CD = '41048'
EH.EXT_INSURER = '삼성화재'
EH.EXT_PRODUCT_GRP = '자동차'
```

대표 반환값:

```text
CUSTOMER_ID=C1001006
KB_CONTRACT_NO=CT2699001
KB_PRODUCT_CODE=41048
KB_PRODUCT_NAME=41048_KB개인용자동차보험
KB_PREMIUM=1350000
EXTERNAL_INSURER=삼성화재
EXTERNAL_PRODUCT_GROUP=자동차
EXTERNAL_PRODUCT_TYPE=개인용
EXTERNAL_CLAUSE_NAME=개인용애니카다이렉트자동차보험
```

## 적용한 정형 MCP 보완

- `POC_2` KB 업무 테이블/컬럼 comment를 보강했다.
- Select AI `showprompt` 확인 결과, comment와 annotation이 실제 모델 프롬프트에 포함됨을 확인했다.
- SQL 정규화/검증 로직을 보완했다.
  - 마크다운 fence와 선행 wrapper comment를 제거한다.
  - 문자열 리터럴 내부의 세미콜론/금지어를 실행 문법으로 오판하지 않도록 검사한다.
  - DDL/DML/PLSQL/system object 차단은 유지한다.

변경 스크립트:

- `sql/adb/65_kb_select_ai_vpd_query_api.sql`

## RAG 근거 검색 확인 결과

RAG corpus는 `POC_2` 스키마에 존재한다.

```text
POC_2.KB_OWN_TERMS_DOCUMENTS
POC_2.KB_OWN_TERMS_CHUNKS
POC_2.KB_COMPETITOR_TERMS_DOCUMENTS
POC_2.KB_COMPETITOR_TERMS_CHUNKS
POC_2.KB_TERMS_CHUNKS_ALL_V
```

건수:

```text
TOTAL_CHUNKS=38772
OWN_CHUNKS=28506
COMP_CHUNKS=10266
```

KB 41048 약관 근거는 존재한다.

```text
DOC_41048|KB손해보험|OWN||KB개인용자동차보험|b5b680222361c4cde7a54855925333a3
SAMPLE_41048|KB손해보험|OWN||KB개인용자동차보험|...|자동차26-41048-1-04 KB개인용자동차보험 ...
```

## RAG 측 원인 판단

KB 41048 약관 chunk는 있지만 `PRODUCT_CODE` 메타데이터가 비어 있다.

```text
company_name=KB손해보험
company_type=OWN
product_code=<empty>
product_name=KB개인용자동차보험
chunk_text contains 자동차26-41048-1-04
```

따라서 RAG 검색/필터가 `PRODUCT_CODE = '41048'` 또는 상품코드 기반 필터를 사용하면 KB 근거가 제외될 수 있다. 본문 텍스트에는 `41048`이 있으므로 순수 텍스트 검색으로는 찾을 수 있지만, 메타데이터 필터 기준 검색에서는 빠질 가능성이 높다.

## 권고

RAG/약관 적재 담당 영역에서 아래 중 하나를 처리해야 한다.

1. `KB_OWN_TERMS_DOCUMENTS` / `KB_OWN_TERMS_CHUNKS` 적재 시 `자동차26-41048-1-04`에서 업무 상품코드 `41048`을 추출해 `PRODUCT_CODE`에 저장한다.
2. 기존 적재분에 대해 `KB개인용자동차보험` 또는 `자동차26-41048-1-04` 문서를 대상으로 `PRODUCT_CODE='41048'` backfill을 수행한다.
3. 검색 필터가 상품코드만 보지 말고 `PRODUCT_NAME`, `CHUNK_TEXT`의 약관 승인번호 패턴도 fallback으로 보도록 보강한다.

VPD 관리 인스턴스에서는 이 영역을 직접 수정하지 않고, 정형 데이터/Select AI 쪽 table comment와 annotation 관리 기능으로 메타데이터 품질을 운영 가능하게 한다.
