- g1 es un prototipo inicial que usa Llama-3.1 70B en Groq junto con una estrategia de prompts para generar cadenas de razonamiento similares a o1, donde el LLM “piensa” paso a paso
- A diferencia de OpenAI o1, muestra al usuario todos los tokens de razonamiento y usa un modelo open source, pero no es una réplica completa de o1 ni una comparación directa, sino un experimento de razonamiento basado en prompts
- En cada etapa, el modelo elige si continúa con el siguiente paso de razonamiento o si entrega la respuesta final, y está diseñado para devolver un título y contenido en JSON en cada paso
- El prompt exige al menos 3 pasos, exploración de alternativas, revisión de posibles errores propios y el uso de al menos 3 métodos; en el problema Strawberry mostró cerca de 70% de precisión (n=10), frente a 0% de Llama-3.1-70B solo y 30% de ChatGPT-4o
- En pruebas iniciales mostró entre 60% y 80% de precisión en problemas simples de lógica, pero la precisión aún no fue evaluada oficialmente y g1 tampoco es perfecto
El problema que g1 intenta resolver
- g1 es un prototipo inicial que busca mejorar la capacidad de razonamiento de los LLM usando solo estrategias de prompting
- El objetivo es hacer que los LLM resuelvan problemas lógicos que normalmente les resultan difíciles mediante una cadena de razonamiento similar a o1
- Se explicitan sus diferencias con OpenAI o1
- g1 muestra al usuario todos los tokens de razonamiento
- g1 usa un modelo open source
- g1 no es una réplica completa de o1 ni una comparación de rendimiento
- OpenAI o1 aprende razonamiento Chain of Thought mediante aprendizaje por refuerzo a gran escala para lograr rendimiento de punta en problemas complejos de nivel doctorado
Cómo funciona
- g1 genera una cadena de razonamiento cercana a Chain of Thought dinámico, basada en Llama3.1-70b
- Cada paso de razonamiento es visible para el usuario y tiene un título
- En cada paso, el modelo elige una de dos opciones
- Continuar con el siguiente paso de razonamiento
- Proporcionar la respuesta final
- El system prompt incluye instrucciones para que el modelo razone mejor
- Explorar respuestas alternativas
- Derivar la respuesta con al menos 3 métodos
- Cuestionar borradores de solución anteriores
- Considerar las limitaciones de los LLM
Estrategia de prompts
- El prompt asigna al modelo el rol de AI assistant experto que explica el reasoning paso a paso
- Cada paso debe responder en formato JSON con las claves
title,contentynext_action- El valor de
next_actiondebe sercontinueofinal_answer
- El valor de
- Mediante instrucciones enfatizadas en mayúsculas, se busca aumentar el cumplimiento del prompt
- Usar tantos pasos de razonamiento como sea posible, pero como mínimo 3 pasos
- Reconocer qué es posible e imposible como LLM
- Explorar respuestas alternativas y considerar puntos en los que su propio razonamiento podría estar equivocado
- Cuando diga que revisará, revisar realmente con otro enfoque
- Derivar la respuesta con al menos 3 métodos
- Usar buenas prácticas
- Después de agregar el problema como mensaje del usuario, se incluye una frase estándar de inicio como mensaje del assistant para que comience la generación
Ejemplos y resultados iniciales
- g1 aborda problemas simples de lógica difíciles de resolver sin prompting, como el problema Strawberry: “¿cuántas R hay en strawberry?”
- Se presentan cifras iniciales para ese problema
- g1: cerca de 70% de precisión, n=10
- Llama-3.1-70B sin prompt: 0% de precisión
- ChatGPT-4o: 30% de precisión
- En pruebas iniciales, g1 resolvió con 60% a 80% de precisión problemas simples de lógica que normalmente les resultan difíciles a los LLM
- La precisión aún no fue evaluada oficialmente
- Entre los problemas de ejemplo se incluyen
How many Rs are in strawberry?yWhich is larger, .9 or .11?
Cómo ejecutarlo y forks relacionados
- Pasos para ejecutar la UI de Streamlit
python3 -m venv venvsource venv/bin/activatepip3 install -r requirements.txtexport GROQ_API_KEY=gsk...streamlit run app.py
- Pasos para ejecutar la UI de Gradio
cd gradiopip3 install -r requirements.txtpython3 app.py
- Forks y demos relacionados
- Hugging Face Spaces Demo
- Mult1: genera cadenas de razonamiento similares a o1 usando varios proveedores de IA
- thinkR: implementa Chain of Thought similar a o1 con LLM locales en R
1 comentarios
Opiniones de Hacker News
Esto no es correcto en absoluto y es bastante disparatado. Es simplemente ejecutar una cadena de pensamiento dentro de un bucle.
Tree of Thoughts es un método más sofisticado; ver el artículo: https://arxiv.org/pdf/2305.10601
Desde hace tiempo había indicios de que OpenAI hacía búsqueda en árbol, y tanto la contratación de Noam Brown como su trabajo previo apuntaban a eso. Q claramente parece una búsqueda en árbol tipo A*. Construir un árbol con algo como CoT y buscar dentro de él la solución óptima es precisamente el razonamiento de Sistema 2.
Pedirle al modelo que piense paso a paso no desbloquea un razonamiento como el de o1. Es un truco viejo que ya se usaba con GPT-3 en 2020, y si fuera así de simple, OpenAI no habría tardado tanto en lanzarlo.
Además, algunas partes del prompt pueden ser contraproducentes. Instrucciones como “reconoce tus limitaciones como LLM y lo que puedes/no puedes hacer” probablemente hagan que el modelo se vuelva demasiado cauteloso y produzca rechazos incorrectos, ya que un LLM tampoco conoce bien sus propios límites.
DeepMind se enfoca más en la investigación y la publicación de artículos, pero eso la pone en desventaja en un entorno competitivo donde OpenAI y Anthropic pueden tomar los resultados de los artículos y no devolver nada a la comunidad de investigación.
Es posible que durante el entrenamiento lo hayan expandido con árboles para aprender un razonamiento más robusto, pero en inferencia al final se reduce a un modelo Transformer convencional.
Todavía me da mucha risa la idea de escribir todo en mayúsculas para “enfatizar la importancia de la instrucción y mejorar el seguimiento del prompt”.
Me pregunto si la primera persona que haga funcionar una AGI se dará cuenta de que la confiabilidad del LLM supera el umbral cuando dice en mayúsculas: “la vida de mi mascota depende de la respuesta”.
La innovación de o1 no es la cadena de pensamiento en sí. Está en que, en vez de simplemente fingir, enseñaron al modelo a hacer bien CoT con retroalimentación humana a gran escala.
Solo con ingeniería de prompts no se puede alcanzar el rendimiento de o1.
Aunque quienes hablan de temas STEM suelen ser relativamente inteligentes, también hay muchos estudiantes con malas calificaciones preguntando por sus tareas. Para obtener salidas de mayor inteligencia, quizá haya que criticar y excluir más las fallas de las respuestas de baja inteligencia, y preferir las respuestas de alta inteligencia. O entrenar con más fuerza sobre libros de texto, etc. La clave también está en cómo rechazar errores y si entrenar con datos sintéticos generados sin razonamientos erróneos.
Quizá, sin que lo sepamos, estén haciendo funcionar o1 con enrutamiento de modelos e ingeniería de prompts.
Si simplemente se tratara de ingeniería de prompts y múltiples pasadas de inferencia, querrían mantenerlo como secreto competitivo mientras envían a los desarrolladores open source en direcciones equivocadas o los mantienen especulando sobre cómo replicar Q-Star.
Esto parece el CoT típico que se viene usando desde hace un tiempo. o1 aprovecha mucho mejor la cadena de pensamiento porque fue entrenado por refuerzo con una política desconocida.
Se ve bien. Yo hice algo parecido en optillm: https://github.com/codelion/optillm
Se puede hacer con cualquier LLM y usar varias técnicas de optimización, incluidas cot_reflection, búsqueda de árbol Monte Carlo, plansearch y moa.
Siempre estoy buscando una definición de “razonamiento”. Si encuentro una buena, creo que se puede crear un sistema que resuelva el “razonamiento” combinando el pensamiento difuso al estilo LLM con algoritmos clásicos.
Problemas en los que los LLM no pueden razonar, como planificar, contar letras o hacer razonamiento deductivo, son fáciles para los algoritmos clásicos. Necesitamos una forma de dividir el proceso de pensamiento en dos partes y ejecutar cada una en el modelo adecuado.
Hace dos siglos no había computadoras, así que los humanos tenían que hacerlo todo. Antes de sacar el código, primero hay que llegar a ese nivel.
Lo modifiqué para que se ejecute 100% local con ollama:8b: https://github.com/punnerud/g1
Todavía no actualicé el Readme.
Como referencia, esto es solo un prompt de sistema, no un modelo afinado.
“Prompt: ¿cuál es mayor, .9 o .11?”
“Resultado: .9 es mayor que .11”
Por fin rompimos la barrera del versionado semántico.
Por diversión, hice un fork del proyecto para ejecutar Llama-3.1 7B u otros modelos localmente con Ollama.
No acierta el problema de strawberry, pero sí logra descubrir que 0.9 es mayor.
https://github.com/esoltys/o1lama