Cargando

Conversaciones de múltiples turnos

Lección 47 min

Cuando trabajas con la API de Anthropic y Claude, hay un concepto crucial que necesitas entender: Claude no almacena ningún historial de tu conversación. Cada solicitud que haces es completamente independiente, sin memoria de intercambios anteriores.

Esto significa que si quieres tener una conversación de múltiples turnos en la que Claude recuerde el contexto de mensajes anteriores, necesitas manejar el estado de la conversación tú mismo.

El problema con las conversaciones sin estado

Supongamos que le preguntas a Claude "¿Qué es la computación cuántica?" y obtienes una buena respuesta. Luego continúas con "Escribe otra oración" - Claude no tiene idea a qué te refieres. Escribirá una oración sobre algo completamente aleatorio porque no tiene memoria de la discusión sobre computación cuántica.

Cómo funcionan las conversaciones de múltiples turnos

Para mantener el contexto de la conversación, necesitas hacer dos cosas:

  • Mantener manualmente una lista de todos los mensajes en tu código
  • Enviar el historial completo de mensajes con cada solicitud

Aquí está el flujo que realmente funciona:

  1. Envía tu mensaje inicial de usuario a Claude
  2. Toma la respuesta de Claude y agrégala a tu lista de mensajes como un mensaje de asistente
  3. Agrega tu pregunta de seguimiento como otro mensaje de usuario
  4. Envía todo el historial de la conversación a Claude

Creación de funciones auxiliares

Para facilitar la gestión de conversaciones, puedes crear tres funciones auxiliares:

python
def add_user_message(messages, text):
    user_message = {"role": "user", "content": text}
    messages.append(user_message)

def add_assistant_message(messages, text):
    assistant_message = {"role": "assistant", "content": text}
    messages.append(assistant_message)

def chat(messages):
    message = client.messages.create(
        model=model,
        max_tokens=1000,
        messages=messages,
    )
    return message.content[0].text

Poniéndolo todo junto

Así es como usas estas funciones para mantener una conversación:

python
# Comienza con una lista de mensajes vacía
messages = []

# Agrega la pregunta inicial del usuario
add_user_message(messages, "Define quantum computing in one sentence")

# Obtén la respuesta de Claude
answer = chat(messages)

# Agrega la respuesta de Claude al historial de la conversación
add_assistant_message(messages, answer)

# Agrega una pregunta de seguimiento
add_user_message(messages, "Write another sentence")

# Obtén la respuesta de seguimiento con contexto completo
final_answer = chat(messages)

Ahora Claude entenderá que "Escribe otra oración" se refiere a ampliar la definición de computación cuántica, porque has proporcionado el contexto completo de la conversación.

Puntos clave

Recuerda que cada llamada a la API de Claude es independiente. Si quieres contexto conversacional, debes:

  • Almacenar todos los mensajes localmente en tu aplicación
  • Enviar el historial completo de mensajes con cada solicitud
  • Formatear correctamente los mensajes con los roles "user" y "assistant"

Estas funciones auxiliares serán esenciales a lo largo de tu trabajo con Claude, facilitando mucho la creación de aplicaciones que se sientan como conversaciones naturales en lugar de intercambios aislados de preguntas y respuestas.