Sistema de Agentes
El sistema de Agentes de Doggy proporciona múltiples agentes inteligentes, accesibles de forma unificada a través de la Facade AgentManager, y admite agentes en tiempo de ejecución basados en symfony/ai-agent.
Descripción general
El sistema de Agentes se encuentra en src/Service/AI/Agent/, coordinado de forma unificada a través de AgentManager:
// src/Service/AI/AgentManager.php
class AgentManager
{
public function getQueryAgent(): NaturalLanguageQueryAgent
public function getVisionAgent(): VisionAgent
public function getCodingAgent(): CodingAgent
public function getPasswordPolicyAgent(): PasswordPolicyAgent
}Además, el sistema de Agentes en tiempo de ejecución basado en symfony/ai-agent (bucle ReAct + llamada a herramientas) se describe en Asistente IA; la orquestación de reconocimiento de intenciones + sub-agentes de escenario se describe en Mejora de vistas IA.
Asistente de codificación
CodingAgent genera código genérico:
use App\Service\AI\Agent\CodingAgent;
$code = $codingAgent->generateCode('Create a Symfony controller for employee CRUD');Consulta en lenguaje natural
NaturalLanguageQueryAgent convierte el lenguaje natural en condiciones de filtro de DataGrid, con integración profunda con DataGridService:
use App\Service\AI\Agent\NaturalLanguageQueryAgent;
$filters = $queryAgent->parseQuery(
text: 'Gerentes de departamento incorporados el mes pasado',
entityClass: Employee::class,
currentFilters: []
);
// Devuelve: { filters: [...], thought_process: "..." }Ejemplos admitidos en lenguaje natural:
- "Mostrar departamentos con estado habilitado"
- "Departamentos cuyo nombre contenga 'tecnología'"
- "Empleados incorporados en la última semana"
Cómo funciona
- Obtiene el esquema de campos de la entidad desde
DataGridService - Construye el prompt del sistema (nombres de campos, tipos, operadores)
- Llama al modelo de IA para generar las condiciones de filtro JSON
- Corrige automáticamente los campos de relación (p. ej.
department→department.name) - Admite combinaciones lógicas AND/OR
- Gestiona las etiquetas
</think>de DeepSeek/modelos de razonamiento
Agente de política de contraseñas
PasswordPolicyAgent convierte las políticas de seguridad en lenguaje natural en expresiones DSL:
$policy = $passwordPolicyAgent->parsePolicyInstruction(
'La contraseña debe tener al menos 8 caracteres e incluir números y letras mayúsculas'
);
// Devuelve: { and: [{field: "length", operator: ">=", value: 8}, {field: "has_number", ...}, {field: "has_uppercase", ...}] }Reconocimiento visual
VisionAgent analiza imágenes (interfaz reservada, soporte multimodal pendiente de implementación):
$result = $visionAgent->analyzeImage($imageUrl, 'Reconoce la información de esta factura');Extensión
Para añadir un Agente personalizado:
- Crea una clase de Agente e inyecta
AiManager - Regístrala en
AgentManager