320 lines
10 KiB
Markdown
320 lines
10 KiB
Markdown
# 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=<configured>
|
|
```
|
|
|
|
테스트 결과:
|
|
|
|
| 구간 | 시간 | 결과 |
|
|
|---|---:|---|
|
|
| `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 양쪽 모두 실제 호출 성공을 확인했다.
|