PHP AI 編排實用範例
ejemplo práctico de orquestación en IA con php
這個 PHP 範例以 AIOrchestrator 展示基本的 AI 編排流程,依次分類用戶查詢、擷取相關資訊、生成回覆並進行驗證。範例以規則判斷意圖、從靜態陣列擷取內容,再用範本組成回覆;實際應用可改由語言模型處理分類和生成。
ejemplo práctico de orquestación en IA con php
Objetivo del ejemplo El siguiente código muestra un flujo de orquestación básico en PHP. Recibe una consulta de un usuario, la clasifica, recupera información relevante, genera una respuesta y realiza una validación final antes de devolver el resultado. Cada paso se ejecuta de forma secuencial y controlada. Estructura del flujo Clasificación de la intención: determina el tipo de consulta. Recuperación de contexto: obtiene datos relacionados según la intención. Generación de respuesta: elabora la respuesta utilizando el contexto. Validación: comprueba que la respuesta cumple unos criterios mínimos. Código completo class AIOrchestrator { private array $contextStore = [ 'factura' => 'Las facturas se emiten el día 5 de cada mes y están disponibles en el área de cliente.', 'soporte_tecnico' => 'Para problemas de acceso, reinicia la contraseña desde el enlace de recuperación.', 'pedido' => 'Los pedidos se procesan en 24-48 horas laborables. El seguimiento está disponible en la cuenta.', 'general' => 'Puedes contactar con soporte en horario de 9:00 a 18:00 de lunes a viernes.' ]; /** * Punto de entrada de la orquestación / public function process(string $userQuery): array { // Paso 1: Clasificar la intención $intent = $this->classifyIntent($userQuery); // Paso 2: Recuperar contexto según la intención $context = $this->retrieveContext($intent); // Paso 3: Generar respuesta $response = $this->generateResponse($userQuery, $context, $intent); // Paso 4: Validar la respuesta $validated = $this->validateResponse($response); return [ 'intent' => $intent, 'context_used' => $context, 'response' => $validated['response'], 'is_valid' => $validated['is_valid'], 'status' => $validated['is_valid'] ? 'success' : 'needs_review' ]; } /* * Paso 1: Clasificación simple de la intención / private function classifyIntent(string $query): string { $query = strtolower($query); if (str_contains($query, 'factura') || str_contains($query, 'pago')) { return 'factura'; } if (str_contains($query, 'acceso') || str_contains($query, 'contraseña') || str_contains($query, 'login')) { return 'soporte_tecnico'; } if (str_contains($query, 'pedido') || str_contains($query, 'envio') || str_contains($query, 'seguimiento')) { return 'pedido'; } return 'general'; } /* * Paso 2: Recuperación de contexto / private function retrieveContext(string $intent): string { return $this->contextStore[$intent] ?? $this->contextStore['general']; } /* * Paso 3: Generación de respuesta * (En un caso real aquí se llamaría a un modelo de lenguaje) / private function generateResponse(string $query, string $context, string $intent): string { $templates = [ 'factura' => "Sobre tu consulta de facturación: {$context}", 'soporte_tecnico' => "Respecto al problema de acceso: {$context}", 'pedido' => "Sobre el estado de tu pedido: {$context}", 'general' => "Gracias por contactar. {$context}" ]; return $templates[$intent] ?? $templates['general']; } /* * Paso 4: Validación básica de la respuesta */ private function validateResponse(string $response): array { $isValid = strlen($response) > 20 && !str_contains(strtolower($response), 'error'); return [ 'response' => $response, 'is_valid' => $isValid ]; } } // Ejemplo de uso $orchestrator = new AIOrchestrator(); $queries = [ "No puedo ver mi factura del mes pasado", "He olvidado la contraseña de acceso", "¿Dónde está mi pedido número 45892?" ]; foreach ($queries as $query) { echo "Consulta: {$query}" . PHP_EOL; $result = $orchestrator->process($query); echo "Intención detectada: {$result['intent']}" . PHP_EOL; echo "Respuesta: {$result['response']}" . PHP_EOL; echo "Estado: {$result['status']}" . PHP_EOL; echo str_repeat('-', 50) . PHP_EOL; } Explicación del código La clase AIOrchestrator actúa como coordinador central. El método público process() define el orden de ejecución de los pasos y garantiza que cada etapa reciba la información generada por la anterior. Paso 1 – Clasificación de la intención El método classifyIntent() analiza el texto de la consulta mediante reglas sencillas. En un entorno real este paso suele delegarse a un modelo de lenguaje o a un clasificador entrenado. Paso 2 – Recuperación de contexto Según la intención detectada se recupera información relevante desde un almacén de contexto (en este ejemplo un array estático). En producción este paso consultaría una base de datos, un sistema de recuperación aumentada (RAG) o una API interna. Paso 3 – Generación de respuesta Con la consulta original y el contexto recuperado se construye la respuesta. Aquí se utilizan plantillas para mantener el ejemplo autocontenido. En un caso real se realizaría una llamada a un modelo de lenguaje (OpenAI, Claude, modelo local, etc.). Paso 4 – Validación Antes de devolver el resultado se aplica una validación mínima. Si la respuesta no cumple los criterios, el flujo puede marcarse para revisión humana o activar un camino alternativo. Resultado de ejemplo Al ejecutar el script con las consultas de prueba se obtiene una salida similar a la siguiente: Consulta: No puedo ver mi factura del mes pasado Intención detectada: factura Respuesta: Sobre tu consulta de facturación: Las facturas se emiten el día 5 de cada mes y están disponibles en el área de cliente. Estado: success -------------------------------------------------- Consulta: He olvidado la contraseña de acceso Intención detectada: soporte_tecnico Respuesta: Respecto al problema de acceso: Para problemas de acceso, reinicia la contraseña desde el enlace de recuperación. Estado: success -------------------------------------------------- Consulta: ¿Dónde está mi pedido número 45892? Intención detectada: pedido Respuesta: Sobre el estado de tu pedido: Los pedidos se procesan en 24-48 horas laborables. El seguimiento está disponible en la cuenta. Estado: success -------------------------------------------------- Posibles mejoras Sustituir la clasificación por reglas por una llamada a un modelo de lenguaje. Integrar un sistema de recuperación de información (RAG) en el paso de contexto. Añadir gestión de errores y reintentos en cada etapa. Persistir el estado del flujo para permitir pausas y reanudaciones. Registrar cada paso para facilitar la observabilidad y la depuración.
來源:DEV Community · dev.to