skailan-ai
Version:
Servicio de IA y procesamiento de lenguaje natural para Skailan
170 lines (142 loc) • 5.36 kB
JavaScript
import { AIService } from './AIService';
export class ContentGenerationService {
aiService;
constructor(llmConfig) {
this.aiService = new AIService(llmConfig);
}
async generateEmail(data, options) {
const prompt = `
Genera un email profesional basado en la siguiente información:
Asunto: ${data.subject}
Destinatario: ${data.recipient}
Propósito: ${data.purpose}
Contexto: ${data.context || 'N/A'}
Tono: ${options?.tone || data.tone || 'professional'}
Instrucciones adicionales:
- Longitud: ${options?.length || 'medium'}
- Idioma: ${options?.language || 'es'}
- Incluir llamada a la acción: ${options?.includeCallToAction ? 'Sí' : 'No'}
${options?.customInstructions ? `- Instrucciones personalizadas: ${options.customInstructions}` : ''}
Genera un email completo con:
1. Saludo apropiado
2. Cuerpo del mensaje
3. Cierre profesional
4. Firma si es necesario
Responde solo con el contenido del email, sin formato adicional.
`;
return await this.aiService.generateText(prompt);
}
async generateQuote(data, options) {
const servicesList = data.services.join(', ');
const currency = data.currency || 'USD';
const validUntil = data.validUntil || '30 días';
const prompt = `
Genera una cotización profesional con la siguiente información:
Cliente: ${data.clientName}
Servicios: ${servicesList}
Monto total: ${data.totalAmount} ${currency}
Válida hasta: ${validUntil}
Notas especiales: ${data.specialNotes || 'N/A'}
Tono: ${options?.tone || 'professional'}
Longitud: ${options?.length || 'medium'}
Genera una cotización que incluya:
1. Encabezado profesional
2. Detalle de servicios
3. Desglose de costos
4. Términos y condiciones básicos
5. Información de contacto
Responde solo con el contenido de la cotización, sin formato adicional.
`;
return await this.aiService.generateText(prompt);
}
async generateReport(data, options) {
const prompt = `
Genera un reporte basado en la siguiente información:
Título: ${data.title}
Tipo de reporte: ${data.type}
Audiencia: ${data.audience || 'general'}
Datos: ${JSON.stringify(data.data, null, 2)}
Tono: ${options?.tone || 'professional'}
Longitud: ${options?.length || 'medium'}
Genera un reporte que incluya:
1. Resumen ejecutivo
2. Análisis de datos
3. Conclusiones
4. Recomendaciones (si aplica)
Responde solo con el contenido del reporte, sin formato adicional.
`;
return await this.aiService.generateText(prompt);
}
async generateConversationSummary(messages, options) {
const conversationText = messages
.map(msg => `${msg.role}: ${msg.content}`)
.join('\n');
const prompt = `
Genera un resumen de la siguiente conversación:
Conversación:
${conversationText}
Tipo de resumen: ${options?.length || 'medium'}
Tono: ${options?.tone || 'professional'}
Genera un resumen que incluya:
1. Puntos principales discutidos
2. Decisiones tomadas (si las hay)
3. Acciones pendientes (si las hay)
4. Estado general de la conversación
Responde solo con el resumen, sin formato adicional.
`;
return await this.aiService.generateText(prompt);
}
async generateBotResponse(userMessage, context, intent, options) {
const prompt = `
Genera una respuesta de bot para un chatbot basada en la siguiente información:
Mensaje del usuario: "${userMessage}"
Contexto de la conversación: "${context}"
Intención detectada: "${intent}"
Tono: ${options?.tone || 'friendly'}
Longitud: ${options?.length || 'short'}
Genera una respuesta que:
1. Sea apropiada para la intención detectada
2. Mantenga el contexto de la conversación
3. Sea natural y conversacional
4. Proporcione valor al usuario
Responde solo con la respuesta del bot, sin formato adicional.
`;
return await this.aiService.generateText(prompt);
}
async generateMarketingContent(product, targetAudience, purpose, options) {
const prompt = `
Genera contenido de marketing para el siguiente producto:
Producto: ${product}
Audiencia objetivo: ${targetAudience}
Propósito: ${purpose}
Tono: ${options?.tone || 'casual'}
Longitud: ${options?.length || 'medium'}
Incluir llamada a la acción: ${options?.includeCallToAction ? 'Sí' : 'No'}
Genera contenido que:
1. Capture la atención del público objetivo
2. Destaque los beneficios del producto
3. Sea persuasivo pero no agresivo
4. Incluya una llamada a la acción clara (si se solicita)
Responde solo con el contenido, sin formato adicional.
`;
return await this.aiService.generateText(prompt);
}
async generateDocumentation(topic, audience, purpose, options) {
const prompt = `
Genera documentación para el siguiente tema:
Tema: ${topic}
Audiencia: ${audience}
Propósito: ${purpose}
Tono: ${options?.tone || 'professional'}
Longitud: ${options?.length || 'medium'}
Genera documentación que:
1. Sea apropiada para la audiencia especificada
2. Sea clara y fácil de entender
3. Incluya ejemplos si es necesario
4. Esté bien estructurada
Responde solo con la documentación, sin formato adicional.
`;
return await this.aiService.generateText(prompt);
}
}
//# sourceMappingURL=ContentGenerationService.js.map