109 lines
3.7 KiB
Markdown
109 lines
3.7 KiB
Markdown
# 기존-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 관리 기능으로 메타데이터 품질을 운영 가능하게 한다.
|