En este tutorial vamos a aprender cómo implementar el razonamiento en cadena (Chain-of-Thought, CoT) usando la biblioteca Mirascope junto con el modelo LLaMA 3 de Groq. En lugar de hacer que el modelo entregue una respuesta directa, este enfoque lo invita a desglosar el problema en pasos lógicos, tal como lo haría una persona al resolver un planteamiento complejo. Esto mejora la precisión, la transparencia y facilita manejar tareas que requieren varios pasos de forma más confiable.
El ejemplo que usaremos es un problema de velocidad relativa: “Si un tren sale de la Ciudad A a las 9:00 AM viajando a 60 km/h, y otro tren sale de la Ciudad B, que está a 300 km de la Ciudad A, a las 10:00 AM viajando a 90 km/h hacia la Ciudad A, ¿a qué hora se encontrarán los trenes?”.
Para empezar, es necesario instalar las dependencias con:
```bash pip install "mirascope[groq]" pip install datetime ```
Además, se requiere una clave API de Groq, que puedes obtener en https://console.groq.com/keys, para realizar llamadas al modelo.
Luego, importamos las librerías y definimos un esquema con Pydantic para organizar cada paso del razonamiento. El modelo `COTResult` contiene un título para identificar el paso, el contenido con la explicación y un indicador para saber si se continúa con otro paso o se entrega la respuesta final.
A continuación, definimos dos funciones fundamentales para el flujo de razonamiento CoT:
- `cot_step`: permite que el modelo razone paso a paso, revisando las respuestas anteriores y decidiendo si debe seguir analizando o si ya tiene la respuesta final. Se establecen reglas para que el modelo use hasta 5 pasos y explore diferentes posibilidades, incluso que reconozca si podría estar equivocado y vuelva a revisar desde otro enfoque.
- `final_answer`: toma todo el razonamiento acumulado y genera una respuesta final clara, sin detalles adicionales, lista para el usuario.
Para manejar este proceso iterativo, creamos:
- `generate_cot_response`: envía la pregunta al modelo y, paso a paso, recopila los títulos y explicaciones de cada razonamiento, además de medir el tiempo que toma pensar en cada uno. Detiene el proceso cuando el modelo indica que tiene la respuesta final o cuando se completan 5 pasos, y luego genera la respuesta definitiva.
- `display_cot_response`: imprime de forma ordenada cada paso con su contenido y tiempo, y finalmente muestra la respuesta final junto con el tiempo total empleado.
Finalmente, con la función `run` ejecutamos el proceso completo: enviamos la pregunta, mostramos las respuestas paso a paso, y guardamos el historial de la conversación para consultar o auditar en el futuro.
Este método ofrece una forma más transparente y estructurada de trabajar con modelos de lenguaje en problemas complejos, acercándose a cómo un humano pensaría para llegar a una solución.



