Adicionar uma Interface de Linguagem Natural ao Aplicativo Oracle APEX
Introdução
Operamos o site Database Expert Resources (DBExpert Toolkit), que fornece informações comparativas e ferramentas interativas, ajudando os usuários a identificar o melhor Oracle Database Cloud Service para seus casos de uso. Recentemente, adicionamos uma interface de linguagem natural ao nosso site para que os usuários também possam fazer perguntas sobre os serviços de nuvem.
Nosso site é uma instância do Oracle Application Express (Oracle APEX) em execução em um banco de dados Oracle Autonomous Transaction Processing Serverless e vimos que o novo Oracle Autonomous Database Select AI estava disponível para permitir interações de linguagem natural com nossos dados.
Para lidar normalmente não apenas com perguntas relacionadas ao conteúdo, mas também com solicitações de ajuda e aceitar feedback do usuário, escolhemos o Oracle Digital Assistant para o frontend das consultas de linguagem natural.
Este tutorial descreve as tarefas que realizamos para adicionar a interface de linguagem natural.
Objetivos
- Configure uma interface do Oracle Digital Assistant em um aplicativo Oracle APEX para fornecer uma interface de linguagem natural para consultar dados no Oracle Autonomous Database do aplicativo.
Pré-requisitos
-
Instalações e familiaridade com o Oracle Digital Assistant e o Oracle APEX.
-
O aplicativo Oracle APEX deve estar em uma versão do Oracle Database que suporte o Oracle Autonomous Database Select AI.
-
Uma conta com credenciais para um LLM (Large Language Model), que gerará o SQL com base na entrada do usuário. Para obter orientação sobre esse pré-requisito, consulte o blog Introducing Select AI - Natural Language to SQL Generation on Autonomous Database de Mark Hornick.
Tarefa 1: Conectar o Oracle Autonomous Database Select AI ao seu LLM
No espaço de trabalho do APEX, em SQL Workshop -> SQL Commands, execute o código abaixo para criar um perfil de Inteligência Artificial (AI) para especificar esquemas e objetos de banco de dados que serão usados com Select AI. O perfil será usado na Tarefa 2.
Para este tutorial, usamos OpenAI como 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;
Para verificar a configuração do Oracle Autonomous Database Select AI, execute
select dbms_cloud_ai.generate(
prompt => 'How many employees work at Oracle?',
action => 'SHOWSQL',
profile_name => 'OPENAI_PROFILE'
)
FROM DUAL;
A partir disso, você deve receber uma consulta SQL como saída, verificando a configuração.
Tarefa 2: Integrar a API REST
Depois de ter o Oracle Autonomous Database Select AI trabalhando com seus objetos de banco de dados, crie um ponto final REST POST que será integrado ao Oracle Digital Assistant. Para criar isso no Oracle APEX, abra SQL Workshop -> RESTful Data Services e crie um Módulo com um handler POST. O nome do módulo e o nome do handler POST são usados na Tarefa 3 para configurar o Oracle Digital Assistant.
O handler POST recebe as perguntas de linguagem natural do Oracle Digital Assistant e recupera uma consulta SQL. A consulta SQL resultante é executada e a saída é retornada ao assistente digital para exibição. Cole o seguinte código no handler POST do módulo criado:
Dica: Consulte Ativando o Intercâmbio de Dados com os Serviços RESTful para obter mais detalhes sobre os Serviços RESTful com o Oracle APEX.
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;
Execute o seguinte no Oracle APEX SQL Workshop -> SQL Commands para criar o procedimento que executa a consulta SQL recebida do Oracle Autonomous Database Select AI:
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;
/
A saída é formatada em uma tabela para uso com o Oracle Digital Assistant; a saída JSON seria outra opção para diferentes aplicativos.
Observação: esse ponto final pode ser usado em vários Assistentes Digitais da Oracle (ou aplicativos semelhantes) para aproveitar os dados e o processamento executados pelo Oracle Autonomous Database Select AI.
Tarefa 3: Configurar um Oracle Digital Assistant
Em nossa instância do Oracle Digital Assistant, criamos um fluxo para lidar com perguntas sobre nossos dados. Fluxos adicionais lidam com solicitações de ajuda, conversa fiada e feedback. As capturas de tela abaixo mostram os lugares no Oracle Digital Assistant em que usamos as informações sobre o ponto final REST que criamos na Tarefa 2 para conectar o chatbot ao serviço REST.
Dica: Este tutorial não abrange a criação e a configuração de um Oracle Digital Assistant. Para obter mais informações, consulte Oracle Digital Assistant.
Este fluxo passa a entrada do usuário para o ponto final REST para processamento.
Tarefa 4: Preparar Dados para o Oracle Autonomous Database Select AI
Nosso esquema inclui várias tabelas associadas a tabelas de mapeamento. Em vez de passar tudo isso para o LLM, criamos uma view que une as tabelas relevantes, usando nosso conhecimento de domínio para enviar uma tabela com todos (e apenas) os dados necessários. Esta exibição é atualizada periodicamente das tabelas de origem para permanecer atualizada.
Polonês a experiência com Geração Aumentada de Recuperação (RAG)
Descobrimos rapidamente que, embora estivéssemos enviando nossos dados completos e confiáveis para o LLM, mais informações eram necessárias para que nossa aplicação produzisse bons resultados. (Aprendemos que engenharia rápida não significa codificar rapidamente!) Ao usar a geração aumentada de recuperação (RAG), conseguimos melhorar nossos resultados. Por exemplo, os pacotes de aplicativos da Oracle representados em nossos dados são conhecidos por várias abreviações e acrônimos, que agora fornecemos em comentários sobre as colunas relevantes. Você pode considerar esse tipo de ação para melhorar seus resultados.
Tarefa 5: Integrar um Oracle Digital Assistant ao Aplicativo Oracle APEX
O aplicativo é uma instância do Oracle APEX hospedada em uma instância do Oracle Autonomous Database. Integrar o Oracle Digital Assistant ao aplicativo.
-
No aplicativo Oracle APEX, vá para Componentes Compartilhados e Arquivos de Aplicativos Estáticos.
Esses arquivos de aplicativos estáticos são usados para configurar e chamar o chatbot.
settings.js
web-sdk.js
chatbot_style.css
Observação: Faça download destes modelos do Oracle Digital Assistant aqui: Downloads do Oracle Digital Assistant (ODA) e do Oracle Mobile Cloud (OMC).
-
settings.js
: Este arquivo destina-se à configuração do Oracle Digital Assistant. Atualize os seguintes valores.- URL: Informe o URL da sua instância do Oracle Digital Assistant.
- Nome: Digite o nome do bot referenciado no evento Na Carga da Página do Aplicativo Oracle APEX na página 0.
- ID do Canal: Informe o ID do canal copiado do aplicativo Oracle Digital Assistant.
- Para vincular as sessões do usuário do aplicativo Oracle APEX a uma instância de bot mantida em diferentes páginas do aplicativo à medida que o usuário navega.
- userId:
document.getElementById("pInstance").value
.
- userId:
-
web-idk.js
: Não são necessárias alterações neste arquivo, mas ele deve ser atualizado para cada nova versão da plataforma do Oracle Digital Assistant, para corresponder à versão do Oracle Digital Assistant. -
chatbot_style.css
: Crie um arquivo CSS do zero para personalizar o ícone do chatbot.
-
Para configurar o aplicativo a ser usado, faça upload do arquivo em Arquivos de Aplicativo Estático. Vá para Componentes Compartilhados, Atributos da Interface do Usuário, JavaScript e informe os URLs para
settings.js
eweb-sdk.js
. -
Vá para a guia CSS e digite o URL do arquivo CSS.
-
Na Página Global 0 do aplicativo, adicione um evento acionado no carregamento da página para chamar a função
initSdk
no arquivosettings.js
.
Execute seu aplicativo Oracle APEX e ele deverá exibir o ícone do chatbot na parte inferior direita da tela. Está pronto para os usuários fazerem perguntas em linguagem natural!
Próximas Etapas
Ativar Consultas de Linguagem Natural para agregar Valor aos Seus Dados
Combinando três tecnologias estratégicas da Oracle, você introduziu rapidamente recursos de IA úteis e extensíveis em seu aplicativo com um novo chatbot que pode ser usado em outros aplicativos e sites. Você pode expandir o escopo dos dados tratados usando o Oracle Autonomous Database Select AI e integrar fontes adicionais de informações para novos fluxos do Oracle Digital Assistant a serem processados.
Vá para os Recursos Especializados de Banco de Dados e experimente a interface de linguagem natural e nos dê feedback.
Links Relacionados
Agradecimentos
-
Autores - Burt Clouse, Omar Gallardo
-
Contribuidores - Marty Gubar, Mark Hornick, Yuoko Watari
Mais Recursos de Aprendizagem
Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal Oracle Learning YouTube. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.
Para obter a documentação do produto, visite o Oracle Help Center.
Add a Natural Language Interface to Oracle APEX Application
G11970-04
October 2024