Torna a regiao do Generative AI configuravel (GENAI_REGION)

Region estava fixa em us-chicago-1 em varios pontos (ACL, testes 5.1/5.2/5.3,
FNC_26ai_rag, fnc_26ai_tech_rag, fnc_26ai_embed, PRC_26AI_TECH). Tenancies com
escopo regional restrito (ex. America Latina) podem nao alcancar essa regiao,
mesmo com credencial/ACL/compartimento corretos - o sintoma e ORA-20404
"Object not found" com uma URL bem formada.

Novo parametro GENAI_REGION em TB_26AI_TECH_PARAMS (default us-chicago-1,
editavel) substitui o valor fixo em todos os pontos de chamada. Seção 1.6
(ACL) continua com host fixo por rodar antes da tabela de config existir,
mas o comentario agora aponta para o parametro. docs/09 ganhou uma entrada
de checklist nova: ORA-20404 com URL correta pode ser modelo aposentado
para uso on-demand na regiao (verificavel via
`oci generative-ai model-collection list-models`), nao so credencial/ACL.

Seções 6 e 7 de docs/04-passo-a-passo-banco.html tambem foram
resincronizadas com o sql/01_ampminsights_db_setup.sql atual (estavam
desatualizadas desde a adição do TB_26AI_TECH_LOG).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-24 15:20:32 -03:00
parent 56c11d0715
commit 1e9af90582
4 changed files with 272 additions and 56 deletions

View File

@@ -103,9 +103,15 @@ GRANT CREATE CREDENTIAL TO AMPMINSIGHTS;
GRANT CREATE JOB TO AMPMINSIGHTS;
-- 1.6) Regras de rede (ACL) para o schema poder chamar o endpoint do OCI
-- Generative AI usado neste script (regiao us-chicago-1). Se voce for
-- usar outra regiao de Generative AI, ajuste o host abaixo (e repita
-- este bloco para cada host adicional que for necessario).
-- Generative AI usado neste script (regiao us-chicago-1 por padrao - o
-- mesmo valor que vai para o parametro GENAI_REGION da SECAO 2, que
-- ainda nao existe neste ponto do script, por isso o host aqui e
-- digitado direto). Nem toda tenancy alcanca us-chicago-1 (ex.: algumas
-- tenancies com escopo regional restrito, como America Latina, podem
-- so alcancar sa-saopaulo-1) - se for o seu caso, troque o host abaixo
-- pela regiao que a sua tenancy alcanca, E use o mesmo valor no
-- parametro GENAI_REGION da SECAO 2 (repita este bloco para cada host
-- adicional que for necessario).
BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
host => 'inference.generativeai.us-chicago-1.oci.oraclecloud.com',
@@ -201,6 +207,10 @@ INSERT INTO TB_26AI_TECH_PARAMS (PARAM_NAME, PARAM_VALUE, DESCRIPTION) VALUES
('AI_LOG_RETENTION_DAYS', '90',
'Dias de retencao do log de chamadas de IA/embeddings (TB_26AI_TECH_LOG) - ver docs/09-operacao-observabilidade.html para a query de purga.');
INSERT INTO TB_26AI_TECH_PARAMS (PARAM_NAME, PARAM_VALUE, DESCRIPTION) VALUES
('GENAI_REGION', 'us-chicago-1',
'Regiao do OCI Generative AI usada pelo RAG/insights/embeddings (SECAO 5+). Pode ser diferente da OCI_REGION (que e a regiao "de casa" do seu tenancy/bucket) - o Generative AI so roda em regioes especificas. Se a sua tenancy nao alcancar us-chicago-1 (comum em tenancies com escopo regional restrito, ex. America Latina), troque para uma regiao que a sua tenancy alcance (ex. sa-saopaulo-1) E repita a ACL da SECAO 1.6 para o novo host - confirme antes com "oci generative-ai model-collection list-models" ou o Console OCI que o modelo usado (meta.llama-4-maverick-17b-128e-instruct-fp8) ainda esta ativo para uso on-demand na regiao escolhida, ja que a disponibilidade de modelos varia por regiao e muda com o tempo.');
COMMIT;
-- Confira: nenhuma linha abaixo deve ainda mostrar um valor "<SUBSTITUA...>"
@@ -340,14 +350,15 @@ WHERE model_name = 'CLIP_VIT_LARGE_PATCH14_TXT';
-- Rode os 3 blocos abaixo para confirmar que a credencial e a rede estao OK
-- antes de seguir para as tabelas e o PL/SQL da aplicacao.
-- 5.1) Teste de embedding (Cohere, via OCI Generative AI)
-- 5.1) Teste de embedding (Cohere, via OCI Generative AI). A URL usa a
-- regiao configurada em GENAI_REGION (SECAO 2), nao um valor fixo.
SELECT VECTOR_SERIALIZE(
DBMS_VECTOR_CHAIN.UTL_TO_EMBEDDING(
TO_CLOB('Teste simples para gerar um embedding.'),
JSON('{
"provider": "ocigenai",
"credential_name": "OCI_CRED",
"url": "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/embedText",
"url": "https://inference.generativeai.' || (SELECT param_value FROM TB_26AI_TECH_PARAMS WHERE param_name = 'GENAI_REGION') || '.oci.oraclecloud.com/20231130/actions/embedText",
"model": "cohere.embed-v4.0"
}')
)
@@ -355,13 +366,14 @@ SELECT VECTOR_SERIALIZE(
) AS embedding
FROM dual;
-- 5.2) Teste de geracao de texto (Llama 4, via OCI Generative AI)
-- 5.2) Teste de geracao de texto (Llama 4, via OCI Generative AI). Mesma
-- logica: a URL usa a regiao configurada em GENAI_REGION (SECAO 2).
SELECT DBMS_VECTOR_CHAIN.UTL_TO_GENERATE_TEXT(
TO_CLOB('Responda somente com a palavra: sucesso'),
JSON('{
"provider": "ocigenai",
"credential_name": "OCI_CRED",
"url": "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/chat",
"url": "https://inference.generativeai.' || (SELECT param_value FROM TB_26AI_TECH_PARAMS WHERE param_name = 'GENAI_REGION') || '.oci.oraclecloud.com/20231130/actions/chat",
"model": "meta.llama-4-maverick-17b-128e-instruct-fp8",
"chatRequest": {
"temperature": 0.1,
@@ -373,27 +385,28 @@ SELECT DBMS_VECTOR_CHAIN.UTL_TO_GENERATE_TEXT(
FROM dual;
-- 5.3) Teste de SELECT AI (perguntas em linguagem natural sobre as views/
-- tabelas do schema). O bloco abaixo le EMBEDDING_COMPARTMENT da tabela
-- de configuracao (SECAO 2). As tabelas/view referenciadas abaixo sao
-- criadas na SECAO 6 - rode este bloco depois de criar V_26AI_TECH e
-- TB_26AI_TECH_CMDB.
-- tabelas do schema). O bloco abaixo le EMBEDDING_COMPARTMENT e
-- GENAI_REGION da tabela de configuracao (SECAO 2). As tabelas/view
-- referenciadas abaixo sao criadas na SECAO 6 - rode este bloco depois
-- de criar V_26AI_TECH e TB_26AI_TECH_CMDB.
--
-- A regiao do OCI Generative AI abaixo (us-chicago-1) e fixa de
-- proposito, igual nos testes 5.1/5.2 e na ACL da SECAO 1.6 - nao
-- precisa (nem deve) ser trocada pelo valor de OCI_REGION da tabela de
-- configuracao, ja que o servico so esta disponivel em algumas regioes
-- especificas da OCI.
-- A regiao do OCI Generative AI abaixo vem do parametro GENAI_REGION -
-- nao precisa (nem deve) ser trocada pelo valor de OCI_REGION da tabela
-- de configuracao (sao coisas diferentes de proposito), ja que o
-- servico so esta disponivel em algumas regioes especificas da OCI.
DECLARE
v_compartment TB_26AI_TECH_PARAMS.PARAM_VALUE%TYPE;
v_compartment TB_26AI_TECH_PARAMS.PARAM_VALUE%TYPE;
v_genai_region TB_26AI_TECH_PARAMS.PARAM_VALUE%TYPE;
BEGIN
SELECT param_value INTO v_compartment FROM TB_26AI_TECH_PARAMS WHERE param_name = 'EMBEDDING_COMPARTMENT';
SELECT param_value INTO v_compartment FROM TB_26AI_TECH_PARAMS WHERE param_name = 'EMBEDDING_COMPARTMENT';
SELECT param_value INTO v_genai_region FROM TB_26AI_TECH_PARAMS WHERE param_name = 'GENAI_REGION';
DBMS_CLOUD_AI.CREATE_PROFILE(
profile_name => 'OCI_CRED2',
attributes => '{
"provider": "oci",
"credential_name": "OCI_CRED",
"region": "us-chicago-1",
"region": "' || v_genai_region || '",
"model": "meta.llama-4-maverick-17b-128e-instruct-fp8",
"temperature": 0,
"comments": true,
@@ -752,7 +765,7 @@ BEGIN
dbms_vector_chain.utl_to_text( v_string ),
json('{ "provider": "ocigenai",
"credential_name": "' || p_credential || '",
"url": "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/embedText",
"url": "https://inference.generativeai.' || (SELECT param_value FROM TB_26AI_TECH_PARAMS WHERE param_name = 'GENAI_REGION') || '.oci.oraclecloud.com/20231130/actions/embedText",
"model": "cohere.embed-v4.0"
}')
)
@@ -842,9 +855,12 @@ RETURN CLOB IS
output CLOB;
query_vec VECTOR;
v_llm VARCHAR2(20) := 'LLAMA4'; -- [ LLAMA4 | OPENAI ]
v_genai_region TB_26AI_TECH_PARAMS.PARAM_VALUE%TYPE;
BEGIN
SELECT param_value INTO v_genai_region FROM TB_26AI_TECH_PARAMS WHERE param_name = 'GENAI_REGION';
-- embedding da pergunta do usuario
query_vec := to_vector( fnc_26ai_embed ( p_string => p_query, p_emb_type => 'COHERE' ) ) ;
@@ -870,7 +886,7 @@ BEGIN
params_genai := '{
"provider" : "ocigenai",
"credential_name" : "' || p_credential || '",
"url" : "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/chat",
"url" : "https://inference.generativeai.' || v_genai_region || '.oci.oraclecloud.com/20231130/actions/chat",
"model": "meta.llama-4-maverick-17b-128e-instruct-fp8"}';
ELSIF v_llm = 'OPENAI' THEN
@@ -984,12 +1000,16 @@ RETURN CLOB AS
Objetivo: funcao global de chamada ao LLM (Llama 4, via OCI Generative AI)
usada pelo RAG e pela geracao de insights.
*/
v_gen_ai_endpoint VARCHAR2(500) := 'https://inference.generativeai.us-chicago-1.oci.oraclecloud.com';
v_gen_ai_endpoint VARCHAR2(500);
v_gen_ai_model VARCHAR2(500) := 'meta.llama-4-maverick-17b-128e-instruct-fp8';
resp DBMS_CLOUD_TYPES.RESP;
v_t0 PLS_INTEGER := DBMS_UTILITY.GET_TIME;
v_result CLOB;
BEGIN
SELECT 'https://inference.generativeai.' || param_value || '.oci.oraclecloud.com'
INTO v_gen_ai_endpoint
FROM TB_26AI_TECH_PARAMS WHERE param_name = 'GENAI_REGION';
resp := dbms_cloud.send_request(
credential_name => p_oci_cred,
uri => v_gen_ai_endpoint || '/20231130/actions/chat',
@@ -1090,8 +1110,11 @@ AS
v_response CLOB;
v_json CLOB;
v_error CLOB;
v_genai_region TB_26AI_TECH_PARAMS.PARAM_VALUE%TYPE;
BEGIN
SELECT param_value INTO v_genai_region FROM TB_26AI_TECH_PARAMS WHERE param_name = 'GENAI_REGION';
IF p_source_type = 'VUL' THEN -- vulnerabilidades
v_pre_prompt :='Voce e um analista senior de dados e operacoes.
@@ -1488,7 +1511,7 @@ Retorne um JSON valido (sem comentarios), espelhando o relatorio:
( v_response ) ,
json('{ "provider": "ocigenai",
"credential_name": "' || p_oci_cred || '",
"url": "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/embedText",
"url": "https://inference.generativeai.' || v_genai_region || '.oci.oraclecloud.com/20231130/actions/embedText",
"model": "cohere.embed-v4.0"
}')
)