Desarrollo & IA

Cómo Hacer Fine-tuning de Modelos LLM para Crear Personalidades de IA en Python

5 de enero de 2026
8 min

marcus-finetune es una herramienta en Python diseñada para ajustar modelos de lenguaje AI y crear personalidades conversacionales personalizadas. Faci...

Javier Santos

Especialista en IA & Machine Learning

Cómo diseñé marcus-finetune: una herramienta para ajustar modelos conversacionales de IA de forma práctica y automática

Los asistentes virtuales están en todas partes, pero rara vez se adaptan realmente a las necesidades y el tono de cada negocio o usuario. Cuando empecé a trabajar con modelos de lenguaje, me encontré con un reto recurrente: el fine-tuning (ajuste fino) de modelos conversacionales era un proceso manual, poco reproducible y plagado de pasos tediosos.

Así nació marcus-finetune: una herramienta en Python que automatiza el fine-tuning de modelos de lenguaje y facilita la creación de asistentes conversacionales personalizados, todo con workflows automatizados por scripts Batch. En este post, te cuento el porqué de su desarrollo, la arquitectura técnica detrás, los desafíos que enfrenté y los aprendizajes clave.


¿Por qué era necesario crear marcus-finetune?

El fine-tuning de modelos de lenguaje grandes (LLMs) como GPT, Llama o similares es una de las formas más efectivas de adaptar un asistente virtual a necesidades específicas: desde el tono de voz hasta áreas de conocimiento o protocolos de interacción. Sin embargo:

  • El flujo de trabajo clásico requiere pasos manuales: limpieza de datos, formateo, entrenamiento, evaluación y despliegue.
  • Muchos proyectos necesitan personalización recurrente, lo que hace esencial la automatización y reproducibilidad.
  • Herramientas existentes suelen ser complejas, poco amigables o requieren mucha configuración manual.

Objetivo: Crear una herramienta que, mediante scripts sencillos, permita a cualquier equipo ajustar modelos de lenguaje y obtener una personalidad conversacional única de manera eficiente y automatizada.


Arquitectura de marcus-finetune

El diseño de marcus-finetune se centra en la simplicidad, modularidad y automatización. La arquitectura se compone de:

1. Núcleo en Python

  • Procesamiento y limpieza de datos: Scripts para transformar datasets conversacionales (JSON, CSV, etc.) al formato requerido por los frameworks de entrenamiento.
  • Interfaces de entrenamiento: Scripts que interactúan con frameworks populares (ej. HuggingFace Transformers) para lanzar y monitorizar procesos de fine-tuning.
  • Gestión de hiperparámetros: Configuración parametrizable para experimentar y ajustar el proceso según la necesidad del asistente.

2. Automatización con Batchfile

  • Workflows automatizados: Scripts Batch (para Windows) que orquestan el pipeline completo, desde la preparación de datos hasta el despliegue y testeo del modelo ajustado.
  • Reproducibilidad: Permite relanzar el proceso completo o partes de él con un solo comando, asegurando consistencia entre experimentos.

3. Estructura Modular

  • Separación en módulos: Cada etapa (preprocesamiento, entrenamiento, evaluación) está desacoplada, facilitando la extensión o sustitución por otros métodos según evolucionen los frameworks.

A continuación, un diagrama conceptual simplificado:

code
1[Dataset Conversacional] --> [Preprocesamiento Python] --> [Fine-tuning Python] --> [Evaluación/Exportación]
2 ^ |
3 |---------------------- Batchfile Workflow Script -------------------------------|


Decisiones técnicas clave (y por qué las tomé)

Python como lenguaje principal

  • Ventaja: Ecosistema maduro de librerías para IA y NLP (como HuggingFace, NLTK, Pandas).
  • Facilidad de scripting: Permite crear scripts potentes y fáciles de adaptar a diferentes casos.

Uso de Batchfile para automatización

  • Motivo: Muchos equipos no expertos en Linux o Bash trabajan en entornos Windows. Batchfile es simple y universal en ese contexto.
  • Alternativas consideradas: Bash, Makefile, pero prioricé la compatibilidad inicial con Windows.

Modularidad y simplicidad

  • Por qué: Quería que la herramienta fuera fácil de entender, modificar y adaptar a nuevos frameworks o procesos de entrenamiento.


Componentes principales (con snippets de código)

1. Preprocesamiento de datos

El script toma datasets en bruto y los convierte al formato esperado por los modelos. Ejemplo de función de limpieza y formateo:

python
1import pandas as pd
2 
3def preprocess_conversations(input_csv, output_jsonl):
4 df = pd.read_csv(input_csv)
5 # Limpieza y normalización básica
6 df['message'] = df['message'].str.strip().str.lower()
7 # Conversión a formato JSONL requerido
8 with open(output_jsonl, 'w', encoding='utf-8') as f:
9 for _, row in df.iterrows():
10 f.write(f'{{"prompt": "{row["prompt"]}", "response": "{row["message"]}"}}\n')

2. Lanzamiento del fine-tuning

El script centraliza los parámetros de entrenamiento y lanza el proceso. Ejemplo (simplificado) usando HuggingFace:

python
1from transformers import Trainer, TrainingArguments
2 
3def fine_tune(model_checkpoint, train_dataset, output_dir, epochs=3, batch_size=8):
4 args = TrainingArguments(
5 output_dir=output_dir,
6 num_train_epochs=epochs,
7 per_device_train_batch_size=batch_size,
8 save_strategy='epoch'
9 )
10 trainer = Trainer(
11 model=model_checkpoint,
12 args=args,
13 train_dataset=train_dataset
14 )
15 trainer.train()

3. Automatización con Batchfile

Un workflow típico en Batchfile podría ser:

batch
1@echo off
2REM 1. Preprocesar datos
3python preprocess.py input.csv output.jsonl
4 
5REM 2. Lanzar entrenamiento
6python train.py --data output.jsonl --epochs 5
7 
8REM 3. Evaluar modelo
9python evaluate.py --model finetuned_model


Challenges técnicos y cómo los resolví

1. Compatibilidad multiplataforma

Aunque el objetivo inicial era Windows, algunos usuarios querían correrlo en Linux/Mac. Modularicé la lógica del pipeline en Python, dejando Batchfile solo para la orquestación, facilitando la migración a Bash en el futuro.

Solución:

  • Separar todos los procesos críticos en módulos Python independientes.
  • Documentar la creación de scripts Bash equivalentes.

2. Manejo de datasets heterogéneos

Cada negocio tenía sus propias estructuras de datos conversacionales (CSV, JSON, Excel...).

Solución:

  • Implementar funciones de importación flexibles que autodetectan el formato.
  • Agregar validaciones y logs de errores descriptivos para facilitar el troubleshooting.

3. Control de recursos y eficiencia

El fine-tuning de LLMs puede ser intensivo en GPU/CPU y memoria.

Solución:

  • Permitir configuración de batch size, epochs y checkpointing.
  • Incluir logs periódicos y checkpoints para reanudar procesos tras caídas.


Resultados e impacto

Aunque marcus-finetune sigue evolucionando, ya ha demostrado varios beneficios en proyectos reales:

  • Reducción de tiempo: Automatizar el pipeline ha reducido el tiempo de ajuste de modelos de días a horas.
  • Consistencia: Los asistentes generados tienen un tono y conocimiento alineado con los objetivos del negocio.
  • Facilidad de uso: Equipos no expertos pueden lanzar fine-tuning con simples scripts, sin necesitar conocer los detalles internos de frameworks de IA.
  • Escalabilidad: Es fácil crear múltiples asistentes personalizados a partir de la misma base, cambiando solo los datasets y parámetros.


Aprendizajes y posibles mejoras

Lo que aprendí

  • La automatización y la reproducibilidad son tan importantes como la precisión del modelo.
  • El diseño modular facilita mucho la adaptación a nuevos frameworks y requisitos.
  • La experiencia de usuario (UX) para desarrolladores es clave: logs claros, mensajes de error útiles y scripts intuitivos marcan la diferencia.

Próximos pasos

  • Soporte multiplataforma completo: Scripts Bash y/o Makefile para usuarios de Linux/Mac.
  • Integración con APIs: Permitir fine-tuning vía REST API para facilitar la integración con otros sistemas.
  • Mejor documentación: Crear un README detallado con ejemplos y casos de uso.
  • Soporte para más frameworks: Incluir compatibilidad con otros frameworks de IA emergentes.


Conclusión

Construir marcus-finetune me permitió entender de primera mano los retos y oportunidades de llevar el fine-tuning de modelos conversacionales a un workflow práctico y reproducible. Si estás buscando automatizar el ajuste de modelos para crear asistentes personalizados, te animo a probar la herramienta y contribuir con feedback o mejoras.

¿Tienes preguntas, sugerencias o quieres colaborar?

¡Déjame un issue en GitHub! 🚀


Javier Santos Criado

Ingeniero de IA | Apasionado por crear soluciones que sí resuelven problemas reales