Cloud

자연어를 사용하여 쿼리해보기 (feat. OCI Generative AI, Select AI)

newdoin 2025. 1. 15. 12:13

들어가며

OCI 에서 자연어로 쿼리를 수행할 수 있는 기능은 나온지 1년이 넘었다. 근데 뭐 솔직한 내 생각은 자연어로 쿼리를 대체하려고 한다면, 그 만큼 자연어로 요구사항을 구조적으로 작성해야하며 원하는 결과가 나오지 않는 경우 쿼리를 직접 수정할 수 있어야 하기 때문에 이 기능의 이점을 찾진 못했었다.

그래도 아예 모르는 상태로 넘어가기엔 찜찜하기도 하고 LiveLabs에 친절히 안내되어 있으니 찍먹 해보기로 했다.

https://oracle-livelabs.github.io/adb/shared/adb-speaks-human/workshops/tenancy/index.html?lab=setup-environment

 

Oracle LiveLabs

 

oracle-livelabs.github.io

소개

Hands-On을 하기 전 간단히 이번에 사용한 것들에 대한 간단한 동작 원리와 용어를 정리해봤다.

매커니즘

Autonomous Databse (ADB)의 DBMS_CLOUD_AI 패키지를 통해 LLM 모델을 활용하는 것이다. DBMS_CLOUD_AI 패키지가 LLM 과의 연결을 지원해주고,  LLM에 데이터베이스 스키마에 대한 정보를 제공하여 해당 스키마와 일치하는 SQL 쿼리를 작성하도록 지시하는 것이다.

용어 정리

  • Autonomous Databse: Oracle Database를 기반으로 하고 있는 자율 데이터베이스, 관리(프로비저닝, 백업, 패치 및 업그레이드, 확장 또는 축소 등등)가 필요하지 않음
  • Select AI: ADB에서 자연어를 SQL 쿼리로 생성하고 실행할 수 있는 기능
  • Generative AI: 다양한 LLM 모델을 통해 자연어를 처리하며 API를 통해 OCI의 다양한 서비스에서 활용 가능

아키텍처

이번 Hands-On의 아키텍처 및 실행 흐름을 도식화 했다.

Hands-On 아키텍처

Resource Manager를 통해 App & DB Tier 쪽을 배포했다. 사용된 테라폼 코드 및 스크립트는 LiveLabs 에서 제공하는 것을 사용했다. (매우 편리했음) 그리고 Generative AI를 API로 호출하기 위해 API Key를 발급했고, Credential 설정만 추가로 해주었다.

주의할 점

LiveLabs에는 Policy 설정을 통해 별도의 Credential을 설정하지 않았지만, Policy가 최근에 변경된 것인지 Generative AI가 호출되지 않았다. 그래서 API Key를 발급하고 이를 Credential로 지정해서 정상적으로 호출되는 것을 확인했다. 아래는 이와 관련된 쿼리문이다.

--
-- API Key로 Credential 생성
--
BEGIN                                                                         
  DBMS_CLOUD.CREATE_CREDENTIAL(                                               
    credential_name => 'GENAI_CRED',                                          
    user_ocid       => 'ocid1.user.oc1..',
    tenancy_ocid    => 'ocid1.tenancy.oc1..',
    private_key     => '<private-key>',
    fingerprint     => '<fingerprint>'      
  );                                                                          
END;                                                                         
/

--
-- AI Profile 생성
--
BEGIN                                                                        
  DBMS_CLOUD_AI.CREATE_PROFILE(                                              
      profile_name =>'GENAI',                                                             
      attributes   =>'{"provider": "oci",               
                      "credential_name": "GENAI_CRED",
                      "object_list": [
                      {"owner": "MOVIESTREAM", "name": "GENRE"},
                      {"owner": "MOVIESTREAM", "name": "CUSTOMER"},
                      {"owner": "MOVIESTREAM", "name": "PIZZA_SHOP"},
                      {"owner": "MOVIESTREAM", "name": "STREAMS"},
                      {"owner": "MOVIESTREAM", "name": "MOVIES"},
                      {"owner": "MOVIESTREAM", "name": "ACTORS"}
                      ]
                    }'
    );                                                                  
END;                                                                         
/ 

--
-- AI Profile 지정
--
EXEC DBMS_CLOUD_AI.SET_PROFILE('GENAI');

-- 
-- AI Profile 확인
--
SELECT DBMS_CLOUD_AI.get_profile() from dual;

Hands-On 결과

영화와 관련된 데이터들이 들어있었기 때문에 해리슨 포드 배우가 출연했던 영화를 불러오도록 했다.

자연어로 쿼리를 수행한 결과

DB의 테이블에서 데이터를 가져온 결과인데, Generative AI가 결과 값을 스스로 생성할 수도 있다. (APEX에서 캡쳐를 까먹고 안했다..ㅎ)

Generative AI가 결과값을 생성한 결과

이외에도 다른 기능들도 많다.

1. chat - 일반 AI 채팅입니다.
2. runsql - [Hands-On에서 한 것] 질문을 하고 구조화된 결과를 얻습니다.
3. narrate - 질문을 하고 대화 결과를 얻습니다.
4. showsql - 결과를 생성하는 데 사용되는 SQL을 보여줍니다.



 

'Cloud' 카테고리의 다른 글

OCI와 AWS 간 IPSec VPN 연결(feat. Failover)  (0) 2025.02.05
OCI에서 CDN 구축하기  (0) 2025.01.03