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