BookinglyTech News
Inteligencia artificial

Trocear una novela de 150.000 tokens para que el LLM no pierda el hilo al traducirla

El equipo de LectuLibre detalla su pipeline de traducción literaria: fragmentos de 3.000 tokens con solape, glosario y resumen acumulado para sostener el contexto entre capítulos.

3 min de lecturaDev.to0 vistas

Un libro no cabe en un prompt con la calidad suficiente, y el equipo de LectuLibre lo ha explicado con números. Su servicio de traducción con IA parte las novelas en fragmentos de 3.000 tokens con 500 de solape y arrastra un glosario y un resumen de lo ya traducido para que Claude no pierda el hilo entre capítulos. El resultado: unos 60 fragmentos por novela de 120.000 palabras, entre 12 y 15 dólares y media hora de proceso.

El punto de partida era la tentación obvia. Claude 3.5 Sonnet anuncia una ventana de contexto de 200.000 tokens y una novela típica ocupa entre 80.000 y 120.000 palabras, o sea, entre 100.000 y 150.000 tokens. Cabe. Pero una sola llamada de ese tamaño cuesta cara, el modelo empieza a perder atención en los primeros capítulos cuando el contexto se estira, aparecen los límites de tasa y las peticiones que expiran, y si algo falla no hay forma de reanudar sin repetirlo todo.

Fragmentos con estado

La estrategia es un troceado con solape más un contexto acumulado delante de cada llamada. Ese contexto lleva tres cosas: un glosario de términos y nombres propios con su traducción fijada, un resumen de los capítulos anteriores y el texto del fragmento actual.

El pipeline va así: se extrae el texto plano de EPUB o PDF con metadatos de capítulo; se parte en fragmentos conscientes del número de tokens; por cada uno se recuperan glosario y resumen desde PostgreSQL; se llama al modelo con un prompt de sistema de traductor literario; se extraen términos nuevos de la traducción y se actualiza el glosario; se genera un resumen de dos o tres frases que se guarda para el fragmento siguiente; y al final se ensambla el libro.

El detalle que les costó un intento fallido: probaron primero el RecursiveCharacterTextSplitter de LangChain y descubrieron que trabaja sobre caracteres, no sobre tokens, así que algunos fragmentos se pasaban del límite del modelo. Se pasaron a tiktoken para contar exacto. Como Claude usa su propio tokenizador, aproximan con cl100k_base, suficiente para dimensionar. Después añadieron un post-procesado que ajusta las fronteras al salto de párrafo más cercano dentro de la ventana, porque cortar a mitad de frase se nota en la calidad.

El glosario es un diccionario de Python guardado como JSONB en PostgreSQL vía SQLAlchemy. El resumen se concatena con el anterior, pero se recorta para no pasar de 500 tokens. Para pasajes sencillos usan DeepSeek como alternativa más barata, y envuelven las llamadas con reintentos exponenciales de tenacity por los timeouts de la API.

Lo que cuesta

Para una novela de 120.000 palabras, unos 150.000 tokens, salen alrededor de 60 fragmentos de 3.000 tokens con 500 de solape. Traducir con Claude 3.5 Sonnet ronda los 12 a 15 dólares por libro y tarda entre 20 y 30 minutos. La comparación con la traducción de una sola pasada es la parte interesante: antes aparecían inconsistencias, como un personaje que cambiaba de nombre a mitad de novela, y el proceso se caía por timeout de vez en cuando. Con el troceado miden una caída del 40% en los errores que reportan los usuarios.

No todo salió a la primera. Al principio fijaron el solape en 100 tokens, alrededor del 3%, y los traductores detectaron cortes de contexto en las fronteras: una frase que remitía a algo del capítulo anterior salía mal traducida.

El patrón es el que se repite en cualquier tarea larga sobre un modelo: trocear, mantener estado entre fragmentos y decidir cuánto solape pagas. Ese último parámetro es el que decide si el lector nota las costuras.