Files
compras/docs/ensaio-ia.md
T
nala c6373365bf
tests / ci (push) Canceled after 0s
commit9
2026-10-30 20:02:30 +02:00

47 lines
5.8 KiB
Markdown

# Ensaio de IA preparado para o SGC
Preparado e executado em 30/10/2026: uma geração real concluída, exclusivamente com os três factos fictícios autorizados. Os relatórios da aplicação continuam a usar as sínteses factuais por regras; o ensaio não está ligado a qualquer rota web, processo, fila ou tarefa automática.
**Estado actual:** ensaio concluído após o proprietário configurar a chave. Foram corrigidos a confiança TLS do processo PHP e o formato duplicado da definição no `.env`, sem expor a chave, alterar outras definições ou desactivar a validação HTTPS. Tentativas: falha TLS, rejeição 401 por valor malformado, uma resposta 200 concluída. Não houve repetição automática. Provas: `proofs/ai-rehearsal-live.json` e `proofs/ai-rehearsal-authorization.json`.
Resultado: três afirmações com as fontes `request`, `comparison` e `order`, sem omissões ou aprovações inventadas na conferência do conteúdo. Consumo reportado: 204 tokens de entrada + 81 de saída = 285. Custo textual teórico pelas tarifas documentadas: US$0,001380, antes de eventuais impostos; saldo, débito de créditos Pro ou cobrança efectiva não foram consultados. Isto valida apenas o cenário fictício, não a qualidade geral do modelo ou utilização em decisões reais. O ensaio autorizado está concluído: não executar de novo por arrasto.
## Resultado já disponível
Compras e Pessoas têm sínteses independentes, com fontes, identificação da base e redacção por permissões. O protótipo de IA serve para verificar se um fornecedor consegue resumir um cenário conhecido sem inventar aprovação ou usar referências inexistentes. O adaptador foi implementado segundo a [documentação oficial de Structured Outputs da OpenAI](https://developers.openai.com/api/docs/guides/structured-outputs).
## Chamada autorizada
- Destino: `https://api.openai.com/v1/responses`.
- Modelo inicial do ensaio: `gpt-5.6-terra`, que consta da [documentação oficial do modelo](https://developers.openai.com/api/docs/models/gpt-5.6-terra) com suporte de Responses e Structured Outputs. É uma escolha para o ensaio, não uma avaliação comparativa ou recomendação definitiva para o produto.
- Uma chamada manual, sem repetição automática ou redireccionamento HTTP.
- Entrada: instruções fixas, schema e os três factos fictícios abaixo. Corpo JSON limitado a 4 500 bytes.
- Saída: no máximo 1 000 tokens, até três afirmações curtas com referências; raciocínio configurado como `none`.
- Sem ferramentas, pesquisa web, anexos, conversas anteriores, dados reais, acesso à base ou mudanças de decisões.
- `store: false` na requisição. Este parâmetro não constitui uma garantia geral de ausência de retenção pelo fornecedor.
- Credencial dedicada configurada no servidor por `SGC_AI_REHEARSAL_API_KEY`; nunca inserir a chave na conversa, nos testes ou no repositório. Activação técnica por `SGC_AI_REHEARSAL_ENABLED=true`, apenas depois de autorização para a chamada paga.
Factos exactos enviados:
1. `request`: A requisição fictícia está em aprovação; não foi aprovada.
2. `comparison`: Existe uma proposta fictícia registada; a comparação ainda não está pronta.
3. `order`: Não consta ordem de compra no cenário fictício.
## Rever e executar
`php artisan sgc:ai-rehearsal` mostra a pré-visualização sem rede. Foi executado localmente; prova privada em `storage/logs/ai-rehearsal-preview.log`.
Depois da autorização e configuração da credencial no servidor, `php artisan sgc:ai-rehearsal --live` executa apenas o cenário incorporado. Não aceita IDs de processos, ficheiros ou texto livre. A utilização é facturada pelo fornecedor; não há compromisso de gratuidade. O limite de tokens é um limite técnico desta chamada, não um orçamento global de toda a aplicação.
O servidor valida formato e pertença das fontes após receber o JSON. Respostas recusadas, incompletas, malformadas ou com referências desconhecidas são rejeitadas. Uma referência conhecida não prova que a frase seja verdadeira: o resultado continua marcado `requires_human_review=true` e `factual_accuracy=not_automatically_verified`.
A revisão do resultado deve conferir cobertura dos três factos, inexistência de aprovações inventadas, exactidão e correspondência de cada afirmação à fonte. O ensaio pode falhar mesmo com JSON válido; nesse caso, não activar a função para documentos reais. O comando não imprime erros brutos do fornecedor nem a credencial.
## Validação e limites
`php artisan sgc:ai-assess tests/Fixtures/ai-synthetic-result.json` confere uma fixture manual, sem rede/chave e sem ser uma saída de modelo. O resultado real concluído está em `storage/app/private/ai-rehearsal-live-result.json`, em JSON UTF-8, e pode ser conferido pelo mesmo comando sem nova chamada. Apenas aceita resultados `synthetic_only: true` e fontes do cenário incorporado. Mede fontes por citar, cobertura e correspondências literais; uma frase com citação válida não é automaticamente verdadeira. A geração concluída incluiu estas métricas e teve o conteúdo conferido contra os três factos.
15 testes locais/41 asserções com HTTP simulado, sem chamadas reais, e análise PHPStan aprovados. Os testes verificam pré-visualização sem consultas de base/rede, desactivação/ausência de credencial, requisição limitada, referências, recusa/truncagem/JSON inválido, falhas 429/500 e não divulgação da chave em erros. Fonte de prova: `proofs/ai-rehearsal.json`.
A activação de IA sobre documentos reais ainda exige configuração pela organização, permissões, política de dados/destino, consumo, auditoria e avaliação de qualidade. Este protótipo não implementa esse editor nem autoriza essa activação. Machine learning preditivo permanece uma evolução separada, dependente de histórico e validação próprios.