0Pricing
AI Prompt Engineering · Lección

Mantener el contexto entre fragmentos

Use solapamiento, contexto acumulativo e inyección de metadatos para mantener la continuidad.

Mantener el contexto entre fragmentos es una lección gratuita de AI Prompt Engineering en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de AI Prompt Engineering, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de AI Prompt Engineering incluye 4 lecciones en total.

El problema del contexto entre fragmentos

Cuando un documento se divide en fragmentos, puede ser necesaria información del fragmento N para interpretar correctamente el fragmento N+1. Por ejemplo, un término definido en el fragmento 3 se utiliza en el fragmento 7. Sin un puente de contexto, el modelo que procesa el fragmento 7 no conoce esa definición.

Cuatro estrategias abordan este problema: solapamiento, inserción de un resumen acumulado, etiquetas de metadatos y referencias a números de página.

Estrategia 1: solapamiento de tokens

El solapamiento repite los últimos N tokens del fragmento N al principio del fragmento N+1. Esto garantiza que una oración o un argumento que atraviese un límite aparezca completo al menos en un fragmento.

Solapamiento habitual: 100–200 tokens (aproximadamente entre 75 y 150 palabras). Un solapamiento excesivo aumenta la redundancia y el coste; uno insuficiente deja vacíos en los límites.

import tiktoken

enc = tiktoken.get_encoding('cl100k_base')

def chunk_with_overlap(text, max_tokens=1000, overlap=200):
    tokens = enc.encode(text)
    chunks = []
    step = max_tokens - overlap
    i = 0
    while i < len(tokens):
        chunk = tokens[i:i + max_tokens]
        chunks.append(enc.decode(chunk))
        i += step
    return chunks

chunks = chunk_with_overlap(document, max_tokens=1000, overlap=200)
print(f'{len(chunks)} chunks with 200-token overlap')

Solapamiento para recuperación y resumido

El solapamiento se comporta de forma diferente según la tarea:

  • Recuperación: el solapamiento ayuda: una consulta coincide con la región solapada en cualquiera de los dos fragmentos adyacentes, lo que mejora la exhaustividad. Utilice un solapamiento del 10–20 % del tamaño del fragmento.
  • Resumido: el solapamiento puede causar repeticiones: la misma oración se resume dos veces. Utilice un solapamiento menor (5–10 %) o elimínelo antes de resumir.
def strip_overlap(chunks, overlap_tokens=200):
    '''Remove the leading overlap from each chunk (except the first).'''
    cleaned = [chunks[0]]
    for chunk in chunks[1:]:
        tokens = enc.encode(chunk)
        trimmed = enc.decode(tokens[overlap_tokens:])
        cleaned.append(trimmed)
    return cleaned

Estrategia 2: Inyección de un resumen acumulativo

Un resumen acumulativo es un resumen progresivo de todos los fragmentos procesados hasta el momento. Antes de procesar el fragmento N, inyecte el resumen acumulativo en el prompt como contexto. Esto proporciona al modelo conocimiento del contenido anterior sin superar la ventana de contexto.

import openai
client = openai.OpenAI(api_key='sk-...')

def process_with_rolling_summary(chunks):
    rolling_summary = ''
    results = []

    for i, chunk in enumerate(chunks):
        context = ''
        if rolling_summary:
            context = f'Summary of previous sections:\n{rolling_summary}\n\n'

        prompt = context + f'Current section:\n{chunk}'
        resp = client.chat.completions.create(
            model='gpt-4o',
            messages=[
                {'role': 'system', 'content': 'Answer questions or summarize, using prior context.'},
                {'role': 'user', 'content': prompt}
            ]
        )
        result = resp.choices[0].message.content
        results.append(result)

        # Update rolling summary
        rolling_summary = update_rolling_summary(rolling_summary, chunk)

    return results

Actualización del resumen acumulativo

El resumen acumulativo debe crecer de forma incremental. Después de procesar cada fragmento, pida al LLM que actualice el resumen incorporando la nueva información de ese fragmento. Mantenga el resumen acumulativo breve —entre 200 y 400 tokens— para dejar espacio al fragmento actual.

def update_rolling_summary(current_summary, new_chunk, max_words=150):
    if not current_summary:
        prompt = f'Summarize the following in under {max_words} words:\n\n{new_chunk}'
    else:
        prompt = (
            f'Current running summary (under {max_words} words):\n{current_summary}\n\n'
            f'New section to incorporate:\n{new_chunk}\n\n'
            f'Update the summary to include the new section. Stay under {max_words} words.'
        )
    resp = client.chat.completions.create(
        model='gpt-4o-mini',
        messages=[{'role': 'user', 'content': prompt}]
    )
    return resp.choices[0].message.content

Estrategia 3: Etiquetas de metadatos

Las etiquetas de metadatos adjuntan información estructurada a cada fragmento para que el LLM sepa qué está procesando y pueda mantener la continuidad lógica.

Etiquetas habituales: document_title, chapter, section, page, chunk_index, total_chunks. Inyecte estas etiquetas como encabezado en el prompt, no en el texto del fragmento, para separar el contenido de los metadatos.

def build_prompt_with_metadata(chunk, metadata):
    header = (
        f'Document: {metadata["title"]}\n'
        f'Chapter: {metadata["chapter"]}\n'
        f'Section: {metadata["section"]}\n'
        f'Page: {metadata["page"]}\n'
        f'Chunk: {metadata["chunk_index"] + 1} of {metadata["total_chunks"]}\n'
        '---\n'
    )
    return header + chunk

prompt = build_prompt_with_metadata(
    chunk=chunks[5],
    metadata={
        'title': 'Annual Report 2024',
        'chapter': '3. Financial Results',
        'section': '3.2 Revenue Breakdown',
        'page': 42,
        'chunk_index': 5,
        'total_chunks': 120
    }
)

Estrategia 4: Referencias a números de página

Cuando un fragmento hace referencia a algo de una página anterior, el modelo puede citarlo si los números de página están incluidos. Inyecte los saltos de página como marcadores en el texto antes de dividirlo en fragmentos, para que se conserven en ellos:

def inject_page_markers(pages):
    '''pages: list of strings, one per page.'''
    marked = []
    for i, page_text in enumerate(pages):
        marked.append(f'[PAGE {i+1}]\n{page_text}')
    return '\n\n'.join(marked)

# When the model sees [PAGE 12] in context, it can say
# 'As defined on page 12...' in its output, enabling traceability.
document_with_markers = inject_page_markers(pdf_pages)
chunks = chunk_with_overlap(document_with_markers)

Combinación de estrategias

En producción, combine las cuatro estrategias para maximizar la fidelidad del contexto:

  1. Añada marcadores de página antes de dividir el documento en fragmentos
  2. Divida el texto en fragmentos con un solapamiento de 200 tokens
  3. Adjunte un encabezado de metadatos al prompt de cada fragmento
  4. Inyecte el resumen acumulativo antes de cada fragmento

El enfoque combinado garantiza que el modelo siempre sepa en qué parte del documento se encuentra, qué contenido aparece antes y cómo se relaciona el fragmento actual con el documento completo.

def process_document(pages, doc_metadata):
    # Step 1: inject page markers
    full_text = inject_page_markers(pages)
    # Step 2: chunk with overlap
    chunks = chunk_with_overlap(full_text, max_tokens=900, overlap=150)
    total = len(chunks)
    rolling_summary = ''
    results = []

    for i, chunk in enumerate(chunks):
        meta = {**doc_metadata, 'chunk_index': i, 'total_chunks': total}
        prompt = build_prompt_with_metadata(chunk, meta)
        if rolling_summary:
            prompt = 'Prior context:\n' + rolling_summary + '\n\n' + prompt
        result = call_llm(prompt)
        results.append(result)
        rolling_summary = update_rolling_summary(rolling_summary, chunk)

    return results

Evaluación de la retención del contexto

Para verificar que su estrategia de contexto funciona, cree preguntas de prueba que requieran información de varios fragmentos:

  • Defina un término presentado en el fragmento 2 y cuya respuesta se solicite en el fragmento 8
  • Calcule un total que abarque varias páginas
  • Identifique una contradicción entre el capítulo 1 y el capítulo 5

Ejecute el pipeline y compruebe si las respuestas hacen referencia correctamente al contenido anterior. Si fallan, aumente el solapamiento o el tamaño del resumen acumulativo.

test_questions = [
    {
        'question': 'What is the definition of "net recurring revenue" used in this report?',
        'defined_in_chunk': 2,
        'asked_in_chunk': 9,
        'expected_keywords': ['net recurring revenue', 'subscription', 'exclude']
    }
]

def evaluate_context_retention(pipeline_results, test_questions):
    for test in test_questions:
        answer = pipeline_results[test['asked_in_chunk']]
        for kw in test['expected_keywords']:
            if kw.lower() not in answer.lower():
                print(f'FAIL: missing "{kw}" in answer to chunk {test["asked_in_chunk"]}')

Resumen de las ventajas y desventajas

Cada estrategia tiene costes y ventajas:

  • Solapamiento: es sencillo, aumenta el recuento de tokens en el porcentaje de solapamiento y puede provocar repeticiones en los resúmenes
  • Resumen acumulativo: es potente, añade una llamada al LLM por fragmento y el resumen puede desviarse o perder detalles
  • Etiquetas de metadatos: no cuesta añadirlas, ayudan al modelo a orientarse y no sustituyen al contenido
  • Marcadores de página: permiten la trazabilidad y añaden caracteres al texto, pero generan una sobrecarga mínima de tokens

Comience con solapamiento y metadatos. Añada el resumen acumulativo solo cuando las pruebas revelen fallos de contexto entre fragmentos.

Guía de dimensionamiento para casos reales

Tamaños prácticos para un documento de 100 páginas (promedio de 500 tokens por página = 50.000 tokens en total):

  • Tamaño del fragmento: 800 tokens, solapamiento de 150 tokens → ~73 fragmentos
  • Resumen acumulativo: 200 tokens como máximo (se actualiza después de cada fragmento)
  • Encabezado de metadatos: ~30 tokens por fragmento
  • Entrada efectiva por llamada a la API: 800 + 200 + 30 = 1030 tokens
  • Coste de map (gpt-4o-mini a 0,15 $/1M): 73 × 1030 × 0,15 $/1M ≈ 0,011 $

Las estrategias de contexto añaden un coste mínimo y mejoran considerablemente la coherencia.

Comprobación de conocimientos

¿Cuál es el propósito de un resumen acumulativo en el procesamiento de documentos fragmento por fragmento?

Recapitulación: contexto entre fragmentos

Cuatro estrategias para mantener el contexto entre fragmentos:

  • Solapamiento: repita los últimos N tokens del fragmento N al principio del fragmento N+1
  • Resumen acumulativo: inyecte un resumen progresivo breve antes de cada fragmento
  • Etiquetas de metadatos: encabezado con información del documento, capítulo, sección y página
  • Marcadores de página: inserte los números de página en el texto antes de dividirlo en fragmentos

Combine las cuatro estrategias en los pipelines de producción. Pruebe la retención del contexto entre fragmentos con preguntas que abarquen varios fragmentos. Esto concluye el Curso 16 sobre estrategias para procesar documentos largos.

Preguntas frecuentes

¿La lección «Mantener el contexto entre fragmentos» es gratis?

Sí — el texto completo de «Mantener el contexto entre fragmentos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de AI Prompt Engineering, actualiza a CoddyKit PRO. El curso de AI Prompt Engineering incluye 4 lecciones en total.

¿Qué aprenderé en «Mantener el contexto entre fragmentos»?

Use solapamiento, contexto acumulativo e inyección de metadatos para mantener la continuidad. Practicas AI Prompt Engineering con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar AI Prompt Engineering?

No se requiere experiencia previa. AI Prompt Engineering en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Mantener el contexto entre fragmentos»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de AI Prompt Engineering?

Sí. Cada lección de AI Prompt Engineering incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Estrategias de división para textos largos
  2. Patrón de resumen Map-Reduce
  3. Resumen jerárquico
  4. Mantener el contexto entre fragmentos
← Volver a AI Prompt Engineering