contextos
Um artigo recente intitulado Search-R1: treinamento de LLMs para raciocinar e aproveitar os mecanismos de pesquisa com aprendizado por reforço Tese sobre o tema "O futuro das Nações Unidas" (arxiv.org/pdf/2503.09516) tem atraído muita atenção. O artigo propõe uma nova maneira de treinar modelos de linguagem grandes (LLMs) usando o aprendizado por reforço para raciocinar e explorar mecanismos de pesquisa. Vale a pena observar que algumas das ideias do artigo são semelhantes às desenvolvidas pela equipe da Qwen em QwQ-32B A exploração no modelo coincide.
O QwQ-32B da Alibaba, lançado recentemente (qwenlm.github.io/zh/blog/qwq-32b/), integra recursos relacionados ao agente no modelo de raciocínio. Esses recursos permitem que o modelo pense de forma crítica ao usar a ferramenta e adapte o processo de raciocínio com base no feedback do ambiente. Na pasta do modelo QwQ-32B no diretório added_tokens.json
você pode ver os tokens especiais adicionados para chamadas e respostas de ferramentas:
{
"": 151668,
"": 151658,
"": 151666, "": 151667,
"": 151667.
"": 151665
}
Neste documento, usaremos o Agentic RAG Como exemplo, são demonstrados os recursos do modelo QwQ-32B em termos de chamada de ferramentas.
RAG autêntico vs. RAG tradicional
Para entender melhor os benefícios do RAG Autêntico, primeiro precisamos distinguir entre o RAG Autêntico e o paradigma de prática RAG predominante atualmente:
- RAG tradicionalA grande maioria dos projetos RAG atuais são essencialmente fluxos de trabalho, ou seja, sistemas que orquestram LLMs e ferramentas por meio de caminhos de código predefinidos. Esse fluxo de trabalho artificialmente predefinido e "escrito até a morte" consiste em muitas partes inter-relacionadas, mas frágeis, como roteamento, fragmentação, reordenação, interpretação de consultas, expansão de consultas, contextualização de fontes e engenharia de pesquisa.
- desvantagensÉ difícil cobrir todos os casos extremos em um fluxo de trabalho orquestrado por humanos. Especialmente em cenários complexos que exigem várias rodadas de recuperação, o efeito é mais limitado.
- RAG autênticoAbordagem de ponta a ponta: Uma abordagem de ponta a ponta é usada para simplificar o processo. Basta equipar o modelo com uma ferramenta de API para recuperação em rede (a API da Tavily foi usada neste caso, com uma certa quantidade de créditos gratuitos) e fazer todo o restante do trabalho de forma autônoma pelo modelo, incluindo, entre outros:
- Intenção de entender (julgar se a rede é necessária)
- Reescrever ou dividir a pergunta
- chamada de interface
- Coreografia do processo (incluindo se e como realizar buscas em várias etapas)
- citar algo como fonte de algo
- ...
Em poucas palavras, o conceito central do RAG Autêntico é:Menos estrutura, mais inteligência, menos é mais.
exatamente como Antrópica Definição do modelo de agente: semelhante à Deep Search, os agentes devem executar a tarefa-alvo internamente e "direcionam dinamicamente seus próprios processos e o uso de ferramentas para controlar a maneira como a tarefa é realizada".
Processo geral
A figura a seguir ilustra o fluxo geral do Agentic RAG:
- Adapte as perguntas dos usuários para solicitar modelos de palavras.
- Chama o modelo para gerar um novo token. Se o processo de geração não resultar em um
...
e, em seguida, o resultado do retorno é emitido diretamente. - No caso de
...
indica que o modelo iniciou uma solicitação de chamada de ferramenta durante o processo de raciocínio. Analisando essa solicitação, executandopesquisa na web
e agrupa os resultados da chamada de interface em...
emendados no contexto do macromodelo e solicitados novamente para a geração do macromodelo. - Repita as etapas acima até que não haja mais
(ou o limite de solicitação é atingido) ou a presença de
.
O processo é essencialmente o mesmo que o descrito no artigo Search-R1:
Principais pontos técnicos
- Modelos de palavras de taco::
user_question = input('Digite sua pergunta:')
max_search_times = 5
prompt = f"""Você é Qwen QwQ, uma IA curiosa criada para geração aumentada de retorno.
Você está em 2025 e a data atual é {date.today()}.
Você tem acesso à ferramenta web_search para recuperar informações relevantes e ajudar a responder às perguntas dos usuários.
Você pode usar a ferramenta web_search até {max_search_times} vezes para responder à pergunta de um usuário, mas tente ser eficiente e usar o mínimo possível.
Veja a seguir algumas diretrizes.
- Use web_search para consultas gerais na Internet, como encontrar eventos atuais ou informações factuais.
- Sempre forneça uma resposta final de forma clara e concisa, com citações de qualquer informação obtida na Internet.
- Se você achar que precisa usar uma ferramenta, formate sua resposta como uma chamada de ferramenta com `action` e `action_input` dentro de ... , da seguinte forma:\n\n{{ "action": "web_search", "action_input": {{ "query": "current stock price of Tesla" }} }}\n .
- Depois de usar uma ferramenta. continuar seu raciocínio com base no resultado da web_search em ... .
- Lembre-se de que, se você precisar de um web_search de várias voltas para encontrar informações relevantes, certifique-se de realizar todas as tarefas de pesquisa antes de fornecer uma resposta final.
---
Pergunta do usuário:{user_question}""""
- Sinais de parada personalizados::
Quando for detectado que o modelo acionou um processo de geração autorregressivo durante a
(. *?) \s*$
A geração é interrompida após o formato (correspondência de expressão regular):
from transformers import (
AutoModelForCausalLM,
AutoTokenizer, AutoModelForCausalLM, AutoTokenizer, StoppingCriteria
StoppingCriteria, StoppingCriteriaList, StoppingCriteriaList, StoppingCriteriaList
StoppingCriteriaList
)
importar torch
import re
tool_call_regex = r"(. *?) \s*$"
end_regex = r"\s*$"
Monitoramento simultâneo do #: ou
class RegexStoppingCriteria(StoppingCriteria).
def __init__(self, tokeniser, patterns).
self.patterns = patterns
self.tokenizer = tokenizer
def __call__(self, input_ids: torch.LongTensor, scores: torch.FloatTensor, **kwargs) -> bool.
texto_decodificado = self.tokenizer.decode(input_ids[0])
for pattern in self.patterns:: if re.search(pattern, decode).decode(input_ids[0])
if re.search(pattern, decoded_text, re.DOTALL):: if re.search(pattern, decoded_text, re.DOTALL).
return True
return False
stopping_criteria = StoppingCriteriaList([)
RegexStoppingCriteria(
tokenizer, [tool_call_criteria], [stopping_criteria
patterns=[tool_call_regex, end_regex]
)
])
#model.generate(... , stopping_criteria=stopping_criteria) # add stopping_criteria
- API de pesquisa na Web::
A API de pesquisa usada nessa prática é a Tavily API, que oferece uma certa quantidade de créditos gratuitos para facilitar a experimentação e a replicação. A Tavily API permite que os desenvolvedores integrem a funcionalidade de pesquisa na Web em seus aplicativos por meio de chamadas simples de API.
Código de Prática
Para obter o código de prática detalhado, consulte o link a seguir:
Casos de teste
Problemas de testeDescrição: Por favor, forneça mais informações sobre o modelo QwQ-32B lançado recentemente em código aberto pela Ali.
Gerar resultados(consulte o bloco de notas para ver os resultados completos)
Como pode ser visto nos resultados, o modelo de inferência realiza de forma autônoma a compreensão da intenção (determinando se uma pesquisa em rede é necessária) e a geração de palavras-chave de pesquisa (reescrita ou divisão de perguntas). O modelo também leva em conta possíveis cenários de pesquisa em várias rodadas. Após acionar um pesquisa na web
Em seguida, o modelo gera um relatório final com base nos resultados da pesquisa.
Nesse caso, o modelo concluiu apenas uma chamada à interface de pesquisa. Isso pode ser devido à simplicidade do problema do caso ou ao fato de que o modelo básico ainda não tem capacidade suficiente para acionar pesquisas complexas em várias rodadas. Isso também mostra que, para utilizar totalmente o potencial do modelo como um corpo inteligente, ainda é necessário consultar o Search-R1 para pós-treinamento e ajuste fino direcionado.
No entanto, com base nos recursos já demonstrados pelo modelo QwQ-32B, a combinação de dados de retreinamento sintéticos (ou classificados manualmente) bem projetados e o treinamento de reforço ou SFT em cenários segmentados, além de mascarar a saída retornada pela resposta da interface da ferramenta token Espera-se que essa rota de retreinamento se torne a principal corrente de desenvolvimento e implantação de inteligência no futuro, já que as perdas correspondentes podem ser pré-consideradas para uma variedade de ações e casos-limite, tornando a implantação mais simples e eliminando a necessidade de orquestração humana do fluxo de trabalho de design. O retreinamento permite a pré-consideração de várias ações e casos-limite, facilitando a implementação e eliminando a necessidade de fluxos de trabalho de design orquestrados por humanos. A seção 3.1 do documento Search-R1 descreve em detalhes o "Loss Masking for Retrieved Tokens" Tecnologia. Por meio do uso do PPO e do GRPO em que os tokens recuperados são mascarados por perdas, o Search-R1 otimiza o LLM para gerar tokens, aumentando a capacidade do modelo de interagir com mecanismos de pesquisa e realizar inferências.
Além disso, o Search-R1 oferece suporte à recuperação e à inferência em várias rodadas (Seção 3.2 "Geração de texto com chamada de mecanismo de pesquisa multi-turnos intercalados" na tese) por meio do responder cantando
e coloca o conteúdo recuperado no
responder cantando
entre. A saída da resposta final, por outro lado, usa o
responder cantando
.