[Перепечатка] Возможность вызова инструмента QwQ-32B и применение агентурного RAG

контексты

Недавняя статья под названием Search-R1: обучение LLM рассуждать и использовать поисковые системы с помощью обучения с подкреплением Диссертация на тему "Будущее Организации Объединенных Наций" (arxiv.org/pdf/2503.09516) привлекло большое внимание. В статье предлагается новый способ обучения больших языковых моделей (Large Language Models, LLM) с использованием обучения с подкреплением для осмысления и использования поисковых систем. Стоит отметить, что некоторые идеи, изложенные в статье, схожи с теми, что были разработаны командой Qwen в QwQ-32B Исследования на модели совпадают.

Недавно выпущенная компанией Alibaba система QwQ-32B (qwenlm.github.io/zh/blog/qwq-32b/) интегрирует в модель рассуждений возможности, связанные с агентами. Эти возможности позволяют модели критически мыслить во время использования инструмента и адаптировать процесс рассуждений на основе обратной связи с окружением. В папке модели QwQ-32B в каталоге added_tokens.json можно увидеть специальные маркеры, добавленные для вызовов инструментов и ответов на них:

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

В этой статье мы будем использовать агентурный RAG В качестве примера демонстрируются возможности модели QwQ-32B по вызову инструмента.

 

Агентский RAG против традиционного RAG

Чтобы лучше понять преимущества агентурного RAG, сначала нужно провести различие между агентурным RAG и преобладающей в настоящее время парадигмой практики RAG:

  • Традиционный RAG: Подавляющее большинство проектов RAG сегодня - это, по сути, рабочие процессы, т.е. системы, которые организуют LLM и инструменты через заранее определенные пути кода. Этот искусственно предопределенный, "написанный до смерти" рабочий процесс состоит из множества взаимосвязанных, но хрупких частей, таких как маршрутизация, разбиение на части, переупорядочивание, интерпретация запросов, расширение запросов, контекстуализация источников и поисковая инженерия.
    • недостатки: Трудно охватить все угловые случаи в рабочем процессе, организованном человеком. Особенно в сложных сценариях, требующих нескольких раундов поиска, эффект более ограничен.
  • Агенты RAG: Упростите процесс с помощью сквозного подхода. Просто оснастите модель API-инструментом для сетевого поиска (в случае данной статьи - с помощью Tavily API, с определенным количеством бесплатных кредитов), остальная работа выполняется самой моделью, включая, но не ограничиваясь этим:
    • Намерение понять (судить о необходимости сетевого взаимодействия)
    • Переформулируйте или разделите вопрос
    • вызов интерфейса
    • Хореография процесса (включая вопрос о том, нужно ли проводить многоэтапные поиски и как это делать)
    • ссылаться на что-л. как на источник чего-л.
    • ...

Проще говоря, основная философия Agentic RAG заключается в следующем:Меньше структуры, больше интеллекта, Меньше - это больше.

точно так же, как Антропология Определение модели агента: подобно Deep Search, агенты должны выполнять целевую задачу своими силами, и они "динамически направляют свои собственные процессы и используют инструменты для управления выполнением задачи".

Общий процесс

На следующем рисунке показан общий ход работы Agentic RAG:

[转载]QwQ-32B 的工具调用能力及 Agentic RAG 应用
  1. Адаптируйте вопросы пользователей для подсказки шаблонов слов.
  2. Вызывает модель для генерации нового токена. Если процесс генерации не приводит к <tool_call> ... </tool_call>, то результат возврата выводится напрямую.
  3. В случае <tool_call> ... </tool_call>то это указывает на то, что модель инициировала запрос вызова инструмента в процессе рассуждения. Разбор этого запроса, выполнение web_searchи оборачивает результаты вызова интерфейса в <tool_response> ... </tool_response> формат, вставляется в контекст макромодели и снова запрашивается для генерации макромодели.
  4. Повторяйте описанные выше действия до тех пор, пока не останется ни одного <tool_call>(или достигнут лимит запросов) или наличие <|im_end|>.

По сути, этот процесс аналогичен тому, что описан в документе Search-R1:

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

Ключевые технические моменты

  • Шаблоны слов для кия::
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}"""
  • Индивидуальные знаки остановки::

    Если обнаружено, что модель запустила процесс генерации авторегрессии во время <tool_call>(.*?)</tool_call>\s*$ Генерация останавливается после формата (совпадения с регулярным выражением):

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 веб-поиска::

    Поисковый API, используемый в данной практике, - это API Tavily, который предоставляет определенное количество бесплатных кредитов, чтобы облегчить эксперименты и тиражирование. API Tavily позволяет разработчикам интегрировать функции веб-поиска в свои приложения с помощью простых вызовов API.

Практический кодекс

Подробный практический кодекс можно найти по следующей ссылке:

Глава о репликации в DeepSearch: первый взгляд на функцию QwQ-32B ToolCall на примере Agentic RAG.ipynb

Тестовые примеры

Вопросы тестирования: Пожалуйста, дайте мне больше информации о модели QwQ-32B, недавно выпущенной Ali с открытым исходным кодом.

Получение результатов: (полные результаты см. в блокноте)

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

Как видно из результатов, модель умозаключений автономно выполняет понимание намерений (определение необходимости сетевого поиска) и генерацию поисковых ключевых слов (переписывание или разбиение вопросов). Модель также учитывает возможные сценарии многораундового поиска. После запуска web search После этого модель генерирует итоговый отчет на основе результатов поиска.

В этом случае модель выполнила только один вызов интерфейса поиска. Это может быть связано как с простотой задачи, так и с тем, что базовая модель еще не способна запускать сложные многораундовые поиски. Это также показывает, что для полного использования потенциала модели как интеллектуального органа все еще необходимо обращаться к Search-R1 для последующего обучения и целенаправленной настройки.

Однако, судя по возможностям, уже продемонстрированным моделью QwQ-32B, сочетание хорошо продуманных синтетических (или отсортированных вручную) данных для переобучения, повторного обучения с усилением или SFT в сегментированных сценариях, а также маскировка выходных данных, возвращаемых интерфейсом инструмента. жетон Ожидается, что этот путь переобучения станет основным в будущих разработках и развертывании интеллекта, поскольку соответствующие потери могут быть заранее учтены для различных действий и граничных случаев, что упрощает развертывание и устраняет необходимость в человеческой оркестровке рабочего процесса проектирования. Переобучение позволяет предварительно рассмотреть различные действия и граничные случаи, что упрощает развертывание и устраняет необходимость в человеческой оркестровке рабочих процессов проектирования. В разделе 3.1 документа Search-R1 подробно описывается "Маскировка потерь для извлеченных данных". Жетоны" Технологии. Благодаря использованию PPO и GRPO в которых найденные маркеры маскируются от потерь, Search-R1 оптимизирует LLM для генерации маркеров, повышая способность модели взаимодействовать с поисковыми системами и делать выводы.

Кроме того, Search-R1 поддерживает многораундовый поиск и вывод (раздел 3.2 "Генерация текста с чередующимся вызовом многораундовой поисковой системы" в диссертации) через <search> ответить пением </search> триггер и помещает полученное содержимое в <information> ответить пением </information> между. В выводе окончательного ответа, с другой стороны, используется <answer> ответить пением </answer>.

© заявление об авторских правах

Похожие статьи

Нет комментариев

Вы должны войти в систему, чтобы участвовать в комментариях!
Войти сейчас
нет
Нет комментариев...