목차
- 1. Select AI 개요
- 2. 지원되는 AI 제공업체 및 모델
- 3. OCI ATP 23ai 인스턴스 생성
- 4. Select AI 설정 및 구현
- 5. Select AI 사용 방법
- 6. 프로파일 관리 및 모니터링
- 7. 문제 해결 가이드
- 8. 보안 및 모범 사례
- 9. 결론
시작하기에 앞서서..
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 인스턴스를 생성합니다:
- 기본 설정
- Display Name: 인스턴스 식별 이름
- Database Name: SID 설정
- Compartment: 적절한 구획 선택
- 워크로드 타입 선택
- Transaction Processing 선택 (Select AI에 최적화)
- Always Free 옵션 활용 가능
- 버전 선택
- Oracle Database 23ai 버전 선택
- 관리자 패스워드 설정
- 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만 반환되고 실제 결과가 나오지 않는 경우:
- 생성된 SQL 직접 실행: 반환된 SQL문을 복사하여 별도로 실행
- 프로파일 object_list 확인: 쿼리 대상 테이블이 프로파일에 포함되어 있는지 확인
- 권한 재확인: 네트워크 ACL, Credential 등 설정 점검
- 파라메터 재확인: 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