Oracle APEX 애플리케이션에 자연어 인터페이스 추가

소개

오라클은 사용자가 사용 사례에 가장 적합한 Oracle Database Cloud Service를 식별할 수 있도록 돕는 비교 정보와 대화식 툴을 제공하는 데이터베이스 전문가 리소스(DBExpert 툴킷) 사이트를 운영하고 있습니다. 최근 웹 사이트에 자연어 인터페이스를 추가하여 사용자가 클라우드 서비스에 대해 질문할 수도 있습니다.

웹 사이트는 Oracle APEX(Oracle Application Express) 인스턴스로 Oracle Autonomous Transaction Processing Serverless 데이터베이스에서 실행되며, 새로운 Oracle Autonomous Database Select AI를 사용하여 데이터와의 자연어 상호 작용을 활성화했습니다.

콘텐츠 관련 질문뿐만 아니라 도움을 요청하고 사용자 피드백을 수락하기 위해 자연어 쿼리에 대한 프론트엔드를 위해 Oracle Digital Assistant를 선택했습니다.

이 자습서에서는 자연어 인터페이스를 추가하기 위해 수행한 작업을 간략하게 설명합니다.

oracle.com/dbexpert의 AskDBExpert

목표

필요 조건

작업 1: Oracle Autonomous Database Select AI를 LLM에 연결하기

APEX 작업영역의 SQL Workshop -> SQL Commands에서 아래 코드를 실행하여 AI(인공 지능) 프로파일을 생성하여 AI 선택과 함께 사용할 스키마 및 데이터베이스 객체를 지정합니다. 프로파일이 태스크 2에서 사용됩니다.

이 자습서에서는 OpenAI를 LLM으로 사용했습니다.

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

BEGIN
    DBMS_CLOUD_AI.CREATE_PROFILE(
        profile_name => 'OPENAI_PROFILE',
        attributes => '{ "provider": "openai",
                        "credential_name": "OPENAI_CRED",
                        "comments":"true", 
                        "object_list": [{"owner": "DB_SCHEMA", "name":"OBJECT_NAME"}]
                    }',
        description => 'AI profile to use OpenAI for SQL translation'
    );
END;

Oracle Autonomous Database Select AI 구성을 확인하려면

select dbms_cloud_ai.generate(
    prompt => 'How many employees work at Oracle?',
    action => 'SHOWSQL',
    profile_name => 'OPENAI_PROFILE'
)
FROM DUAL;

이렇게 하려면 구성을 확인하는 SQL query를 출력으로 받아야 합니다.

작업 2: REST API 통합

Oracle Autonomous Database Select AI가 데이터베이스 객체와 함께 작동하면 Oracle Digital Assistant와 통합될 REST POST 엔드포인트를 생성합니다. Oracle APEX에서 생성하려면 SQL Workshop -> RESTful Data Services를 열고 POST 처리기를 사용하여 모듈을 생성합니다. 모듈 이름과 POST 처리기 이름은 작업 3에서 Oracle Digital Assistant를 구성하는 데 사용됩니다.

POST 처리기는 Oracle Digital Assistant에서 자연어 질문을 수신하고 SQL 질의를 검색합니다. 결과 SQL 질의가 실행되고 출력이 표시를 위해 디지털 어시스턴트로 반환됩니다. 만든 모듈의 POST 처리기에 다음 코드를 붙여 넣습니다.

참고: Oracle APEX를 사용한 RESTful 서비스에 대한 자세한 내용은 RESTful 서비스를 사용하여 데이터 교환 사용을 참조하십시오.

DECLARE
    l_response       CLOB;
    l_sql            CLOB;
    l_prompt         VARCHAR2 (4000);
    l_cursor         NUMBER := DBMS_SQL.open_cursor;
    l_profile_name   user_cloud_ai_profiles.profile_name%TYPE :=  'YOUR_PROFILE'; -- the LLM profile you created per (link to Select AI setup)
    p_refcursor      SYS_REFCURSOR;
    l_result         CLOB;
BEGIN

/* 
    The variable name for the 'prompt' parameter below must match the variable used in the 
    Oracle Digital Assistant Flow, in the State that calls the REST endpoint
*/

    l_sql :=
        dbms_cloud_ai.generate (prompt         =>  :l_prompt, 
                                action         => 'showsql',
                                profile_name   => l_profile_name);

    -- check if SQL could be generated.
    BEGIN
        DBMS_SQL.PARSE (l_cursor, l_sql, DBMS_SQL.native);
        l_response := l_sql;
        parse_cursor (l_sql, p_refcursor, l_result);
        if l_result is not null then
            :status := 200;
        else
            raise_application_error(-20987,'No records found');
        end if;
    EXCEPTION
        WHEN OTHERS
        THEN
            :status := 400;
            l_result := 'Something went wrong while processing...'; 
    END;

    APEX_UTIL.PRN (l_result, FALSE);
END;

Oracle APEX SQL Workshop -> SQL Commands에서 다음을 실행하여 Oracle Autonomous Database Select AI에서 수신한 SQL 쿼리를 실행하는 프로시저를 생성합니다.

CREATE OR REPLACE PROCEDURE parse_cursor (p_query    IN     VARCHAR2,
                                          cur        IN OUT SYS_REFCURSOR,
                                          p_result   OUT CLOB)
AS
    curs          INT;
    cols          INT;
    d             DBMS_SQL.desc_tab2;
    val           VARCHAR2 (32767);
    l_row_count   INTEGER := 0;
BEGIN
    OPEN cur FOR p_query;
    curs := DBMS_SQL.to_cursor_number (cur);
    DBMS_SQL.describe_columns2 (curs, cols, d);
    p_result := p_result || '<table> <tr>';
    FOR i IN 1 .. cols
    LOOP
        DBMS_SQL.define_column (curs,
                                i,
                                val,
                                32767);
        p_result := p_result || '<th>' || d (i).col_name || '</th>';
    END LOOP;
    p_result := p_result ||'</tr>';
    WHILE DBMS_SQL.fetch_rows (curs) > 0
    LOOP
        p_result := p_result ||'<tr>';

        FOR i IN 1 .. cols
        LOOP
            DBMS_SQL.COLUMN_VALUE (curs, i, val);
            p_result := p_result ||'<td>' || val || '</td>';
        END LOOP;

        p_result := p_result ||'</tr>';
        l_row_count := l_row_count + 1;
    END LOOP;
    p_result := p_result ||'</table>';
    IF l_row_count = 0
    THEN
        p_result := NULL;
    END IF;

    DBMS_SQL.close_cursor (curs);
END;
/

출력은 Oracle Digital Assistant와 함께 사용할 수 있도록 테이블로 형식이 지정됩니다. JSON 출력은 다른 응용 프로그램에 대한 또 다른 옵션입니다.

참고: 이 엔드포인트는 여러 Oracle Digital Assistant(또는 유사한 애플리케이션)의 엔드포인트를 사용하여 Oracle Autonomous Database Select AI에서 수행하는 데이터 및 처리를 활용할 수 있습니다.

작업 3: Oracle Digital Assistant 구성

Oracle Digital Assistant 인스턴스에서 데이터에 대한 질문을 처리하는 플로우를 생성했습니다. 추가 플로우는 도움말, 소규모 토크 및 피드백에 대한 요청을 처리합니다. 아래 스크린샷은 Oracle Digital Assistant에서 챗봇을 REST 서비스에 연결하기 위해 작업 2에서 생성한 REST 끝점에 대한 정보를 사용한 위치를 보여줍니다.

참고: 이 자습서에서는 Oracle Digital Assistant 생성 및 구성을 다루지 않습니다. 자세한 내용은 Oracle Digital Assistant를 참조하십시오.

이 플로우는 처리를 위해 사용자 입력을 REST 끝점으로 전달합니다.

Oracle Digital Assistant API 서비스 구성

Oracle Digital Assistant - REST 서비스 호출에 대한 변수 설정

Oracle Digital Assistant - 변수 세부정보 설정

Oracle Digital Assistant - REST 서비스 호출

Oracle Digital Assistant - REST 서비스 응답 캡처

작업 4: Oracle Autonomous Database Select AI용 데이터 준비

스키마에는 매핑 테이블과 조인된 여러 테이블이 포함되어 있습니다. 이러한 모든 데이터를 LLM에 전달하는 대신 도메인 지식을 사용하여 필요한 모든 데이터만 포함된 테이블을 전송함으로써 관련 테이블을 조인하는 뷰를 생성했습니다. 이 뷰는 소스 테이블에서 주기적으로 새로 고쳐져 최신 상태를 유지합니다.

검색 증강 생성(Retrieval Augmented Generation, RAG)

우리는 LLM에 완전하고 신뢰할 수 있는 데이터를 전송하고 있었지만 애플리케이션이 좋은 결과를 얻으려면 더 많은 정보가 필요하다는 것을 빠르게 발견했습니다. (우리는 프롬프트 엔지니어링빠르게 코딩하는 것을 의미하지 않는다는 것을 배웠습니다!) 검색 증강 생성(RAG)을 사용하여 결과를 개선할 수 있었습니다. 예를 들어, 데이터에 표시된 Oracle 패키지 응용 프로그램은 다양한 약어 및 약어로 알려져 있으며, 이제 관련 열에 대한 주석을 제공합니다. 결과를 개선하기 위해 이러한 유형의 조치를 고려할 수 있습니다.

작업 5: Oracle Digital Assistant를 Oracle APEX 애플리케이션에 통합

애플리케이션은 Oracle Autonomous Database 인스턴스에서 호스팅되는 Oracle APEX 인스턴스입니다. Oracle Digital Assistant를 애플리케이션에 통합합니다.

  1. Oracle APEX 애플리케이션에서 공유 구성요소정적 애플리케이션 파일로 이동합니다.

    이러한 정적 응용 프로그램 파일은 챗봇 구성 및 호출에 사용됩니다.

    • settings.js
    • web-sdk.js
    • chatbot_style.css

    참고: Oracle Digital Assistant(ODA) 및 Oracle Mobile Cloud(OMC) 다운로드를 여기에서 다운로드하십시오.

    • settings.js: 이 파일은 Oracle Digital Assistant 구성용입니다. 다음 값을 업데이트합니다.

      • URL: Oracle Digital Assistant 인스턴스의 URL을 입력합니다.
      • 이름: 0페이지의 Oracle APEX Application 페이지 로드 시 이벤트에서 참조된 봇의 이름을 입력합니다.
      • 채널 ID: Oracle Digital Assistant 애플리케이션에서 복사한 채널 ID를 입력합니다.
      • 사용자가 이동할 때 서로 다른 애플리케이션 페이지에서 유지 관리되는 봇 인스턴스에 Oracle APEX 애플리케이션 사용자 세션을 연결합니다.
        • userId: document.getElementById("pInstance").value.
    • web-idk.js: 이 파일은 변경할 필요가 없지만 Oracle Digital Assistant 버전과 일치하도록 Oracle Digital Assistant 플랫폼의 새 릴리스마다 업데이트해야 합니다.

    • chatbot_style.css: CSS 파일을 처음부터 생성하여 챗봇 아이콘을 사용자 정의합니다.

  2. 사용할 응용 프로그램을 구성하려면 Static Application Files에 파일을 업로드합니다. Shared Components, User Interface Attributes, JavaScript로 이동하고 settings.jsweb-sdk.js의 URL을 입력합니다.

    애플리케이션의 사용자 인터페이스 속성 업데이트 - JavaScript

  3. CSS 탭으로 이동하고 CSS 파일의 URL을 입력합니다.

    애플리케이션의 사용자 인터페이스 속성 업데이트 - CSS

  4. 애플리케이션의 전역 페이지 0에서 settings.js 파일에서 initSdk 함수를 호출하기 위해 페이지 로드 시 실행되는 이벤트를 추가합니다.

    챗봇 초기화를 위한 APEX 애플리케이션 이벤트

    챗봇 초기화를 위한 APEX 애플리케이션 이벤트 코드

Oracle APEX 애플리케이션을 실행하면 화면 오른쪽 하단에 챗봇 아이콘이 표시됩니다. 사용자가 자연어 질문을 할 준비가되었습니다!

다음 단계

자연어 쿼리를 사용으로 설정하여 데이터에 값 추가

세 가지 전략적 Oracle 기술을 결합함으로써 다른 애플리케이션 및 웹 사이트에서 사용할 수 있는 새로운 챗봇을 통해 유용하고 확장 가능한 AI 기능을 신속하게 애플리케이션에 도입할 수 있습니다. Oracle Autonomous Database Select AI를 사용하여 처리되는 데이터의 범위를 확장하고, 새로운 Oracle Digital Assistant 플로우를 처리하기 위한 추가 정보 소스를 통합할 수 있습니다.

데이터베이스 전문가 리소스로 이동하여 자연어 인터페이스를 시도하고 피드백을 제공합니다.

oracle.com/dbexpert의 AskDBExpert

확인

추가 학습 자원

docs.oracle.com/learn에서 다른 실습을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하세요. 또한 Oracle Learning Explorer가 되려면 education.oracle.com/learning-explorer을 방문하십시오.

제품 설명서는 Oracle Help Center를 참조하십시오.