Skip to content

Configuração LLM

O Doggy fornece um sistema gráfico de gestão de configuração LLM, com suporte para configuração flexível de múltiplos fornecedores, modelos e papéis, e alternância dinâmica em runtime, fornecendo suporte de modelos unificado para as funcionalidades de IA.

Visão geral

O sistema de configuração LLM localiza-se em src/Service/Platform/Llm/ e inspira-se no design Platform do Symfony AI Bundle:

  • Suporte de múltiplos fornecedores: OpenAI, Azure, Anthropic, Ollama, gateways personalizados compatíveis com OpenAI
  • Gestão gráfica: sem configuração YAML, gestão dinâmica através do backoffice
  • Separação de papéis: a configuração é desacoplada da utilização; os papéis ligam modelos
  • Criptografia de chaves: a API Key é armazenada encriptada, sem contacto com o frontend

Modelo de dados

LlmProvider (configuração de fornecedor)

CampoTipoDescrição
namestringNome de exibição, ex.: "GPT-4o"
providerstringIdentificador do fornecedor: openai / anthropic / azure / ollama / custom
modelstringNome do modelo: gpt-4o / claude-3-5-sonnet / ...
apiKeyencryptedAPI Key (armazenada encriptada)
apiEndpointstringEndpoint da API (opcional)
optionsJSONParâmetros adicionais: temperature, max_tokens, top_p, etc.
isEnabledbooleanSe está ativado
sortOrderintOrdenação

LlmRole (papel/utilização)

CampoTipoDescrição
codestringCódigo do papel: view_editor / entity_generation / workflow_analysis / query_assistant / chat / coding
labelstringNome de exibição
providerIdUUIDConfiguração de modelo ligada
systemPrompttextPrompt de sistema desse papel
optionsJSONSubstituição de parâmetros ao nível do papel
isEnabledbooleanSe está ativado

Planeamento das utilizações dos papéis

Código do papelUtilizaçãoModelo recomendado
view_editorAssistente IA do designer de vistasgpt-4o / claude-3.5-sonnet
entity_generationGeração de entidades assistida por IAgpt-4o-mini
workflow_analysisAnálise e sugestões de fluxos de trabalhogpt-4o
query_assistantLinguagem natural → consulta de dadosgpt-4o-mini
chatAssistente de conversação IA genéricogpt-4o-mini
codingGeração de código (Twig/JS/PHP)gpt-4o / claude-3.5-sonnet

Cadeia de invocação

LlmRouter::chatByRole(roleCode, messages, opts)
  ├─ Consulta LlmRole(code) → obtém o LlmProvider ligado
  ├─ LlmGatewayFactory::create(provider) → instancia o adaptador
  ├─ Descifra a API Key (LlmEncryptor)
  └─ Invoca a API LLM (suporta chamadas de ferramentas, resposta em streaming)

LlmGatewayFactory

Roteia automaticamente o adaptador com base no campo LlmProvider.provider:

providerAdaptadorDescrição
openaiOpenAiGatewayInterface compatível com OpenAI
anthropicAnthropicGatewayAPI Anthropic Claude
azureAzureGatewayAzure OpenAI
ollamaOllamaGatewayOllama local
customCustomGatewayGateway personalizado compatível com OpenAI

Failover

LlmRouter suporta chatByRoleWithFallback: quando o fornecedor principal falha, degrada automaticamente para o modelo de reserva.

Interface de administração

Entrada: Definições do sistema → Configuração LLM (/admin/platform/llm-config)

Página de listagem

  • Exibição dos fornecedores em cartões; um fornecedor pode corresponder a várias variantes de modelo
  • Mostra diretamente os papéis/utilizações ligados ao modelo
  • Alternância ativar/desativar com interruptor
  • Ordenação por arrastar-e-soltar

Formulário de edição

  • Nome, fornecedor, modelo, API Key (armazenamento encriptado), endpoint
  • Gestão de papéis (LlmRoleType): código do papel, prompt de sistema, ligação de modelo

Criptografia de chaves

LlmEncryptor encripta e descifra a API Key com a chave de encriptação da plataforma. A chave reside apenas no servidor e o frontend nunca contacta a chave original:

php
// No armazenamento
$encrypted = $llmEncryptor->encrypt($apiKey);

// Na invocação
$apiKey = $llmEncryptor->decrypt($provider->getApiKey());

Integração com o assistente IA

O assistente IA (ver Assistente IA) reutiliza o sistema LlmRole/LlmProvider:

Frontend → POST /api/admin/ai/chat
  → LlmRouter.chatByRole(roleCode, messages)
    → Consulta LlmRole → LlmGatewayFactory → API LLM
  • A API Key existe apenas no servidor (armazenamento encriptado na base de dados)
  • A alternância de modelos é feita no backoffice, sem alterar código
  • O roteamento por múltiplos fornecedores é feito automaticamente pelo LlmGatewayFactory

Ficheiros relacionados

FicheiroResponsabilidade
src/Service/Platform/Llm/LlmGatewayInterface.phpInterface de gateway
src/Service/Platform/Llm/LlmGatewayFactory.phpFábrica de adaptadores
src/Service/Platform/Llm/LlmRouter.phpRoteamento por papel + failover
src/Service/Platform/Llm/ModelRegistry.phpRegisto de modelos
src/Service/Platform/LlmEncryptor.phpEncriptação/descifração da API Key
src/Entity/Platform/LlmProvider.phpEntidade de configuração do fornecedor
src/Entity/Platform/LlmRole.phpEntidade de configuração do papel
src/Controller/Admin/Platform/LlmConfigController.phpControlador da interface de administração

Código aberto sob MIT | Copyright © 2026 Doggy