# Select AI 프로파일 전환 및 호출 시간 리포트 ## 대상 - 날짜: 2026-07-10 - 대상 서비스: VPD 관리 인스턴스 MCP / ORDS Select AI 조회 - MCP endpoint: `https://kb.cloud-handson.com/mcp` - MCP tool: `ords.query.kb_select_ai_vpd` - ORDS endpoint: `/ords/cb-ords/kb-select-ai-vpd/query` - 테스트 질의: ```text C1001006 고객 자동차보험 갱신 상담 전에, 현재 KB 계약(41048)과 삼성화재 보유 자동차보험 약관을 비교해서 고객에게 설명할 차별 포인트를 정리해줘. ``` ## 결론 기존 `openai.gpt-5.5` 기반 Select AI 프로파일은 SQL 생성 시간이 길고, 같은 질의에서도 SQL 생성 실패/거절 응답이 간헐적으로 발생했다. 최종 적용 프로파일은 아래로 변경했다. ```text KB_AIDP_SELECTAI_GPT54_MINI_COMMENTS_PROFILE_V1 ``` 이 프로파일은 `openai.gpt-5.4-mini`를 사용하고, `comments=true`를 켜서 테이블/컬럼 comment 기반 SQL 생성을 유지한다. 최종 ORDS 직접 호출은 약 4.1초, MCP 호출은 약 4.6~8.2초 범위로 확인됐다. ## 기존 호출 시간 기존 운영 프로파일: ```text KB_AIDP_SELECTAI_GPT55_OCI_PROFILE_V2 model=openai.gpt-5.5 provider=oci region=us-chicago-1 provider_endpoint=https://inference.generativeai.us-chicago-1.oci.oraclecloud.com comments=true annotations=true constraints=true conversation=true enforce_object_list=true ``` 관찰된 기존 병목: | 측정 구간 | 시간 | 결과 | |---|---:|---| | VPD context 설정 | 282ms | 정상 | | 확정 SQL + VPD 실행 | 50ms | 정상 | | `showprompt` metadata/prompt 생성 | 43.817초 | prompt 18,806자 | | `showsql` 1차 | 38.770초 | SQL 생성 성공 | | `showsql` 2차 | 105.505초 | non-SQL refusal | | SQLcl direct package 호출 | 61.123초 | SQL 생성 및 2건 반환 | | MCP 경로 호출 | 54.3초 | `ORA-20813`, Select AI가 유효 SELECT 생성 실패 | | GPT-5.5 재비교 호출 | 72초 | SQL 대신 refusal 메시지 반환 | 판단: - DB/VPD/ORDS 자체가 느린 것이 아니다. - 주 병목은 `DBMS_CLOUD_AI.GENERATE` 내부의 Select AI prompt 구성과 LLM SQL 생성 단계다. - `comments`, `annotations`, `constraints`, `conversation`, `enforce_object_list`가 모두 켜진 GPT-5.5 프로파일은 prompt가 커지고 응답 편차가 컸다. ## 후보 프로파일 테스트 결과 ### 1. 단순 모델 교체 후보 | 프로파일 | 모델 | 설정 | 결과 | |---|---|---|---| | `KB_AIDP_SELECTAI_GPT5_MINI_PROFILE_V1` | `openai.gpt-5-mini` | 기존 GPT-5.5와 유사 | `ORA-20404 ... /actions/chat` | | `KB_AIDP_SELECTAI_GPT41_MINI_PROFILE_V1` | `openai.gpt-4.1-mini` | 기존 GPT-5.5와 유사 | `ORA-20404 ... /actions/chat` | | `KB_AIDP_SELECTAI_GROK43_PROFILE_V1` | `xai.grok-4.3` | 기존 GPT-5.5와 유사 | `ORA-20404 ... /actions/chat` | | `KB_AIDP_SELECTAI_GPT54_MINI_PROFILE_V1` | `openai.gpt-5.4-mini` | 기존 GPT-5.5와 유사 | `ORA-20404 ... /actions/chat` | 오류: ```text ORA-20404: Object not found - oci://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/chat ``` 단순히 모델명만 바꾸는 방식은 안정적이지 않았다. ### 2. 기존 성공 프로파일 방식 확인 기존에 성공한 프로파일: ```text POC_SELECT_AI_ALL model=xai.grok-4.3 ``` 확인된 차이: - `oci_compartment_id`가 있음 - `comments`, `annotations`, `constraints`, `conversation`, `enforce_object_list` 플래그가 없음 비교 결과: | 프로파일 | 시간 | 결과 | |---|---:|---| | `KB_AIDP_SELECTAI_GPT55_OCI_PROFILE_V2` | 72초 | refusal 메시지 반환 | | `POC_SELECT_AI_ALL` | 16초 | SQL 생성 성공 | ### 3. FAST 프로파일 테스트 `POC_SELECT_AI_ALL` 구조를 기준으로 `oci_compartment_id`를 포함하고, 무거운 메타데이터 플래그를 제거한 FAST 후보를 만들었다. | 프로파일 | 모델 | showprompt | prompt 크기 | showsql | 결과 | |---|---|---:|---:|---:|---| | `KB_AIDP_SELECTAI_GROK43_FAST_PROFILE_V1` | `xai.grok-4.3` | 3초 | 5,049자 | 7초 | 성공 | | `KB_AIDP_SELECTAI_GPT54_MINI_FAST_PROFILE_V1` | `openai.gpt-5.4-mini` | 0초 | 5,049자 | 4초 | 성공 | FAST 방식은 빠르지만, 테이블/컬럼 comment 활용이 약해진다. 따라서 최종 적용용으로는 `comments=true`만 추가한 절충형을 별도 테스트했다. ### 4. Full metadata 프로파일 테스트 `comments=true`에 더해 `annotations=true`, `constraints=true`까지 켠 후보를 추가 테스트했다. 프로파일: ```text KB_AIDP_SELECTAI_GPT54_MINI_FULLMETA_PROFILE_V1 model=openai.gpt-5.4-mini comments=true annotations=true constraints=true enforce_object_list=true ``` DBMS_CLOUD_AI 단독 측정: | 회차 | showprompt | prompt 크기 | showsql | 결과 | |---:|---:|---:|---:|---| | 1 | 32초 | 19,816자 | 15초 | 성공 | | 2 | 3초 | 19,816자 | 6초 | 성공 | | 3 | 4초 | 19,816자 | 13초 | 성공 | ORDS 실제 경로 측정: | 회차 | HTTP | 총 시간 | 오류 | 반환 건수 | |---:|---:|---:|---|---:| | 1 | 200 | 8.224초 | 없음 | 2 | | 2 | 200 | 7.288초 | 없음 | 2 | | 3 | 200 | 6.217초 | 없음 | 2 | 평균: ```text 7.243초 ``` 비교: | 구성 | ORDS 평균 | 상대 | |---|---:|---:| | `comments=true` only | 4.156초 | 1.0x | | `comments + annotations + constraints` | 7.243초 | 약 1.7x 느림 | 판단: - Full metadata 구성은 동작한다. - 단, prompt 크기가 `12,520자`에서 `19,816자`로 증가한다. - ORDS 기준 평균 응답 시간이 `4.156초`에서 `7.243초`로 늘어난다. - 데모 응답성 기준으로는 `comments=true` only 구성이 더 적합하다. ## 최종 적용 프로파일 최종 적용: ```text KB_AIDP_SELECTAI_GPT54_MINI_COMMENTS_PROFILE_V1 model=openai.gpt-5.4-mini comments=true enforce_object_list=true oci_compartment_id= ``` 테스트 결과: | 구간 | 시간 | 결과 | |---|---:|---| | `showprompt` | 6초 | 성공 | | prompt 크기 | 12,520자 | comment 포함 | | `showsql` | 4초 | 성공 | 선택 이유: - GPT-5.5 대비 훨씬 빠르다. - FAST 프로파일보다 prompt가 크지만, 테이블/컬럼 comment를 유지한다. - VPD 관리 인스턴스에서 보강한 table/column comment 운영 효과가 Select AI에 반영된다. ## 적용 내용 ### DB 패키지 `POC_2.KB_SELECT_AI_VPD_QUERY_API`의 Select AI profile 상수를 변경했다. ```sql c_profile_name CONSTANT VARCHAR2(128) := 'KB_AIDP_SELECTAI_GPT54_MINI_COMMENTS_PROFILE_V1'; ``` 대상 스크립트: ```text database/adb/65_kb_select_ai_vpd_query_api.sql ``` ### ORDS 응답 표시 ORDS JSON 응답의 profile 표시도 새 프로파일로 변경했다. ```text profile=KB_AIDP_SELECTAI_GPT54_MINI_COMMENTS_PROFILE_V1 ``` 대상 스크립트: ```text database/adb/66_kb_select_ai_vpd_query_ords.sql ``` ### MCP 응답 표시 MCP tool 응답 payload의 profile 표시와 화면 설명을 새 프로파일 기준으로 변경했다. 대상 소스: ```text vpd-backoffice/src/main/java/com/cloudhandson/vpdbackoffice/service/McpSseService.java vpd-backoffice/src/main/resources/templates/mcp-sse.html ``` ## 최종 속도 측정 ### ORDS 직접 호출 호출 대상: ```text https://g329127dfd380ad-kbaipoc.adb.ap-osaka-1.oraclecloudapps.com/ords/cb-ords/kb-select-ai-vpd/query ``` | 회차 | HTTP | 총 시간 | 응답 profile | 오류 | 반환 건수 | |---:|---:|---:|---|---|---:| | 1 | 200 | 4.058초 | `KB_AIDP_SELECTAI_GPT54_MINI_COMMENTS_PROFILE_V1` | 없음 | 2 | | 2 | 200 | 4.216초 | `KB_AIDP_SELECTAI_GPT54_MINI_COMMENTS_PROFILE_V1` | 없음 | 2 | | 3 | 200 | 4.195초 | `KB_AIDP_SELECTAI_GPT54_MINI_COMMENTS_PROFILE_V1` | 없음 | 1 | 평균: ```text 4.156초 ``` ### MCP 호출 호출 대상: ```text https://kb.cloud-handson.com/mcp ``` | 회차 | HTTP | 총 시간 | MCP payload profile | ORDS profile | 오류 | 반환 건수 | |---:|---:|---:|---|---|---|---:| | 1 | 200 | 4.632초 | `KB_AIDP_SELECTAI_GPT54_MINI_COMMENTS_PROFILE_V1` | `KB_AIDP_SELECTAI_GPT54_MINI_COMMENTS_PROFILE_V1` | 없음 | 2 | | 2 | 200 | 8.213초 | `KB_AIDP_SELECTAI_GPT54_MINI_COMMENTS_PROFILE_V1` | `KB_AIDP_SELECTAI_GPT54_MINI_COMMENTS_PROFILE_V1` | 없음 | 2 | | 3 | 200 | 7.279초 | `KB_AIDP_SELECTAI_GPT54_MINI_COMMENTS_PROFILE_V1` | `KB_AIDP_SELECTAI_GPT54_MINI_COMMENTS_PROFILE_V1` | 없음 | 1 | 평균: ```text 6.708초 ``` 참고: - MCP `time_starttransfer`는 약 0.008~0.012초였지만, 최종 응답 body 완료 기준은 `time_total`이다. - MCP 경로는 백오피스 HTTP 처리와 ORDS 호출 wrapping이 추가되므로 ORDS 직접 호출보다 약간 느릴 수 있다. ## 개선 효과 | 비교 항목 | 기존 GPT-5.5 | 최종 GPT-5.4-mini comments | |---|---:|---:| | SQLcl direct package | 61.123초 | 4초대 SQL 생성 | | 기존 MCP 실패 사례 | 54.3초 후 실패 | 4.6~8.2초 성공 | | GPT-5.5 재비교 | 72초 후 refusal | 4.1초대 ORDS 성공 | | prompt 크기 | 18,806~21,776자 | 12,520자 | 정리: - 최종 ORDS 기준으로 기존 61~72초 구간 대비 약 10~17배 빠르다. - MCP 기준으로도 기존 54.3초 실패 사례 대비 성공 응답이 약 4.6~8.2초로 줄었다. - DB/VPD 실행 병목이 아니라 Select AI 프로파일/모델/메타데이터 구성이 핵심 병목이었다. ## 남은 주의점 1. 같은 자연어라도 Select AI 생성 SQL은 완전히 결정적이지 않다. - 테스트에서도 반환 건수가 1~2건으로 흔들렸다. - 이는 LLM SQL 생성 특성이다. 2. 비즈니스 품질을 더 안정화하려면 table/column comment와 annotation을 계속 보강해야 한다. 3. 특정 데모 질문은 deterministic SQL fallback 후보로 둘 수 있다. - 예: `CUST_ID`, `PRODUCT_CD`, `EXT_INSURER`, `EXT_PRODUCT_GRP`가 명확한 비교 질문. 4. 장기적으로는 profile을 설정값으로 분리하는 것이 좋다. - 현재는 DB package 상수로 고정되어 있다. - 운영 전환 시 `CB_BACKOFFICE_SETTING` 또는 별도 Select AI 설정 테이블에서 profile을 읽도록 개선할 수 있다. ## 현재 권고 데모/PoC 운영 기준으로는 현재 적용한 아래 프로파일을 유지한다. ```text KB_AIDP_SELECTAI_GPT54_MINI_COMMENTS_PROFILE_V1 ``` 이유: - 응답 시간이 데모 가능한 수준이다. - comment 기반 스키마 설명을 유지한다. - ORDS/MCP 양쪽 모두 실제 호출 성공을 확인했다.