Saltar al contenido principal

Streaming y conversaciones multiturno

Intermedio

Dos realidades prácticas de crear experiencias tipo chat con la API: usa streaming para que los usuarios vean la salida de inmediato, y gestiona tú mismo el historial porque la API es sin estado.

Streaming

Sin streaming, el usuario espera a la respuesta completa. Con streaming, los tokens llegan a medida que se generan, lo que da una velocidad percibida mucho mejor. Usa el ayudante de streaming del SDK:

with client.messages.stream(
model="claude-sonnet-4-6", max_tokens=1024,
messages=[{"role": "user", "content": "Explain RAG in two sentences."}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)

Multiturno: tú gestionas el historial

La API no tiene memoria entre llamadas (por qué). Para continuar una conversación, vuelve a enviar todo el intercambio previo cada vez:

messages = [{"role": "user", "content": "Hi, I'm planning a trip."}]
# ... get assistant reply, then append both turns:
messages.append({"role": "assistant", "content": assistant_text})
messages.append({"role": "user", "content": "Make it 3 days."})
# send the full `messages` list again

Las conversaciones largas llenan la ventana

A medida que crece el historial, consume la ventana de contexto y el coste aumenta. Estrategias:

  • Resume/compacta los turnos más antiguos en un breve recordatorio que arrastres hacia adelante.
  • Recorta los turnos anteriores irrelevantes.
  • Combínalo con la caché de prompts para evitar volver a pagar por un prefijo estable.

Siguiente