g1 - Gerando uma cadeia de raciocínio semelhante ao o1 usando Llama-3.1 70B na Groq
(github.com/bklieger-groq)- g1 é um protótipo inicial que usa Llama-3.1 70B na Groq e uma estratégia de prompt para gerar uma cadeia de raciocínio semelhante ao o1, em que o LLM “pensa” passo a passo
- Diferente do OpenAI o1, ele mostra ao usuário todos os tokens de raciocínio e, embora use um modelo open source, não é uma reprodução completa nem uma comparação direta com o o1, mas sim um experimento de raciocínio baseado em prompt
- Em cada etapa, o modelo escolhe entre continuar para a próxima etapa de raciocínio ou fornecer a resposta final, e foi projetado para retornar JSON com título e conteúdo em cada etapa
- O prompt exige no mínimo 3 etapas, exploração de alternativas, verificação da possibilidade de erro próprio e uso de pelo menos 3 métodos, tendo mostrado cerca de 70% de acerto no problema do Strawberry (n=10), contra 0% do Llama-3.1-70B sozinho e 30% do ChatGPT-4o
- Nos testes iniciais, apresentou 60% a 80% de acerto em problemas simples de lógica, mas a precisão ainda não foi avaliada oficialmente e o g1 também não é perfeito
O problema que o g1 tenta resolver
- g1 é um protótipo inicial que busca melhorar a capacidade de raciocínio de LLMs apenas com estratégia de prompt
- O objetivo é fazer o LLM resolver problemas de lógica com os quais normalmente tem dificuldade usando uma cadeia de raciocínio semelhante ao o1
- As diferenças em relação ao OpenAI o1 são explicitadas
- o g1 mostra ao usuário todos os tokens de raciocínio
- o g1 usa um modelo open source
- o g1 não é uma reprodução completa nem uma comparação de desempenho com o o1
- o OpenAI o1 funciona aprendendo raciocínio Chain of Thought por meio de aprendizado por reforço em larga escala, alcançando desempenho de ponta em problemas complexos de nível de doutorado
Como funciona
- O g1, baseado no Llama3.1-70b, gera uma cadeia de raciocínio próxima de um Chain of Thought dinâmico
- Cada etapa do raciocínio é mostrada ao usuário, e cada uma recebe um título
- Em cada etapa, o modelo escolhe uma de duas opções
- continuar para a próxima etapa de raciocínio
- fornecer a resposta final
- O prompt de sistema inclui instruções para levar o modelo a raciocinar melhor
- explorar respostas alternativas
- chegar à resposta por pelo menos 3 métodos
- questionar soluções preliminares anteriores
- considerar as limitações dos LLMs
Estratégia de prompt
- O prompt atribui ao modelo o papel de um AI assistant especialista em explicar reasoning passo a passo
- Cada etapa deve responder em formato JSON com as chaves
title,contentenext_action- o valor de
next_actionécontinueoufinal_answer
- o valor de
- As instruções destacadas em maiúsculas buscam aumentar a aderência ao prompt
- usar o máximo possível de etapas de raciocínio, mas no mínimo 3 etapas
- reconhecer o que é e o que não é possível fazer como LLM
- explorar respostas alternativas e considerar onde o próprio raciocínio pode estar errado
- ao dizer que vai revisar, revisar de fato usando uma abordagem diferente
- chegar à resposta por pelo menos 3 métodos
- usar boas práticas
- Depois de adicionar o problema como mensagem do usuário, uma frase padrão inicial é inserida como mensagem do assistant para iniciar a geração
Exemplos e resultados iniciais
- O g1 trata de problemas simples de lógica, difíceis de resolver sem prompt, como o problema do Strawberry, por exemplo: “quantos Rs há em strawberry?”
- Foram apresentados números iniciais para esse problema
- g1: cerca de 70% de acerto, n=10
- Llama-3.1-70B sem prompt: 0% de acerto
- ChatGPT-4o: 30% de acerto
- Nos testes iniciais, o g1 resolveu com 60% a 80% de acerto problemas simples de lógica com os quais LLMs normalmente têm dificuldade
- A precisão ainda não foi avaliada oficialmente
- Os problemas de exemplo incluem
How many Rs are in strawberry?eWhich is larger, .9 or .11?
Como executar e forks relacionados
- Procedimento para executar a UI em Streamlit
python3 -m venv venvsource venv/bin/activatepip3 install -r requirements.txtexport GROQ_API_KEY=gsk...streamlit run app.py
- Procedimento para executar a UI em Gradio
cd gradiopip3 install -r requirements.txtpython3 app.py
- Forks e demos relacionados
- Hugging Face Spaces Demo
- Mult1: gera uma cadeia de raciocínio semelhante ao o1 usando vários provedores de IA
- thinkR: implementa um Chain of Thought semelhante ao o1 em R com LLM local
1 comentários
Comentários do Hacker News
Isso não está nada certo e é bem sem sentido. É basicamente rodar uma cadeia de pensamento dentro de um loop.
Tree of Thoughts é um método mais sofisticado; veja o artigo em https://arxiv.org/pdf/2305.10601
Já havia indícios há muito tempo de que a OpenAI fazia busca em árvore, e a contratação de Noam Brown, junto com seus trabalhos anteriores, também apontava nessa direção. Q parece claramente ser uma busca em árvore do tipo A*. Criar uma árvore com algo como CoT e buscar a solução ótima dentro dela é justamente o raciocínio de Sistema 2.
Mandar o modelo pensar passo a passo não libera um raciocínio como o do o1. Esse é um truque antigo, usado até no GPT-3 em 2020; se fosse tão simples, a OpenAI não teria levado tanto tempo para lançar.
Além disso, partes do prompt podem ter efeito contrário. Instruções como “reconheça suas limitações como LLM e o que você pode/não pode fazer” podem deixar o modelo cauteloso demais e gerar recusas incorretas, até porque um LLM não conhece bem suas próprias limitações.
A DeepMind foca mais em pesquisa e publicação de artigos, mas isso a coloca em desvantagem em um ambiente competitivo em que OpenAI e Anthropic podem aproveitar os resultados dos artigos sem devolver nada à comunidade de pesquisa.
É possível que durante o treinamento eles tenham expandido para árvores para aprender raciocínio mais robusto, mas na inferência isso acaba se reduzindo a um modelo Transformer comum.
Ainda acho engraçada demais a ideia de escrever tudo em maiúsculas para “enfatizar a importância da instrução e aumentar a aderência ao prompt”.
Fico me perguntando se a pessoa que ligar a primeira AGI vai perceber que a confiabilidade do LLM passa do limiar quando diz em MAIÚSCULAS que “a vida do meu animal de estimação depende da resposta”.
A inovação do o1 não é a cadeia de pensamento em si. Está em ensinar o modelo, com feedback humano em larga escala, a ser bom em CoT, em vez de apenas fingir.
Só com engenharia de prompt não dá para chegar ao desempenho do o1.
Por outro lado, quem fala sobre temas de STEM tende a ser mais inteligente, e também há muitos alunos com notas baixas perguntando sobre lição de casa misturados. Para obter saídas de maior inteligência, talvez seja preciso criticar e excluir as falhas de mais respostas de baixa inteligência e preferir respostas de alta inteligência. Ou treinar mais fortemente em livros didáticos e afins. Também é crucial como rejeitar erros e se treinar com dados sintéticos gerados sem raciocínio incorreto.
Talvez, sem sabermos, eles estejam fazendo o o1 funcionar com roteamento de modelos e engenharia de prompt.
Se for simplesmente engenharia de prompt e múltiplas rodadas de inferência, eles vão querer manter isso como segredo competitivo e mandar desenvolvedores open source para o caminho errado, ou fazê-los continuar especulando sobre como replicar o Q-Star.
Isso parece o CoT genérico que já vinha sendo usado há algum tempo. O o1 aproveita muito melhor a cadeia de pensamento porque foi treinado com aprendizado por reforço usando uma política desconhecida.
Parece bom. Eu também fiz algo parecido no optillm: https://github.com/codelion/optillm
Funciona com qualquer LLM e permite usar várias técnicas de otimização, incluindo cot_reflection, busca em árvore de Monte Carlo, plansearch e moa.
Estou sempre procurando uma definição de “raciocínio”. Minha visão é que, se encontrarmos uma boa definição, podemos criar sistemas que resolvam “raciocínio” combinando o pensamento nebuloso estilo LLM com algoritmos clássicos.
Problemas em que LLMs não raciocinam bem, como planejamento, contagem de letras e raciocínio dedutivo, são fáceis para algoritmos clássicos. Precisamos de uma forma de dividir o processo de pensamento em duas partes e executar cada uma no modelo adequado.
Dois séculos atrás não havia computadores, então humanos precisavam fazer tudo. Antes de recorrer ao código, é preciso primeiro chegar a esse nível.
Modifiquei para rodar 100% localmente com ollama:8b: https://github.com/punnerud/g1
Ainda não atualizei o Readme.
Para constar, isso é apenas um prompt de sistema, não um modelo ajustado por fine-tuning.
“Prompt: qual é maior, .9 ou .11?”
“Resultado: .9 é maior que .11”
Finalmente rompeu a barreira do versionamento semântico.
Bifurquei o projeto por diversão e fiz ele rodar localmente com Ollama usando Llama-3.1 7B ou outros modelos.
Ele não acerta o problema da strawberry, mas consegue perceber que 0.9 é maior.
https://github.com/esoltys/o1lama