Skip to content

Configuración de LLM ​

Doggy ofrece un sistema de gestión de configuración de LLM con interfaz gráfica que admite una configuración flexible de múltiples proveedores, múltiples modelos y múltiples roles, con conmutación dinámica en tiempo de ejecución, proporcionando un soporte de modelos unificado para las funciones de IA.

Descripción general ​

El sistema de configuración de LLM se encuentra en src/Service/Platform/Llm/ y se inspira en el concepto de Platform del Symfony AI Bundle:

  • Soporte de múltiples proveedores: OpenAI, Azure, Anthropic, Ollama, puerta de enlace personalizada compatible con OpenAI
  • Gestión gráfica: sin configuración YAML, gestión dinámica desde la interfaz del panel
  • Separación por rol: configuración y uso desacoplados, el rol vincula el modelo
  • Cifrado de claves: almacenamiento cifrado de las API Key, el frontend nunca las ve

Modelo de datos ​

LlmProvider (configuración de proveedores) ​

CampoTipoDescripción
namestringNombre mostrado, p. ej. "GPT-4o"
providerstringIdentificador del proveedor: openai / anthropic / azure / ollama / custom
modelstringNombre del modelo: gpt-4o / claude-3-5-sonnet / ...
apiKeyencryptedAPI Key (almacenada cifrada)
apiEndpointstringDirección de la interfaz (opcional)
optionsJSONParámetros adicionales: temperature, max_tokens, top_p, etc.
isEnabledbooleanSi está habilitado
sortOrderintOrden de clasificación

LlmRole (rol/uso) ​

CampoTipoDescripción
codestringCódigo de rol: view_editor / entity_generation / workflow_analysis / query_assistant / chat / coding
labelstringNombre mostrado
providerIdUUIDConfiguración de modelo vinculada
systemPrompttextPrompt del sistema de este rol
optionsJSONSobrescritura de parámetros a nivel de rol
isEnabledbooleanSi está habilitado

Planificación de usos de los roles ​

Rol codeUsoModelo recomendado
view_editorAsistente IA del diseñador de vistasgpt-4o / claude-3.5-sonnet
entity_generationGeneración de entidades asistida por IAgpt-4o-mini
workflow_analysisAnálisis y recomendaciones de flujos de trabajogpt-4o
query_assistantLenguaje natural → consulta de datosgpt-4o-mini
chatAsistente de diálogo IA genéricogpt-4o-mini
codingGeneración de código (Twig/JS/PHP)gpt-4o / claude-3.5-sonnet

Cadena de llamada ​

LlmRouter::chatByRole(roleCode, messages, opts)
  ├─ Consulta LlmRole(code) → obtiene el LlmProvider vinculado
  ├─ LlmGatewayFactory::create(provider) → instancia el adaptador
  ├─ Descifra la API Key (LlmEncryptor)
  └─ Llama a la API del LLM (soporte de llamada a herramientas, respuestas en streaming)

LlmGatewayFactory ​

Enruta automáticamente el adaptador según el campo LlmProvider.provider:

providerAdaptadorDescripción
openaiOpenAiGatewayInterfaz compatible con OpenAI
anthropicAnthropicGatewayAPI de Anthropic Claude
azureAzureGatewayAzure OpenAI
ollamaOllamaGatewayOllama local
customCustomGatewayPuerta de enlace personalizada compatible con OpenAI

Conmutación por error ​

LlmRouter admite chatByRoleWithFallback: cuando el proveedor principal falla, degrada automáticamente al modelo de respaldo.

Interfaz de administración ​

Entrada: Configuración del sistema → Configuración de LLM (/admin/platform/llm-config)

Página de lista ​

  • Muestra los proveedores en forma de tarjetas; un proveedor puede tener múltiples variantes de modelo
  • Muestra directamente los roles/usos vinculados a ese modelo
  • Interruptores para habilitar/deshabilitar
  • Ordenación por arrastrar y soltar

Formulario de edición ​

  • Nombre, proveedor, modelo, API Key (almacenada cifrada), dirección de la interfaz
  • Gestión de roles (LlmRoleType): código de rol, prompt del sistema, vinculación de modelo

Cifrado de claves ​

LlmEncryptor cifra y descifra las API Key con la clave de cifrado de la plataforma. Las claves se almacenan únicamente en el servidor y el frontend nunca accede a la clave original:

php
// Al almacenar
$encrypted = $llmEncryptor->encrypt($apiKey);

// Al llamar
$apiKey = $llmEncryptor->decrypt($provider->getApiKey());

Integración con el Asistente IA ​

El Asistente IA (ver Asistente IA) reutiliza el sistema LlmRole/LlmProvider:

Frontend → POST /api/admin/ai/chat
  → LlmRouter.chatByRole(roleCode, messages)
    → Consulta LlmRole → LlmGatewayFactory → API del LLM
  • Las API Key solo residen en el servidor (almacenamiento cifrado en la base de datos)
  • El cambio de modelo se realiza desde la interfaz de administración, sin necesidad de modificar código
  • Los múltiples proveedores se enrutan automáticamente mediante LlmGatewayFactory

Archivos relacionados ​

ArchivoResponsabilidad
src/Service/Platform/Llm/LlmGatewayInterface.phpInterfaz de puerta de enlace
src/Service/Platform/Llm/LlmGatewayFactory.phpFábrica de adaptadores
src/Service/Platform/Llm/LlmRouter.phpEnrutamiento por rol + conmutación por error
src/Service/Platform/Llm/ModelRegistry.phpRegistro de modelos
src/Service/Platform/LlmEncryptor.phpCifrado/descifrado de API Key
src/Entity/Platform/LlmProvider.phpEntidad de configuración de proveedores
src/Entity/Platform/LlmRole.phpEntidad de configuración de roles
src/Controller/Admin/Platform/LlmConfigController.phpControlador de la interfaz de administración

Código abierto bajo MIT | Copyright © 2026 Doggy