본문 바로가기
CLOUD/ORACLE CLOUD INFRASTRUCTURE

Oracle Cloud ATP 23ai에서 Select AI 설정 및 사용 (Configure and Use Select AI on Oracle Cloud ATP 23ai)

by bluebyte 2025. 6. 17.

이미지 출처 : www.freepik.com

목차

시작하기에 앞서서..

 OCI Cloud Free Tier 기반 및 API 과금도 발생하지 않는 환경을 기준으로 (eg. Google Generative Language API)  구현 할 수 있도록 정리 했고, ATP 추후 APEX 를 활용한 UI 구성을 염두해두고 진행 했습니다. 
 OCI 리소스(VCN/Subnet/Compartment/Autonomous DB) 등의 이해와 Agent API 준비등이 필요하지만, 최소한의 설정으로 구성할수 있도록 진행 했습니다. 
 상세한 메뉴/구성/이미지 첨부, 문서의 정리등의 욕심도 있지만, 지속적인 콘텐츠의 변경이 워낙 많다보니, 기본 프로세스와 뼈대에 대한 내용만 우선 정리 했습니다.

Oracle 23ai 의 기능

Oracle Database 23ai의 가장 혁신적인 기능 중 하나인 Select AI는 자연어 프롬프트를 통해 SQL 쿼리를 자동 생성하고 실행할 수 있게 해주는 기술입니다.
 이 기능은 Oracle Cloud Infrastructure(OCI)의 Autonomous Transaction Processing(ATP) 환경에서 최적화되어 제공되며, 사용자가 SQL 문법을 몰라도 자연어로 데이터베이스와 상호작용할 수 있게 해줍니다.
참조 :  https://www.oracle.com/kr/database/features/ 

Select AI 개요

Select AI는 Oracle Autonomous Database에서 생성형 AI를 대규모 언어 모델(LLM)과 함께 사용하여 사용자의 입력 텍스트를 Oracle SQL로 변환하는 기능입니다. 이 기술은 자연어 프롬프트를 처리하고, 메타데이터로 프롬프트를 보완한 후 SQL 쿼리를 생성 및 실행합니다.

주요 특징

  • 자연어 처리: 사용자가 일반적인 언어로 데이터베이스에 질의할 수 있습니다
  • 메타데이터 강화: 데이터베이스 스키마 정보를 활용하여 LLM의 환각 현상을 완화합니다
  • 다양한 AI 제공업체 지원: OpenAI, Cohere, Azure OpenAI, OCI Generative AI, Google Gemini 등을 지원합니다

지원되는 AI 제공업체 및 모델

AI 제공업체 지원 모델 예시 주요 용도
OCI Generative AI meta.llama-3.1-70b-instruct, meta.llama-3.1-405b-instruct 모든 Select AI 작업
OpenAI gpt-3.5-turbo, gpt-4o, gpt-4o-mini 자연어 프롬프트, SQL 생성 최적화
Azure OpenAI GPT-4o, GPT-4, GPT-4 Turbo with Vision 자연어 프롬프트, chat 작업
Google Gemini gemini-1.5-flash, gemini-1.5-pro, gemini-1.0-pro 자연어 프롬프트, SQL 생성
Cohere command, command-nightly, command-r chat 작업에 최적화
Anthropic claude-3-5-sonnet-202406 대화형 AI 작업

OCI ATP 23ai 인스턴스 생성

1. ATP 23ai 인스턴스 설정

Oracle Cloud Infrastructure에서 Autonomous Transaction Processing 23ai 인스턴스를 생성합니다:

  1. 기본 설정
    •  Display Name: 인스턴스 식별 이름
    •  Database Name: SID 설정
    •  Compartment: 적절한 구획 선택
  2. 워크로드 타입 선택
    •  Transaction Processing 선택 (Select AI에 최적화)
    •  Always Free 옵션 활용 가능
  3. 버전 선택
    •  Oracle Database 23ai 버전 선택
  4. 관리자 패스워드 설정
    •  ADMIN 사용자 패스워드 설정

2. 네트워크 및 보안 설정

Always Free 환경에서는 "Private endpoint access only" 옵션이 제한됩니다. 기본 네트워크 설정으로 진행하여 외부 AI 서비스와의 연결을 허용합니다.

Select AI 설정 및 구현

1. 권한 설정

최초 Database User 가 없는경우 먼저 생성하고. (Database Acion, 혹은 APEX User 생성등) 
Select AI를 사용할 데이터베이스 사용자에게 필요한 권한을 부여합니다: 
- 예시 : APEX_DEV

-- DBMS_CLOUD_AI 패키지 실행 권한 부여
GRANT EXECUTE ON DBMS_CLOUD_AI TO APEX_DEV;

2. 네트워크 ACL 설정

외부 AI 제공업체 엔드포인트에 대한 네트워크 접근을 허용합니다:
ACL(Access Control List) 의 경우에는 *.googlepais.com 같은 형태의 적용도 가능합니다.

-- OpenAI의 경우
BEGIN
  DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
    host => 'api.openai.com',
    ace  => xs$ace_type(
      privilege_list => xs$name_list('http'),
      principal_name => 'APEX_DEV',
      principal_type => xs_acl.ptype_db
    )
  );
END;
/

-- Google Gemini의 경우
BEGIN
  DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
    host => 'generativelanguage.googleapis.com',
    ace  => xs$ace_type(
      privilege_list => xs$name_list('http'),
      principal_name => 'APEX_DEV',
      principal_type => xs_acl.ptype_db
    )
  );
END;
/

3. AI 제공업체 Credential 생성

- DBMS_CLOUD.CREATE_CREDENTIAL 의 username 은 임의로 지정합니다. (Database,AI agent User 등과 전혀 관련이 없습니다.)

OpenAI Credential 생성 (API Key 과금 필요)

BEGIN
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'OPENAI_CRED',
    username        => 'OPENAI',
    password        => '<your_openai_api_key>'
  );
END;
/

Google Gemini Credential 생성 (API Key 과금 불필요)

BEGIN
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'GOOGLE_CRED',
    username        => 'GOOGLE',
    password        => '<your_gemini_api_key>'
  );
END;
/

OCI Generative AI Credential 생성시 (과금정책 확인 필요)

BEGIN
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'GENAI_CRED',
    user_ocid       => 'ocid1.user.oc1..aaaa...',
    tenancy_ocid    => 'ocid1.tenancy.oc1..aaaa...',
    private_key     => '<your_api_key>',
    fingerprint     => '<your_fingerprint>'
  );
END;
/

4. AI 프로파일 생성

Select AI에서 사용할 AI 프로파일을 생성하고, 사용할 Object 를 목록에 추가합니다.
필요한 PROFILE 을 생성하고, 예시로 기본 테이블을 적용합니다.
참조 : https://docs.oracle.com/en-us/iaas/autonomous-database-serverless/doc/dbms-cloud-ai-package.html

OpenAI 프로파일

BEGIN
  DBMS_CLOUD_AI.CREATE_PROFILE(
    profile_name => 'OPENAI_PROFILE',
    attributes   => '{
      "provider": "openai",
      "credential_name": "OPENAI_CRED",
      "object_list": [
        {"owner": "SH", "name": "customers"},
        {"owner": "SH", "name": "sales"},
        {"owner": "SH", "name": "products"},
        {"owner": "SH", "name": "countries"}
      ]
    }'
  );
END;
/

Google Gemini 프로파일

BEGIN
  DBMS_CLOUD_AI.CREATE_PROFILE(
    profile_name => 'GOOGLE_PROFILE',
    attributes   => '{
      "provider": "google",
      "credential_name": "GOOGLE_CRED",
      "object_list": [
        {"owner": "SH", "name": "customers"},
        {"owner": "SH", "name": "sales"},
        {"owner": "SH", "name": "products"}
      ]
    }'
  );
END;
/

OCI Generative AI 프로파일

BEGIN
  DBMS_CLOUD_AI.CREATE_PROFILE(
    profile_name => 'GENAI_PROFILE',
    attributes   => '{
      "provider": "oci",
      "credential_name": "GENAI_CRED",
      "object_list": [
        {"owner": "SH", "name": "customers"},
        {"owner": "SH", "name": "countries"},
        {"owner": "SH", "name": "products"}
      ]
    }'
  );
END;
/

5. 세션에 AI 프로파일 설정

EXEC DBMS_CLOUD_AI.SET_PROFILE('OPENAI_PROFILE');
EXEC DBMS_CLOUD_AI.SET_PROFILE('GOOGLE_PROFILE');

Select AI 사용 방법

1. 지원 환경별 사용법

SQL Developer 등 지원 환경에서

-- 기본 쿼리 실행
SELECT AI how many customers exist;

-- 생성된 SQL 확인
SELECT AI showsql how many customers exist;

-- 결과 설명
SELECT AI narrate how many customers exist;

-- SQL 설명
SELECT AI explainsql how many customers in San Francisco are married;

Database Actions 등 미지원 환경에서

Database Actions에서는 SELECT AI 구문이 지원되지 않으므로 함수 방식을 사용해야 합니다:"
예시:  GOOGLE_PROFILE 사용기준

-- Database Action -> SQL 워크시트 기준수행

DECLARE
  l_result CLOB;
BEGIN
  l_result := DBMS_CLOUD_AI.GENERATE(
    prompt       => 'how many customers exist',
    profile_name => 'GOOGLE_PROFILE',
    action => 'runsql'
  );
  DBMS_OUTPUT.PUT_LINE('AI Result: ' || SUBSTR(l_result, 1, 255)); -- CLOB의 일부만 출력
EXCEPTION
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);
END;
/

-- 결과 

AI Result: [
  {
    "Number of Customers" : 55500
  }
]


PL/SQL 프로시저가 성공적으로 완료되었습니다.

경과 시간: 00:00:04.642

2. 사용 가능한 액션 타입

액션 설명 지원 환경
runsql 쿼리 실행 및 결과 반환 (기본값) 제한적
showsql 생성된 SQL문 반환 모든 환경
narrate 결과를 자연어로 설명 모든 환경
chat AI와 대화 모든 환경
explainsql SQL 설명 모든 환경

프로파일 관리 및 모니터링

1. 프로파일 현황 확인

-- 전체 프로파일 목록 확인
SELECT profile_id, profile_name, owner, status, description,
       TO_CHAR(created, 'yyyy/mm/dd hh24:mi:ss') AS created
FROM dba_cloud_ai_profiles;

-- 프로파일 상세 속성 확인
SELECT profile_name, attribute_name, attribute_value
FROM dba_cloud_ai_profile_attributes
WHERE profile_name in ('OPENAI_PROFILE','GOOGLE_PROFILE','GENAI_PROFILE');

2. 현재 세션 프로파일 확인

DECLARE
  l_profile_name  VARCHAR2(128);
  l_profile_owner VARCHAR2(128);
BEGIN
  DBMS_CLOUD_AI.GET_PROFILE(
    profile_name  => l_profile_name,
    profile_owner => l_profile_owner
  );
  DBMS_OUTPUT.PUT_LINE('Profile Name: ' || l_profile_name);
  DBMS_OUTPUT.PUT_LINE('Profile Owner: ' || l_profile_owner);
END;
/

문제 해결 가이드

1. 일반적인 오류 및 해결책

ORA-00923: FROM 키워드 오류

원인: AI 프로파일이 세션에 설정되지 않음
해결: EXEC DBMS_CLOUD_AI.SET_PROFILE('프로파일명') 실행

ORA-00904: "AI": 부적합한 식별자

원인:

  • Oracle 23ai 미지원 환경
  • 미지원 클라이언트 사용
  • 프로파일 미설정

해결:

  • Oracle 23ai 또는 지원 환경에서 실행
  • SQL Developer 등 지원 클라이언트 사용
  • Database Actions에서는 DBMS_CLOUD_AI.GENERATE 함수 사용

ORA-06553: PLS-306 오류

원인: 잘못된 파라미터 사용
해결: 지원되는 파라미터만 사용

-- 올바른 사용법
DECLARE
  l_result CLOB;
BEGIN
  l_result := DBMS_CLOUD_AI.GENERATE(
    prompt       => 'how many customers exist',
    profile_name => 'GOOGLE',
    action => 'narrate'
  );
  DBMS_OUTPUT.PUT_LINE('AI Result: ' || SUBSTR(l_result, 1, 255)); -- CLOB의 일부만 출력
EXCEPTION
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);
END;
/

-- 결과
AI Result: There are 55,500 customers in the database.


PL/SQL 프로시저가 성공적으로 완료되었습니다.

경과 시간: 00:00:06.937

2. 결과값 문제 해결

Select AI 함수에서 SQL만 반환되고 실제 결과가 나오지 않는 경우:

  1. 생성된 SQL 직접 실행: 반환된 SQL문을 복사하여 별도로 실행
  2. 프로파일 object_list 확인: 쿼리 대상 테이블이 프로파일에 포함되어 있는지 확인
  3. 권한 재확인: 네트워크 ACL, Credential 등 설정 점검
  4. 파라메터 재확인: Action 값의 점검

보안 및 모범 사례

1. 보안 고려사항

  • API 키 관리: 모든 AI 제공업체의 API 키는 안전하게 관리하고 주기적으로 교체해야 합니다
  • 네트워크 제한: 필요한 호스트에만 ACL을 설정하여 보안을 강화합니다
  • 권한 최소화: Select AI 사용자에게 필요한 최소 권한만 부여합니다

2. 성능 최적화

  • 프로파일 최적화: object_list에 필요한 테이블만 포함하여 성능을 향상시킵니다
  • 적절한 모델 선택: 용도에 맞는 AI 모델을 선택하여 비용과 성능을 최적화합니다

3. 모니터링 및 관리

  • 사용량 모니터링: AI 제공업체별 API 사용량을 정기적으로 확인합니다
  • 결과 검증: LLM의 환각 현상을 고려하여 생성된 SQL과 결과를 항상 검증합니다

결론

Oracle Cloud Infrastructure(OCI) ATP 23ai의 Select AI 기능은 자연어 처리를 통해서 쉽게 결과를 확인할수 있으며, APEX 를 통한 DashBoard 구성, API 형태의 제공등 다양한 형태로 사용될것으로 기대됩니다.

참고

https://docs.oracle.com/en/cloud/paas/autonomous-database/dedicated/hsarg/
https://docs.oracle.com/en/cloud/paas/autonomous-database/dedicated/abmsc/index.html
https://docs.oracle.com/en/database/oracle/oracle-database/23/arpls/DBMS_NETWORK_ACL_ADMIN.html