[Reimpresión] Capacidad de llamada de herramientas de QwQ-32B y aplicación Agentic RAG

contextos

Un artículo reciente titulado Search-R1: Entrenamiento de LLM para razonar y aprovechar motores de búsqueda con aprendizaje por refuerzo Tesis sobre el tema "El futuro de las Naciones Unidas" (arxiv.org/pdf/2503.09516) ha atraído mucha atención. El artículo propone una nueva forma de entrenar grandes modelos lingüísticos (LLM) utilizando el aprendizaje por refuerzo para razonar y explotar motores de búsqueda. Cabe señalar que algunas de las ideas del artículo son similares a las desarrolladas por el equipo de Qwen en QwQ-32B La exploración en el modelo coincide.

El recientemente lanzado QwQ-32B de Alibaba (qwenlm.github.io/zh/blog/qwq-32b/) integra capacidades relacionadas con los agentes en el modelo de razonamiento. Estas capacidades permiten al modelo pensar de forma crítica mientras utiliza la herramienta y adaptar el proceso de razonamiento en función de la información recibida del entorno. En la carpeta del modelo QwQ-32B en la carpeta added_tokens.json puede ver los tokens especiales añadidos para las llamadas y respuestas de las herramientas:

{
"</think>": 151668,
"</tool_call>": 151658,
"</tool_response>": 151666,
"<think>": 151667,
"<tool_call>": 151657,
"<tool_response>": 151665
}

En este documento, utilizaremos Agentic RAG Como ejemplo, se demuestran las capacidades del modelo QwQ-32B en términos de invocación de herramientas.

 

GAR Agentico vs. GAR Tradicional

Para comprender mejor las ventajas de la GAR Agenética, primero tenemos que distinguir entre la GAR Agenética y el paradigma de práctica de la GAR que prevalece en la actualidad:

  • GAR tradicionalLa gran mayoría de los proyectos GAR actuales son esencialmente flujos de trabajo, es decir, sistemas que orquestan LLM y herramientas a través de rutas de código predefinidas. Este flujo de trabajo artificialmente predefinido y "escrito hasta la muerte" consta de muchas partes interrelacionadas pero frágiles, como el enrutamiento, la fragmentación, la reordenación, la interpretación de consultas, la expansión de consultas, la contextualización de fuentes y la ingeniería de búsqueda.
    • inconvenientesEl efecto de la recuperación: es difícil cubrir todos los casos en un flujo de trabajo orquestado por humanos. Especialmente en escenarios complejos que requieren múltiples rondas de recuperación, el efecto es más limitado.
  • RAG AgenticoRacionalizar el proceso con un enfoque integral. Basta con dotar al modelo de una herramienta API para la recuperación en red (en el caso de este documento, utilizando la Tavily API, con una cierta cantidad de créditos gratuitos), el resto del trabajo lo hace todo el propio modelo, entre otras cosas:
    • Intención de comprender (juzgar si es necesario trabajar en red)
    • Reescribir o dividir la pregunta
    • llamada de interfaz
    • Coreografía del proceso (incluyendo si se deben realizar búsquedas de varios pasos y cómo hacerlo)
    • citar algo como fuente de algo
    • ...

En pocas palabras, la filosofía central de Agentic RAG es:Menos estructura, más inteligencia, Menos es Más.

precisamente como Antrópico Definición del modelo de Agente: De forma similar a la Búsqueda Profunda, los Agentes deben realizar la tarea objetivo internamente, y "dirigen dinámicamente sus propios procesos y el uso de herramientas, controlando la forma en que se realiza la tarea".

Proceso general

La siguiente figura ilustra el flujo general de Agentic RAG:

[转载]QwQ-32B 的工具调用能力及 Agentic RAG 应用
  1. Adaptar las preguntas de los usuarios a las plantillas de Word.
  2. Llama al modelo para generar un nuevo token. si el proceso de generación no da como resultado un <tool_call> ... </tool_call>el resultado de retorno se emite directamente.
  3. En caso de <tool_call> ... </tool_call>indica que el modelo ha iniciado una solicitud de llamada a una herramienta durante el proceso de inferencia. El análisis sintáctico de esta solicitud, la ejecución de web_searchy envuelve los resultados de la llamada a la interfaz en <tool_response> ... </tool_response> formato, empalmado en el contexto del macromodelo, y solicitado de nuevo para la generación del macromodelo.
  4. Repita los pasos anteriores hasta que no haya más <tool_call>(o se alcanza el límite de peticiones) o la presencia de <|im_end|>.

El proceso es esencialmente el mismo que el descrito en el documento Search-R1:

[转载]QwQ-32B 的工具调用能力及 Agentic RAG 应用

Puntos técnicos clave

  • Plantillas de palabras clave::
user_question = input('请输入你的问题:')
max_search_times = 5
prompt = f"""You are Qwen QwQ, a curious AI built for retrival augmented generation.
You are at 2025 and current date is {date.today()}.
You have access to the web_search tool to retrival relevant information to help answer user questions.
You can use web_search tool up to {max_search_times} times to answer a user's question, but try to be efficient and use as few as possible.
Below are some guidelines:
- Use web_search for general internet queries, like finding current events or factual information.
- Always provide a final answer in a clear and concise manner, with citations for any information obtained from the internet.
- If you think you need to use a tool, format your response as a tool call with the `action` and `action_input` within <tool_call>...</tool_call>, like this:\n<tool_call>\n{{ "action": "web_search", "action_input": {{ "query": "current stock price of Tesla" }} }}\n</tool_call>.
- After using a tool, continue your reasoning based on the web_search result in <tool_response>...</tool_response>.
- Remember that if you need multi-turn web_search to find relevant information, make sure you conduct all search tasks before you provide a final answer.
---
User Question:{user_question}"""
  • Señales de stop personalizadas::

    Cuando se detecta que el modelo ha desencadenado un proceso de generación autorregresivo durante la <tool_call>(.*?)</tool_call>\s*$ La generación se detiene después del formato (coincidencia de expresión regular):

from transformers import (
AutoModelForCausalLM,
AutoTokenizer,
StoppingCriteria,
StoppingCriteriaList
)
import torch
import re
tool_call_regex = r"<tool_call>(.*?)</tool_call>\s*$"
end_regex = r"<\|im_end\|\>\s*$"
# 同时监测: <tool_call> 或 <|im_end|>
class RegexStoppingCriteria(StoppingCriteria):
def __init__(self, tokenizer, patterns):
self.patterns = patterns
self.tokenizer = tokenizer
def __call__(self, input_ids: torch.LongTensor, scores: torch.FloatTensor, **kwargs) -> bool:
decoded_text = self.tokenizer.decode(input_ids[0])
for pattern in self.patterns:
if re.search(pattern, decoded_text, re.DOTALL):
return True
return False
stopping_criteria = StoppingCriteriaList([
RegexStoppingCriteria(
tokenizer,
patterns=[tool_call_regex, end_regex]
)
])
#model.generate(..., stopping_criteria=stopping_criteria) # 加上停止符
  • API de búsqueda web::

    La API de búsqueda utilizada en esta práctica es la API de Tavily, que ofrece una cierta cantidad de créditos gratuitos para facilitar la experimentación y la replicación.La API de Tavily permite a los desarrolladores integrar la funcionalidad de búsqueda web en sus aplicaciones mediante sencillas llamadas a la API.

Código de buenas prácticas

Para obtener información detallada sobre el código de prácticas, consulte el siguiente enlace:

Capítulo de replicación de DeepSearch: un primer vistazo a la función ToolCall de QwQ-32B, con Agentic RAG como ejemplo.ipynb

Casos de prueba

Cuestiones relativas a las pruebas: Por favor, denme más información sobre el modelo QwQ-32B recientemente publicado en código abierto por Ali.

Generar resultados(véanse los resultados completos en el cuaderno)

[转载]QwQ-32B 的工具调用能力及 Agentic RAG 应用[转载]QwQ-32B 的工具调用能力及 Agentic RAG 应用[转载]QwQ-32B 的工具调用能力及 Agentic RAG 应用

Como puede verse en los resultados, el modelo de inferencia realiza de forma autónoma la comprensión de la intención (determinando si es necesaria una búsqueda en red) y la generación de palabras clave de búsqueda (reescritura o división de preguntas). El modelo también tiene en cuenta posibles escenarios de búsqueda en varias rondas. Tras desencadenar una web search Después, el modelo genera un informe final basado en los resultados de la búsqueda.

En este caso, el modelo sólo completó una llamada a la interfaz de búsqueda. Esto puede deberse a la simplicidad del problema del caso, o al hecho de que el modelo base aún no es lo suficientemente capaz de desencadenar búsquedas complejas de varias rondas. Esto también demuestra que, para aprovechar plenamente el potencial del modelo como organismo inteligente, sigue siendo necesario remitirse a Search-R1 para el entrenamiento posterior y el ajuste específico.

Sin embargo, a partir de las capacidades ya demostradas por el modelo QwQ-32B, la combinación de datos de reentrenamiento sintéticos bien diseñados (o clasificados manualmente), y el reentrenamiento de refuerzo o SFT en escenarios segmentados, y el enmascaramiento de la salida devuelta por la respuesta de la interfaz de la herramienta ficha Se espera que esta ruta de reentrenamiento se convierta en la corriente principal del futuro desarrollo y despliegue de inteligencia, ya que las pérdidas correspondientes pueden preconsiderarse para una variedad de acciones y casos límite, lo que simplifica el despliegue y elimina la necesidad de orquestación humana del flujo de trabajo de diseño. El reentrenamiento permite la preconsideración de diversas acciones y casos límite, lo que simplifica el despliegue y elimina la necesidad de flujos de trabajo de diseño orquestados por humanos. la sección 3.1 del documento Search-R1 describe en detalle el "Enmascaramiento de pérdidas para Retrieved Fichas"Tecnología. Mediante el uso de la PPO y GRPO en el que los tokens recuperados están enmascarados por pérdidas, Search-R1 optimiza el LLM para generar tokens, mejorando la capacidad del modelo para interactuar con los motores de búsqueda y realizar inferencias.

Además, Search-R1 admite la recuperación y la inferencia multirronda (Sección 3.2 "Generación de texto con llamada al motor de búsqueda multirronda intercalada" de la tesis) a través de la función <search> responder cantando </search> y coloca el contenido recuperado en el archivo <information> responder cantando </information> entre. La salida de la respuesta final, por otra parte, utiliza el <answer> responder cantando </answer>.

© declaración de copyright

Puestos relacionados

Sin comentarios

Debe iniciar sesión para participar en los comentarios.
Acceder ahora
ninguno
Sin comentarios...