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