Современные поисковые системы, основанные на Retrieval-Augmented Generation (RAG), часто справляются с простыми одношаговыми запросами, но пасуют перед сложными, многосоставными вопросами. Когда пользователю нужно найти информацию о влиянии изменения налогового законодательства на малый бизнес в конкретном регионе, классический RAG выдаёт либо общие статьи, либо фрагменты, не соединяя их в осмысленный ответ. Именно эту проблему решает T-Search — агентный подход к многошаговому поиску, разработанный командой Т-Банка. В этой статье мы разберём, как устроен T-Search, какие техники лежат в его основе и какие практические выводы можно сделать для собственных проектов.
Что такое T-Search и почему это не просто очередной RAG
T-Search — это агентная система поиска, которая не просто извлекает релевантные документы, но и способна планировать последовательность действий, уточнять запросы, переформулировать их и синтезировать ответ из нескольких источников. В отличие от классического RAG, где модель один раз обращается к индексу и генерирует ответ, T-Search выполняет многошаговый цикл: анализирует исходный запрос, разбивает его на подзадачи, для каждой подзадачи запускает поиск, оценивает полноту найденной информации и, если данных недостаточно, повторяет поиск с уточнёнными параметрами.
Авторы статьи на Habr подробно описывают архитектуру решения. Ключевая инновация — использование LLM (Large Language Model) не только для генерации ответа, но и для управления процессом поиска. Модель выступает в роли «агента-планировщика», который решает, какой шаг сделать следующим: уточнить запрос, выполнить поиск по новому критерию или завершить сбор данных и перейти к синтезу.
Архитектура многошагового агента: от запроса к ответу
Разберём архитектуру T-Search на примере типичного сценария. Пользователь задаёт вопрос: «Какие изменения в НДС произошли в 2025 году в России и как они повлияли на IT-компании?» Классический RAG попытается найти документы, содержащие слова «НДС», «2025», «IT-компании», и выдаст несколько статей, но не сможет построить связный анализ. T-Search действует иначе:
- Парсинг и декомпозиция запроса. Агент разбивает вопрос на подзадачи: найти текст закона об изменениях НДС в 2025 году; найти аналитические обзоры по влиянию на IT-сектор; найти официальные разъяснения Минфина.
- Планирование поиска. Для каждой подзадачи агент выбирает подходящий источник: для закона — «КонсультантПлюс» или официальный портал правовой информации, для аналитики — деловые СМИ, для разъяснений — сайт ФНС.
- Выполнение поиска. Агент запускает поиск по каждой подзадаче, извлекает фрагменты текста и оценивает их релевантность. Если найденный фрагмент неполный или содержит устаревшие данные, агент переформулирует запрос и повторяет поиск.
- Синтез ответа. После сбора достаточного объёма информации агент объединяет данные из разных источников, проверяет их непротиворечивость и генерирует итоговый ответ с цитированием.
Авторы статьи отмечают, что ключевой вызов — избежать «галлюцинаций» (генерации ложных фактов) и не терять контекст при длинных цепочках шагов. Для этого используется механизм «контекстного окна»: агент хранит не только последний ответ, но и историю всех предыдущих шагов, что позволяет не уходить в сторону.
Технические детали: как обучали агента
Обучение T-Search проходило в несколько этапов. На первом этапе была собрана обучающая выборка из 50 000 пар «запрос — идеальная последовательность шагов». Эти данные были размечены экспертами: для каждого сложного вопроса эксперты записывали, какие именно шаги нужно выполнить, в каком порядке, какие источники использовать и как переформулировать запросы при неудаче.
На втором этапе модель дообучалась на этой выборке с использованием supervised fine-tuning (SFT). Цель — научить модель предсказывать следующий шаг на основе текущего состояния (истории поиска). Авторы применяли стандартную архитектуру transformer, но с модификацией: в модель подавался не только текст запроса, но и структурированное представление предыдущих шагов в виде JSON-объекта.
Третий этап — reinforcement learning (RL) с человеческим фидбеком (RLHF). Модель генерировала последовательности шагов, а эксперты оценивали, насколько эффективно агент справился с поиском. На основе этих оценок модель оптимизировала стратегию: училась раньше прекращать поиск, если информации достаточно, и, наоборот, уточнять запрос, если данные противоречивы.
| Этап обучения | Метод | Данные | Цель |
|---|---|---|---|
| 1 | Сбор и разметка | 50 000 пар «запрос-шаги» | Создать эталонную выборку |
| 2 | Supervised Fine-Tuning | Те же 50 000 пар | Научить предсказывать следующий шаг |
| 3 | RLHF | Оценки экспертов | Оптимизировать стратегию поиска |
Практические выводы: как применить идеи T-Search в своём проекте
Хотя T-Search — это исследовательский проект Т-Банка, его идеи можно адаптировать для собственных систем. Вот несколько конкретных рекомендаций:
-
Декомпозируйте запросы вручную. Если вы создаёте поискового агента для внутреннего использования, начните с простого: разбивайте пользовательские вопросы на подзадачи с помощью LLM. Например, для вопроса «Какие курсы по AI есть на ASI Biont?» агент может сгенерировать подзадачи: найти список курсов, отфильтровать по теме AI, отсортировать по рейтингу.
-
Используйте чекпоинты. В T-Search агент после каждого шага оценивает, достаточно ли информации. В своём проекте вы можете добавить простую проверку: если суммарная длина найденных фрагментов меньше порога (например, 500 символов) — повторите поиск с другими ключевыми словами.
-
Храните историю поиска. Даже простая очередь из последних 5 запросов и ответов помогает агенту не повторять одни и те же действия. В T-Search история хранится в виде структурированного JSON, что удобно для логирования и отладки.
-
Не бойтесь RL. Даже если у вас нет команды экспертов для оценки, вы можете использовать автоматические метрики: например, считать, что поиск успешен, если ответ агента содержит не менее 3 фактов из разных источников. Это позволит обучить модель без человеческого фидбека.
Пример кода: простой многошаговый агент на Python
Ниже приведён упрощённый код, демонстрирующий логику многошагового поиска. Он не претендует на полноту, но иллюстрирует ключевые идеи.
import json
from typing import List, Dict
class SimpleSearchAgent:
def __init__(self, llm, search_engine):
self.llm = llm
self.search_engine = search_engine
self.history = []
def decompose_query(self, query: str) -> List[str]:
prompt = f"Разбей запрос на подзадачи: {query}"
sub_queries = self.llm.generate(prompt)
return json.loads(sub_queries)
def search(self, sub_query: str) -> str:
result = self.search_engine.query(sub_query)
self.history.append({"type": "search", "query": sub_query, "result": result})
return result
def evaluate(self, result: str) -> bool:
prompt = f"Достаточно ли информации в этом фрагменте? {result}"
answer = self.llm.generate(prompt)
return "да" in answer.lower()
def run(self, query: str) -> str:
sub_queries = self.decompose_query(query)
all_results = []
for sq in sub_queries:
result = self.search(sq)
if not self.evaluate(result):
refined = self.llm.generate(f"Уточни запрос: {sq}")
result = self.search(refined)
all_results.append(result)
final_prompt = f"На основе данных: {all_results} ответь на: {query}"
return self.llm.generate(final_prompt)
Этот код — лишь иллюстрация. В реальном проекте нужно добавить обработку ошибок, ограничение на количество шагов и более сложную логику оценки.
Заключение
T-Search — это шаг вперёд по сравнению с классическим RAG. Агентный подход позволяет решать задачи, требующие сбора информации из нескольких источников и её синтеза. Хотя полная реализация T-Search требует значительных вычислительных ресурсов и качественных данных, основные принципы — декомпозиция, итеративный поиск и оценка полноты — доступны для внедрения в проектах любого масштаба.
Если вы разрабатываете поисковую систему для образовательной платформы, корпоративной базы знаний или аналитического сервиса, попробуйте начать с малого: добавьте в свой RAG-пайплайн простой планировщик запросов. Это может существенно повысить качество ответов без полной перестройки архитектуры.
Комментарии