Upload files to "/"
This commit is contained in:
248
prc_26ai_tech.sql
Normal file
248
prc_26ai_tech.sql
Normal file
@@ -0,0 +1,248 @@
|
||||
create or replace procedure prc_26ai_tech (p_rowid in varchar default null,
|
||||
p_oci_cred IN VARCHAR2 default 'OCI_CRED',
|
||||
p_comp in varchar2 )
|
||||
/*
|
||||
|
||||
|
||||
Para testes de carga, ou associacao a jobs:
|
||||
|
||||
declare
|
||||
v_resp clob;
|
||||
v_json clob;
|
||||
begin
|
||||
for r1 in (select rowid cid from TB_26AI_TECH where insight_report is null ) loop
|
||||
PRC_26AI_TECH (p_rowid => r1.cid ,
|
||||
p_oci_cred => 'OCI_CRED',
|
||||
p_comp => 'ocid1.compartment.oc1..aaaaaaaayv4jpgnurtdpxwfy3t2tak6akpyh6jgunlc6pdmilqv5f2s5nevq',
|
||||
p_response => v_resp,
|
||||
p_json => v_json );
|
||||
end loop;
|
||||
end;
|
||||
|
||||
*/
|
||||
as
|
||||
v_pre_prompt clob;
|
||||
v_customer_data clob;
|
||||
v_pre_prompt_json clob;
|
||||
v_response clob;
|
||||
v_json clob;
|
||||
v_error clob;
|
||||
begin
|
||||
|
||||
v_pre_prompt :='Você é um analista sênior de dados e operações.
|
||||
Sua tarefa é interpretar os dados, comparar os resultados e produzir um relatório executivo e técnico acionável.
|
||||
|
||||
Objetivo:
|
||||
Gerar insights em 4 blocos:
|
||||
1) Análise
|
||||
2) Diagnóstico
|
||||
3) Recomendações
|
||||
4) Plano de ação
|
||||
|
||||
Regras de qualidade:
|
||||
- Não invente dados ausentes. Quando faltar contexto, declare explicitamente “Informação não fornecida”.
|
||||
- Seja específico, com linguagem executiva + técnica.
|
||||
- Priorize risco real de negócio e explorabilidade.
|
||||
- Sempre indicar severidade e prioridade.
|
||||
- Sempre incluir ações de curto, médio e longo prazo.
|
||||
- Quando possível, referenciar boas práticas (OWASP, NIST, CIS, CVE/CWE).
|
||||
|
||||
Formato obrigatório da resposta:
|
||||
## 1. Análise
|
||||
- Resumo executivo (5 a 8 linhas)
|
||||
- Principais métricas observadas
|
||||
- Pontos fora do padrão (outliers/anomalias)
|
||||
|
||||
## 2. Diagnóstico
|
||||
- Causas prováveis por ordem de impacto (Alta/Média/Baixa)
|
||||
- Evidências que sustentam cada causa (referenciando campos do JSON)
|
||||
- Riscos de curto e médio prazo se nada for feito
|
||||
|
||||
## 3. Recomendações
|
||||
Para cada recomendação, informe:
|
||||
- Ação recomendada
|
||||
- Problema que resolve
|
||||
- Impacto esperado
|
||||
- Esforço estimado (Baixo/Médio/Alto)
|
||||
- Prioridade (P1/P2/P3)
|
||||
|
||||
## 4. Plano de ação (30-60-90 dias)
|
||||
- 30 dias: ações imediatas e “quick wins”
|
||||
- 60 dias: ajustes estruturais
|
||||
- 90 dias: consolidação e otimização
|
||||
Para cada etapa, incluir:
|
||||
- Responsável sugerido (perfil/função)
|
||||
- Dependências
|
||||
- Métrica de sucesso (KPI)
|
||||
- Critério de conclusão';
|
||||
|
||||
|
||||
v_pre_prompt_json := '## FORMATO DE SAÍDA JSON
|
||||
Quando solicitado no modo JSON, responda EXCLUSIVAMENTE com o objeto JSON
|
||||
válido conforme o schema abaixo, sem texto antes ou depois, sem markdown,
|
||||
sem blocos de código. O JSON deve ser parseable diretamente.
|
||||
Campos não avaliáveis por qualidade de imagem devem receber null.
|
||||
Não inclua explicações, texto introdutório, saudações ou blocos de Markdown como "```json" no comeco nem no final como "```".
|
||||
|
||||
## Exemplo JSON:
|
||||
Retorne um JSON válido (sem comentários), espelhando o relatório:
|
||||
{
|
||||
"id": "",
|
||||
"titulo": "",
|
||||
"analise": {
|
||||
"resumo_tecnico": "",
|
||||
"vetor_ataque": "",
|
||||
"pre_condicoes": [],
|
||||
"impacto_cia": {
|
||||
"confidencialidade": "",
|
||||
"integridade": "",
|
||||
"disponibilidade": ""
|
||||
}
|
||||
},
|
||||
"diagnostico": {
|
||||
"causa_raiz": "",
|
||||
"classificacao": {
|
||||
"cwe": "",
|
||||
"owasp": ""
|
||||
},
|
||||
"severidade": "",
|
||||
"probabilidade_exploracao": "",
|
||||
"impacto_negocio": "",
|
||||
"prioridade_final": "",
|
||||
"justificativa": ""
|
||||
},
|
||||
"recomendacoes": [
|
||||
{
|
||||
"acao": "",
|
||||
"tipo": "corretiva|preventiva|detectiva",
|
||||
"esforco": "baixo|medio|alto",
|
||||
"dependencias": []
|
||||
}
|
||||
],
|
||||
"plano_acao": [
|
||||
{
|
||||
"prazo": "curto|medio|longo",
|
||||
"etapa": "",
|
||||
"responsavel_sugerido": "",
|
||||
"deadline_sugerido": "",
|
||||
"resultado_esperado": "",
|
||||
"criterio_aceite": ""
|
||||
}
|
||||
],
|
||||
"lacunas_informacao": []
|
||||
}';
|
||||
|
||||
select json_object(
|
||||
'AGE_IN_DAYS' VALUE AGE_IN_DAYS,
|
||||
'ASSET_DISPLAY_IPV4_ADDRESS' VALUE ASSET_DISPLAY_IPV4_ADDRESS,
|
||||
'ASSET_ID' VALUE ASSET_ID,
|
||||
'ASSET_NAME' VALUE ASSET_NAME,
|
||||
'ASSET_TAGS' VALUE ASSET_TAGS,
|
||||
'DEFINITION_EXPLOITABILITY_EASE' VALUE DEFINITION_EXPLOITABILITY_EASE,
|
||||
'DEFINITION_FAMILY' VALUE DEFINITION_FAMILY,
|
||||
'DEFINITION_ID' VALUE DEFINITION_ID,
|
||||
'DEFINITION_NAME' VALUE DEFINITION_NAME,
|
||||
'DEFINITION_VPR_SCORE' VALUE DEFINITION_VPR_SCORE,
|
||||
'FIRST_OBSERVED' VALUE FIRST_OBSERVED,
|
||||
'ID' VALUE ID,
|
||||
'LAST_SEEN' VALUE LAST_SEEN,
|
||||
'OUTPUT' VALUE OUTPUT,
|
||||
'PROTOCOL' VALUE PROTOCOL,
|
||||
'RESURFACED_DATE' VALUE RESURFACED_DATE,
|
||||
'SEVERITY' VALUE SEVERITY,
|
||||
'STATE' VALUE STATE,
|
||||
'INSIGHT_REPORT' VALUE INSIGHT_REPORT,
|
||||
'ID_INSIGHT' VALUE ID_INSIGHT,
|
||||
'NOME' VALUE NOME,
|
||||
'EMPRESA' VALUE EMPRESA,
|
||||
'CLASSE' VALUE CLASSE,
|
||||
'AMBIENTE' VALUE AMBIENTE,
|
||||
'STATUS_OPERACIONAL' VALUE STATUS_OPERACIONAL,
|
||||
'DESCRICAO' VALUE DESCRICAO,
|
||||
'SOX' VALUE SOX,
|
||||
'COFRE' VALUE COFRE,
|
||||
'ENDERECO_IP' VALUE ENDERECO_IP,
|
||||
'SISTEMA_OPERACIONAL' VALUE SISTEMA_OPERACIONAL,
|
||||
'TIPO_DE_REDE' VALUE TIPO_DE_REDE,
|
||||
'IS_VIRTUAL' VALUE IS_VIRTUAL,
|
||||
'CRITICIDADE' VALUE CRITICIDADE,
|
||||
'INSTANCIAS_BANCOS' VALUE INSTANCIAS_BANCOS,
|
||||
'APLICACOES_RELACIONADAS' VALUE APLICACOES_RELACIONADAS,
|
||||
'JANELAS_DE_MANUTENCAO' VALUE JANELAS_DE_MANUTENCAO,
|
||||
'ANALISTA_RESPONSAVEL' VALUE ANALISTA_RESPONSAVEL,
|
||||
'ANALISTAS_RESPONSAVEIS' VALUE ANALISTAS_RESPONSAVEIS,
|
||||
'GERENCIADO_PELO_GRUPO' VALUE GERENCIADO_PELO_GRUPO,
|
||||
'GRUPOS_RESPONSAVEIS' VALUE GRUPOS_RESPONSAVEIS,
|
||||
'GRUPO_RESPONSAVEL' VALUE GRUPO_RESPONSAVEL,
|
||||
'EDR' VALUE EDR,
|
||||
'TENABLE' VALUE TENABLE,
|
||||
'SIEM' VALUE SIEM,
|
||||
'APPLIANCE' VALUE APPLIANCE
|
||||
) AS my_json
|
||||
into v_customer_data
|
||||
from v_26ai_tech a
|
||||
where cid = p_rowid;
|
||||
-- and insight_report is null ;
|
||||
|
||||
v_response := FNC_26ai_rag( p_ai_prompt => v_pre_prompt || '. Dados: ' || v_customer_data,
|
||||
p_oci_cred => p_oci_cred,
|
||||
p_comp => p_comp
|
||||
);
|
||||
|
||||
v_json := replace( replace( FNC_26ai_rag( p_ai_prompt => 'MODO JSON: ' || v_pre_prompt || ' ' || v_pre_prompt_json || '. Dados: ' || v_customer_data,
|
||||
p_oci_cred => p_oci_cred,
|
||||
p_comp => p_comp
|
||||
) ,'```json','' ),'```','' );
|
||||
|
||||
update TB_26AI_TECH_v2
|
||||
set insight_report = v_response,
|
||||
insight_json = v_json
|
||||
where rowid = p_rowid;
|
||||
|
||||
|
||||
if length(v_response) > 0 then
|
||||
|
||||
-- vetorizacao do relatorio gerado
|
||||
insert into TB_26AI_TECH_VECTOR
|
||||
SELECT et.embed_id,
|
||||
v_response,
|
||||
et.embed_vector,
|
||||
null,
|
||||
p_rowid
|
||||
FROM dual
|
||||
CROSS JOIN TABLE(
|
||||
DBMS_VECTOR_CHAIN.UTL_TO_EMBEDDINGS(
|
||||
-- DBMS_VECTOR_CHAIN.UTL_TO_CHUNKS(
|
||||
-- dbms_vector_chain.utl_to_text( v_response ) ,
|
||||
( v_response ) ,
|
||||
-- JSON('{"by":"words","max":"1000","split":"sentence","normalize":"all","overlap":"0"}') ),
|
||||
json('{ "provider": "ocigenai",
|
||||
"credential_name": "' || p_oci_cred || '",
|
||||
"url": "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/embedText",
|
||||
"model": "cohere.embed-v4.0"
|
||||
}')
|
||||
)
|
||||
) t
|
||||
CROSS JOIN JSON_TABLE(
|
||||
t.column_value, '$[*]'
|
||||
COLUMNS (
|
||||
embed_id NUMBER PATH '$.embed_id',
|
||||
text_chunk VARCHAR2(4000) PATH '$.embed_data',
|
||||
embed_vector CLOB PATH '$.embed_vector'
|
||||
)
|
||||
) AS et;
|
||||
|
||||
end if;
|
||||
|
||||
commit;
|
||||
|
||||
exception
|
||||
when others then
|
||||
v_error := sqlerrm;
|
||||
update TB_26AI_TECH_v2
|
||||
set insight_report = v_error,
|
||||
insight_json = null
|
||||
where rowid = p_rowid;
|
||||
commit;
|
||||
end;
|
||||
/
|
||||
Reference in New Issue
Block a user