본문 바로가기
3. 데이터관리

Select AI 쿼리 생성 기능 소개(ADB)

by #도상 2024. 2. 20.
더보기

#자연어를 사용하여 데이터 쿼리

ADB(자율 운영 데이터베이스)를 사용하면 자연어를 사용하여 데이터를 간단하게 쿼리할 수 있습니다. 질문을 하는 사람은 데이터가 어디에 저장되어 있는지, 그 구조가 무엇인지, 결과를 얻기 위해 다른 데이터와 결합하는 방법을 알 필요가 없습니다. 이러한 모든 작업은 대규모 언어 모델과 자율 데이터베이스에 의해 처리됩니다.

 

 


다음 방법으로 진행

1. AI profile 만들기
2. 일반적인 AI 채팅 
3. 자연어를 사용하여 데이터 쿼리
4. 쿼리에 대해 생성된 SQL 표시

 


AI profiles 을 사용하여 LLM에 액세스


프로필은 LLM 공급자의 속성과 자연어 쿼리에 사용하려는 테이블 및 보기를 캡처합니다. 여러 프로필(예: 다른 공급자에 대해)을 만들 수 있지만 특정 세션에서는 하나만 활성화됩니다.

 


AI 프로필 만들기

  • LLM API 요청에 서명하는 데 사용되는 자격 증명 만들기
  • 자연어 쿼리에 사용할 수 있는 LLM 공급자와 메타데이터(스키마, 테이블, 뷰 등)를 설명하는 프로필을 만듭니다. 여러 프로필을 만들 수 있으며 각각은 서로 다른 모델을 가리킵니다.
  • 세션에 대한 프로필을 설정합니다. 단일 LLM에 액세스하고 있으므로 세션에 대한 프로필을 설정하는 LOGON 트리거를 만듭니다

 

(Open AI API 신청을 하여 key 발급 필요)

begin
    begin
        -- ~~~~~~~~~~~~~~
        -- A profile needs a credential in order to connect to the LLM
        -- Create a credential: the username can be anything. The password is the
        -- secret you created with the LLM provider
        -- ~~~~~~~~~~~~~~
        dbms_cloud.create_credential (
            credential_name  => 'OPENAI_CRED',
            username         => 'OPENAI',
            password         => 'sk-xxxxxxxxO'
            );
    exception
        when others then
            dbms_output.put_line('Ignore a ORA-20022 create credential error. The credential may already exist from the setup.');
            dbms_output.put_line(sqlerrm);
    end;
    -- ~~~~~~~~~~~~~~
    -- drop the AI profile just in case it already exists
    -- ~~~~~~~~~~~~~~
    dbms_cloud_ai.drop_profile(
        profile_name => 'openai_gpt35',
        force => true
    );
    -- ~~~~~~~~~~~~~~
    -- Specify the LLM provider, your credential
    -- and the tables/views that will be used for queries
    -- You can specify specific tables. Or, omit the table from the object list to
    -- include all objects in the schema
    -- ~~~~~~~~~~~~~~
    dbms_cloud_ai.create_profile(
        profile_name => 'openai_gpt35',
        attributes =>
            '{"provider": "openai",
            "credential_name": "OPENAI_CRED",
            "object_list": [{"owner": "MOVIESTREAM", "name": "movies"},
                            {"owner": "MOVIESTREAM", "name": "streams"},
                            {"owner": "MOVIESTREAM", "name": "customer_extension"},
                            {"owner": "MOVIESTREAM", "name": "pizza_shop"},
                            {"owner": "MOVIESTREAM", "name": "actors"},
                            {"owner": "MOVIESTREAM", "name": "genre"},
                            {"owner": "MOVIESTREAM", "name": "customer_segment"},
                            {"owner": "MOVIESTREAM", "name": "customer_contact"}
                            ]
            }'
        );
    -- ~~~~~~~~~~~~~~
    -- set the AI profile for this session
    -- ~~~~~~~~~~~~~~
    dbms_cloud_ai.set_profile(
        profile_name => 'openai_gpt35'
    );
end;

 

 

 

이제 'SELECT AI'를 사용 할 수 있습니다. 

작업은 다음과 같습니다.
1. chat - 일반 AI 채팅
2. runsql - [default] 질문을 하고 구조화된 결과를 얻습니다.
3. narrate - 질문을 하고 대화 결과를 얻습니다.
4. showsql - 결과를 생성하는 데 사용되는 SQL

 

일반적인 chat 질문 가능

일반적인 채팅 수행 모습

 

 

문장을 이해하여 sql 수행

sql 을 결과를 받아보는 runsql

 

 

 

narrate 방식으로 결과 받기

 

생성된 sql 확인

만들어진 SQL 확인

 

 

조금 더 복잡한 질문을 했을 때 결과

 

 

sql 을 확인해 본 결과 영화를 본지 오래된 순서로 나오지 않았다. 왜? 질문이 명확하지 않았기 때문에!

 

질문을 좀 더 구체적이고 명확하게 변경해봤다. Top-sql 을 정확하게 명시한 쿼리를 생성해 줬다.

 

 

 

좀더 복잡한 조건과 집계 기준을 넣어서 복잡한 쿼리를 요청해봤다. 어느 정도 정확하게 쿼리를 생성해 줬다.

 

 

 

 

정리. 질문을 명확하고 확실하게 해줘야 제대로 쿼리를 작성해서 준다. metadata(pk, fk 등 포함) 가 풍부하면 할 수록 정확도 높아지는 것을 확인 할 수 있었지만 가장 중요한 건 질문을 잘하는 것!

 

 

상세한 실습 안내 페이지

https://apexapps.oracle.com/pls/apex/r/dbpm/livelabs/view-workshop?wid=3831&clear=RR,180&session=109547401823655

 

Select AI를 사용하여 자연어 프롬프트에서 SQL 생성 docs

https://docs.oracle.com/en-us/iaas/autonomous-database-serverless/doc/sql-generation-ai-autonomous.html

 

Using Oracle Autonomous Database Serverless

Oracle Autonomous Database Select AI enables you to query your data using natural language.

docs.oracle.com

 

 

작성자: 도상훈(oracledo@gmail.com) / Cloud Architect
개인 시간을 투자하여 작성된 글로서, 글의 내용에 오류가 있을 수 있으며, 글 속의 의견은 개인적인 의견입니다.

 

 

댓글