API REST en Laravel para exponer datos de un currículum (JSON Resume) y un servicio de chat que responde exclusivamente sobre el CV.
La aplicación incluye:
- Endpoints REST para entidades del CV (
Basic,Work,Education,Skills,Projects, etc.). - Endpoints MCP de solo lectura para consultar información del CV.
- Endpoint de chat (
POST /api/chat) que usa unAgentpara responder preguntas sobre el currículum. - Registro de solicitudes a la IA en
ai_requests.
Este proyecto se ejecuta en contenedores Docker y está preparado para desarrollo en Dev Container (VS Code).
composer install
cp .env.example .env
php artisan key:generate
php artisan migrateLa especificación/documentación de endpoints está en:
.scribe/endpoints/00.yamlREADME_API_REQUESTS.md— documentación de los campos de las peticiones (validaciones y ejemplos)
Rutas principales:
- MCP (GET):
/mcp/basic,/mcp/work,/mcp/education, ... - Chat (POST):
/api/chat
- Endpoint:
POST /api/chat - Payload de ejemplo:
{ "message": "¿Qué experiencia tiene Test User?" }- Respuesta de ejemplo:
{ "reply": "...", "sources": [], "session_id": null }- Resumen: La aplicación integra capacidades de IA para enriquecer, analizar y transformar currículums JSON (JSON Resume). Soporta generación y edición de texto (resúmenes, cartas), extracción estructurada, embeddings para búsqueda semántica y conversaciones asistidas mediante agentes.
- Capacidades principales: agentes de texto (clases en
app/Ai/Agents),Embeddingsy búsqueda semántica (tablaresume_embeddings), salida estructurada conHasStructuredOutput, transcripción/audio y generación de recursos enriquecidos. - Endpoints y flujo:
POST /api/chates el punto de entrada conversacional; los agentes pueden orquestar embeddings, herramientas proveedor (web search,web fetch,file search) y devolver respuestas con fuentes y metadata. - Configuración (.env): variables relevantes:
AI_DEFAULT_PROVIDER/AI_PROVIDER,OLLAMA_URL,OLLAMA_DEPLOYMENT,OLLAMA_EMBEDDING_DEPLOYMENT,OLLAMA_TIMEOUT, así comoOPENAI_API_KEY/OPENAI_MODELsi se usan proveedores externos. - Rendimiento y costes: cache de embeddings, control de tokens/temperatura, atributos PHP para seleccionar modelos (
#[Temperature],#[Provider]), colas y streaming para operaciones largas y procesamiento asíncrono. - Testing y seguridad: soporta fakes para tests (
Agents::fake(),Embeddings::fake()), validación de salidas con esquemas JSON, registro/auditoría de solicitudes IA enai_requestsy control de acceso a herramientas externas. - Casos de uso: generar un resumen optimizado para una oferta, extraer y normalizar competencias del CV, mapear candidatos a ofertas por similaridad semántica, o mantener conversaciones guiadas para mejorar contenido.
Los endpoints MCP exponen datos del CV en modo lectura.
app/Mcp/Servers/*— MCP servers.app/Mcp/Servers/Traits/ReadServerTrait.php— lógica de lectura y filtros.app/Ai/Agents/ResumeAgent.php— agente restringido a consultas del CV.app/Services/Chat/ChatService.php— orquestación de chat y registro de solicitudes.
php artisan test --compact
php artisan test --filter ChatTest --compact- The app persists resume fragments into
resume_embeddingsand stores vectors (JSON) plus metadata. - Embeddings are generated synchronously on model
savedviaResumeModelObserverand on import. - Vectors are L2-normalized at write-time; similarity ranking uses dot-product on normalized vectors.
To run only embedding-related tests:
php artisan test --filter EmbeddingServiceTest --compact
php artisan test --filter ResumeQATest --compact