
Generacion de contenido en el dispositivo: borradores con IA que funcionan offline
Como construir funciones de redaccion con IA que funcionan sin internet. Respuestas de correo, sugerencias de mensajes, expansion de notas y plantillas de contenido generadas completamente en el dispositivo del usuario.
Sugerencias de respuesta a correos. Autocompletado de mensajes. Expansion de notas. Borradores de publicaciones sociales. Estas funciones comparten un patron: el usuario proporciona una entrada breve, y la IA genera una salida mas larga y pulida.
La generacion de contenido es la segunda funcion mas natural para IA en el dispositivo (despues de la clasificacion). Aprovecha la fortaleza de los modelos de lenguaje manteniendose dentro del presupuesto de rendimiento del hardware movil.
Que maneja bien la generacion en el dispositivo
Contenido de formato corto (menos de 200 palabras)
| Caso de uso | Entrada | Salida | Tamano de modelo |
|---|---|---|---|
| Respuestas de correo | Correo entrante + "Aceptar" | Respuesta de 2-3 oraciones | 3B |
| Sugerencias de mensajes | Contexto de conversacion | 3-5 opciones de respuesta (1 oracion cada una) | 1-3B |
| Expansion de notas | Puntos clave | Parrafos | 3B |
| Subtitulos sociales | Contexto de foto + palabras clave | Subtitulo de 1-2 oraciones | 1-3B |
| Respuestas a comentarios | Publicacion + sentimiento del usuario | Respuesta de 1-2 oraciones | 1-3B |
| Llenado de formularios | Etiquetas de campo + contexto | Valores sugeridos | 1B |
La generacion de formato corto es el punto optimo. El modelo produce 50-200 tokens (1-3 oraciones a un parrafo corto) en 2-5 segundos con un modelo 3B, 1-3 segundos con un modelo 1B.
Contenido de formato medio (200-500 palabras)
| Caso de uso | Entrada | Salida | Tamano de modelo |
|---|---|---|---|
| Borradores de correo | Asunto + puntos clave | Cuerpo completo del correo | 3B |
| Resumenes de reuniones | Extracto de transcripcion | Parrafo de resumen | 3B |
| Descripciones de producto | Nombre del producto + caracteristicas | Texto de marketing | 3B |
| Esquemas de blog | Tema + audiencia | Esquema estructurado | 3B |
El formato medio toma 5-15 segundos con un modelo 3B. Esto es aceptable cuando el usuario explicitamente solicita un borrador (tocando un boton "Redactar correo") pero demasiado lento para sugerencias en linea.
Patrones de arquitectura
Borradores con un toque
El patron de mayor engagement. Presenta al usuario un boton que genera un borrador completo basado en el contexto:
[Correo entrante sobre programar una reunion]
[Aceptar] [Rechazar] [Sugerir alternativa]
> Toca "Aceptar"
Borrador: "Gracias por escribir. El martes a las 2 PM me funciona
bien. Enviare una invitacion de calendario. Espero con gusto la
reunion."
[Enviar] [Editar]
La IA genera el borrador basado en la accion que el usuario selecciono. No se requiere escribir. El usuario revisa y envia (o edita primero).
Autocompletado en linea
Mientras el usuario escribe, sugiere completaciones:
El usuario escribe: "Gracias por la actualizacion. Revisare el..."
Sugerencia (texto gris): "...documento y te respondere antes del viernes."
[Tab para aceptar]
El autocompletado requiere la menor latencia. La sugerencia debe aparecer dentro de 200-300ms de que el usuario pause. Esto es alcanzable con modelos 1B en dispositivos flagship (35-50 tok/s = 7-10 palabras en 200ms).
Expansion de plantillas
El usuario selecciona una plantilla y la IA llena los detalles contextuales:
Plantilla: "Seguimiento despues de reunion"
Contexto: Reunion con Sara sobre revision del presupuesto Q3
Generado:
"Hola Sara, gracias por la discusion productiva sobre la revision
del presupuesto Q3 hoy. Como acordamos, preparare las proyecciones
revisadas para el proximo miercoles. Avisame si necesitas algo mas
mientras tanto."
Implementacion
La interfaz de generacion
// iOS: Generacion de borradores
class DraftGenerator {
private let model: LlamaContext
func generateReply(
incomingMessage: String,
action: ReplyAction,
onToken: @escaping (String) -> Void
) async -> String {
let prompt = buildPrompt(message: incomingMessage, action: action)
var fullResponse = ""
await model.generate(prompt: prompt, maxTokens: 256) { token in
fullResponse += token
onToken(token) // Transmitir a la UI
}
return fullResponse
}
private func buildPrompt(message: String, action: ReplyAction) -> String {
return """
Write a brief reply to this message. Action: \(action.rawValue)
Message: \(message)
Reply:
"""
}
}
Multiples sugerencias
Genera 2-3 borradores alternativos y deja que el usuario elija:
// Android: Generar multiples sugerencias
suspend fun generateSuggestions(
context: String,
count: Int = 3
): List<String> {
return (1..count).map {
model.generate(
prompt = buildSuggestionPrompt(context),
maxTokens = 64,
temperature = 0.8f // Mayor temperatura para variedad
)
}
}
Usa temperatura 0.7-0.9 para variedad entre sugerencias. Menor temperatura (0.1-0.3) para situaciones donde quieres un solo borrador consistente y de alta calidad.
Gestion de contexto
Buenos borradores requieren buen contexto. Proporciona al modelo:
- El contenido al que se responde (correo, mensaje, publicacion)
- La accion o intencion del usuario (aceptar, rechazar, hacer pregunta)
- Metadatos relevantes (nombre del remitente, asunto, fecha)
- El estilo de escritura del usuario (de los datos de entrenamiento)
Manten el contexto total por debajo de 500 tokens para generacion rapida.
Fine-tuning para generacion de contenido
Los modelos base generan contenido generico. Los modelos fine-tuned generan contenido en el estilo de tu app y para los casos de uso especificos de tu app.
Fuentes de datos de entrenamiento
- Contenido existente del usuario (con permiso): Como escriben actualmente tus usuarios correos, mensajes y notas? Su estilo es el objetivo de entrenamiento.
- Ejemplos sinteticos: Genera pares de entrenamiento usando un modelo mas grande, luego valida por calidad.
- Generacion basada en plantillas: Crea plantillas para escenarios comunes y genera variaciones.
Areas de enfoque del entrenamiento
| Area | Ejemplos de entrenamiento | Impacto |
|---|---|---|
| Consistencia de tono/estilo | 200-500 | Alto (hace que la salida se sienta nativa) |
| Vocabulario de dominio | 100-300 | Alto (usa terminologia correcta) |
| Adherencia al formato | 200-500 | Alto (estructura correcta cada vez) |
| Control de longitud | 100-200 | Medio (se mantiene dentro de la longitud objetivo) |
| Manejo de casos extremos | 100-200 | Medio (respaldo gracioso) |
Total: 700-1,700 ejemplos de entrenamiento para un modelo de generacion de contenido bien ajustado.
Plataformas como Ertas manejan el pipeline completo. Sube tus conversaciones de entrenamiento, fine-tunea con LoRA, exporta GGUF. El modelo aprende el estilo de contenido de tu app y genera borradores que se sienten nativos.
Expectativas de rendimiento
Velocidad de generacion (modelo 3B, Q4_K_M)
| Dispositivo | Borrador corto (50 tokens) | Borrador medio (200 tokens) |
|---|---|---|
| iPhone 16 Pro | 1.5-2.5s | 6-10s |
| iPhone 15 | 2-3.5s | 8-14s |
| Galaxy S24 | 1.5-2.5s | 6-10s |
| Android gama media | 3-5s | 12-20s |
Velocidad de generacion (modelo 1B, Q4_K_M)
| Dispositivo | Borrador corto (50 tokens) | Sugerencia (20 tokens) |
|---|---|---|
| iPhone 16 Pro | 1-1.5s | 0.4-0.6s |
| iPhone 15 | 1.5-2s | 0.5-0.8s |
| Galaxy S24 | 1-1.5s | 0.4-0.6s |
| Android gama media | 2-3s | 0.8-1.2s |
Para autocompletado en linea, usa un modelo 1B. Para generacion de borradores completos, usa 3B.
Consideraciones de calidad
Gestion de alucinaciones
Los modelos de generacion de contenido pueden inventar detalles. Para borradores, esto significa generar nombres, fechas o hechos que no estaban en el contexto.
Mitigacion:
- Proporciona contexto completo en el prompt (no esperes que el modelo sepa hechos no proporcionados)
- Usa la tendencia del modelo fine-tuned a seguir patrones de entrenamiento (los modelos fine-tuned alucinan menos en tareas del dominio)
- Agrega un paso de "Revisar antes de enviar" en la UI
Control de longitud
Fine-tunea con ejemplos de tu longitud objetivo. Si quieres respuestas de 2-3 oraciones, entrena con ejemplos de 2-3 oraciones. El modelo aprende la longitud de salida esperada de los datos de entrenamiento, no de las instrucciones.
Regeneracion
Siempre ofrece un boton de "Regenerar". Si el primer borrador no es acertado, el usuario puede obtener uno nuevo. Con temperatura mayor a 0, cada generacion produce salida diferente.
La combinacion de generacion instantanea, soporte offline y cero costo por uso hace de la generacion de contenido en el dispositivo una funcion de alto valor para cualquier app donde los usuarios escriben.
Ship AI that runs on your users' devices.
Early bird pricing starts at $14.50/mo — locked in for life. Plans for builders and agencies.
Keep reading

Building an On-Device AI Assistant for Your Mobile App
Architecture patterns for building a conversational AI assistant that runs entirely on the user's device. Model selection, conversation management, UI patterns, and production considerations.

On-Device Semantic Search: AI-Powered Search Without a Server
How to build semantic search that runs entirely on the user's phone. Local embeddings, vector similarity, and natural language queries across user content without a server or API.

On-Device Text Classification for Mobile Apps
How to build fast, accurate text classification that runs on the user's phone. Sentiment analysis, content categorization, intent detection, and spam filtering without an API call.