Integración IA
Doggy integra de forma profunda las capacidades de IA mediante Symfony AI Bundle, con soporte para múltiples proveedores de modelos y una interfaz de llamada unificada.
Descripción general
El núcleo del sistema de IA se encuentra en src/Service/AI/:
src/Service/AI/
├── AiManager.php # Gestor de IA (interfaz de llamada unificada)
├── AgentManager.php # Gestor de Agentes (Facade)
├── Agent/
│ ├── CodingAgent.php # Asistente de codificación
│ ├── NaturalLanguageQueryAgent.php # Consulta en lenguaje natural
│ ├── VisionAgent.php # Reconocimiento visual
│ └── PasswordPolicyAgent.php # Agente de política de contraseñas
├── Runtime/ # Runtime de IA (motor de Agentes)
│ ├── AiAssistant.php # Fábrica de Agentes genérica (ReAct)
│ ├── AiContextRegistry.php # Registro de contextos
│ ├── LlmRouterPlatform.php # Puente de PlatformInterface
│ └── ChatResultConverter.php # Conversión del formato de respuesta
├── Context/ # Proveedores de contexto de página
│ └── ViewEditorAiContext.php # Contexto del editor de vistas
├── Orchestrator/ # Orquestación de IA (reconocimiento de intenciones + sub-agentes)
│ ├── IntentAgent.php # Agente principal de reconocimiento de intenciones
│ └── SubAgent/ # 6 sub-agentes de escenario
├── Tool/ # Llamada a herramientas
│ ├── ViewEditorToolProvider.php # Herramientas del editor de vistas
│ ├── ViewFileToolProvider.php # Herramientas de archivos de vista
│ └── ChromeDevToolsToolProvider.php # Herramientas de navegador CDP
└── Provider/
└── AbstractOpenAiProvider.php # Abstracción de la API OpenAIProveedores de modelos
AiManager admite varios proveedores, conmutables mediante la variable de entorno AI_PROVIDER:
| Proveedor | Servicio de plataforma | Configuración |
|---|---|---|
| Alibaba Bailian | ai.platform.generic.aliyun | ALIYUN_MODEL_ID |
| LM Studio | ai.platform.generic.lmstudio | LM_STUDIO_MODEL_ID |
yaml
# config/packages/ai.yaml
ai:
providers:
alibaba:
type: alibaba_bailian
api_key: '%env(ALIBABA_AI_KEY)%'Configuración
bash
# .env
AI_PROVIDER=aliyun
ALIYUN_MODEL_ID=qwq-32b
ALIYUN_FAST_MODEL_ID=qwen-plus
LM_STUDIO_MODEL_ID=deepseek/deepseek-r1-0528-qwen3-8bLlamar a la IA
php
use App\Service\AI\AiManager;
class SomeService
{
public function __construct(private AiManager $aiManager) {}
public function ask(): string
{
return $this->aiManager->chat([
['role' => 'system', 'content' => 'You are a helpful assistant.'],
['role' => 'user', 'content' => 'Hello!'],
], [
'temperature' => 0.7,
'model' => 'qwen-plus', // Opcional: sobrescribe el modelo por defecto
]);
}
}AiManager gestiona automáticamente:
- La selección del proveedor (según
AI_PROVIDER) - Las respuestas en streaming (modo stream, compatible con modelos de razonamiento como qwq-32b)
- La combinación de la configuración de modelos
Sistema de configuración de LLM
Además de la llamada directa a través de AiManager, el framework ofrece el sistema de configuración de LLM con interfaz gráfica, que admite:
- Múltiples proveedores: OpenAI, Azure, Anthropic, Ollama, puerta de enlace personalizada
- Enrutamiento por rol: LlmRole vincula modelos y conmuta dinámicamente según el uso
- Cifrado de claves: almacenamiento cifrado de las API Key
- Conmutación por error: degradación automática cuando el proveedor principal falla
Runtime de IA
Runtime de Agentes construido sobre symfony/ai-agent (ver Asistente IA):
- Bucle ReAct: razonamiento + llamada a herramientas hasta devolver un resultado
- Registro de contexto: las páginas registran su contexto mediante
window.__AI_CONTEXT__ - Llamada a herramientas: anotación
#[AsTool]para declarar métodos de herramienta
Cambio rápido de modelo
NaturalLanguageQueryAgent admite la configuración de un modelo rápido para las consultas NL (para evitar respuestas lentas con modelos de razonamiento):
php
if ($this->provider === 'aliyun' && $this->aliyunFastModelId) {
$options['model'] = $this->aliyunFastModelId;
}