Документация по тулам
Этот документ описывает все доступные тулы во фреймворке SGR Deep Research, их параметры, поведение и опции конфигурации.
Категории тулов
Тулы делятся на две категории:
Системные тулы — основные тулы, необходимые для функционирования глубокого исследования. Без них исследовательский агент не сможет работать корректно:
- ReasoningTool
- FinalAnswerTool
- CreateReportTool
- ClarificationTool
- GeneratePlanTool
- AdaptPlanTool
Вспомогательные тулы — опциональные тулы, расширяющие возможности агента, но не являющиеся строго обязательными:
- WebSearchTool
- ExtractPageContentTool
BaseTool
Все тулы наследуются от BaseTool, который обеспечивает основу функциональности тулов.
Исходный код: sgr_agent_core/base_tool.py
Класс BaseTool
class BaseTool(BaseModel, ToolRegistryMixin):
tool_name: ClassVar[str] = None
description: ClassVar[str] = None
async def __call__(
self, context: AgentContext, config: AgentConfig, **kwargs
) -> str:
raise NotImplementedError("Execute method must be implemented by subclass")
Ключевые особенности
- Автоматическая регистрация: Тулы автоматически регистрируются в
ToolRegistryпри определении - Pydantic-модель: Все тулы являются Pydantic-моделями, что обеспечивает валидацию и сериализацию
- Асинхронное выполнение: Тулы выполняются асинхронно через метод
__call__ - Доступ к контексту: Тулы получают
ResearchContextиAgentConfigдля доступа к состоянию и конфигурации
Создание пользовательских тулов
Для создания пользовательского тула:
- Наследуйтесь от
BaseTool - Определите параметры тула как Pydantic-поля
- Реализуйте метод
__call__ - Опционально установите переменные класса
tool_nameиdescription
Пример: Базовый пользовательский тул
from sgr_agent_core.base_tool import BaseTool
from pydantic import Field
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from sgr_agent_core.agent_definition import AgentConfig
from sgr_agent_core.models import AgentContext
class CustomTool(BaseTool):
"""Описание того, что делает этот инструмент."""
tool_name = "customtool" # Опционально, автогенерируется из имени класса если не задано
reasoning: str = Field(description="Почему нужен этот тул")
parameter: str = Field(description="Параметр тула")
async def __call__(self, context: AgentContext, config: AgentConfig, **_) -> str:
# Реализация тула
result = f"Обработано: {self.parameter}"
return result
Тул будет автоматически зарегистрирован в ToolRegistry при определении класса и может использоваться в конфигурациях агентов.
Использование пользовательских тулов в конфигурации
После создания пользовательского тула вы можете использовать его в конфигурации двумя способами:
Способ 1: Прямая ссылка (если тул импортирован и зарегистрирован)
Если ваш пользовательский тул импортирован до создания агента, он будет автоматически зарегистрирован и на него можно ссылаться по имени:
agents:
my_agent:
base_class: "SGRToolCallingAgent"
tools:
- "custom_tool" # Прямая ссылка на зарегистрированный тул
- "web_search_tool"
Способ 2: Определение в секции tools с base_class
Вы можете определить пользовательские тулы в секции tools: и указать base_class:
tools:
# Пользовательский тул с явным base_class
custom_tool:
base_class: "tools.CustomTool" # Относительный путь импорта
# Или использовать полный путь:
# base_class: "my_package.tools.CustomTool"
agents:
my_agent:
base_class: "SGRToolCallingAgent"
tools:
- "custom_tool" # Ссылка по имени из секции tools
- "web_search_tool"
Важные замечания:
- Пользовательские тулы должны быть импортированы до создания агента для автоматической регистрации
- При использовании
base_classв определениях тулов можно использовать: - Относительные пути импорта (например,
"tools.CustomTool") — разрешаются относительно расположения файла конфигурации - Полные пути импорта (например,
"my_package.tools.CustomTool") — разрешаются изsys.pathPython - Имена классов (например,
"CustomTool") — разрешаются изToolRegistry - Тулы, определённые в секции
tools:, имеют приоритет над тулами вToolRegistry
Системные тулы
ReasoningTool
Тип: Системный тул Исходный код: sgr_agent_core/tools/reasoning_tool.py
Основной тул для агентов со схема-направляемым рассуждением. Определяет следующий шаг рассуждения с возможностями адаптивного планирования.
Параметры:
reasoning_steps(list[str], 2-3 элемента): Пошаговый процесс рассужденияcurrent_situation(str, макс. 300 символов): Оценка текущей исследовательской ситуацииplan_status(str, макс. 150 символов): Статус текущего планаenough_data(bool, по умолчанию=False): Собрано ли достаточно данныхremaining_steps(list[str], 1-3 элемента): Оставшиеся шаги действийtask_completed(bool): Завершена ли исследовательская задача
Поведение: Возвращает JSON-представление состояния рассуждения. Используется SGR-агентами для структурирования процесса принятия решений.
Использование: Обязательный тул для SGR-агентов. Должен использоваться перед выполнением любого другого тула в фазе рассуждения.
Конфигурация: Специальная конфигурация не требуется. Поведение тула контролируется промптами агента и настройками LLM.
FinalAnswerTool
Тип: Системный тул Исходный код: sgr_agent_core/tools/final_answer_tool.py
Финализирует исследовательскую задачу и завершает выполнение агента.
Параметры:
reasoning(str): Почему задача завершена и как был верифицирован ответcompleted_steps(list[str], 1-5 элементов): Сводка выполненных шагов, включая верификациюanswer(str): Исчерпывающий финальный ответ с точными фактическими даннымиstatus(Literal["completed", "failed"]): Статус завершения задачи
Поведение:
- Устанавливает
context.stateв указанный статус - Сохраняет
answerвcontext.execution_result - Возвращает JSON-представление финального ответа
Использование: Вызывается после завершения исследовательской задачи для финализации выполнения.
Конфигурация: Специальная конфигурация не требуется.
Пример:
execution:
max_iterations: 10 # После этого лимита доступны только final_answer_tool и create_report_tool
CreateReportTool
Тип: Системный тул Исходный код: sgr_agent_core/tools/create_report_tool.py
Создаёт детальный отчёт с цитатами как финальный шаг исследования.
Параметры:
reasoning(str): Почему готов создать отчёт сейчасtitle(str): Заголовок отчётаuser_request_language_reference(str): Копия оригинального запроса пользователя для языковой согласованностиcontent(str): Исчерпывающий исследовательский отчёт со встроенными цитатами [1], [2], [3]confidence(Literal["high", "medium", "low"]): Уровень уверенности в результатах
Поведение:
- Сохраняет отчёт в файл в
config.execution.reports_dir - Формат имени файла:
{timestamp}_{safe_title}.md - Включает полное содержимое с разделом источников
- Возвращает JSON с метаданными отчёта (title, content, confidence, sources_count, word_count, filepath, timestamp)
Использование: Финальный шаг после сбора достаточных исследовательских данных.
Конфигурация:
Важно:
- Каждое фактическое утверждение в содержимом ДОЛЖНО иметь встроенные цитаты [1], [2], [3]
- Цитаты должны быть интегрированы непосредственно в предложения
- Содержимое должно использовать тот же язык, что и
user_request_language_reference
ClarificationTool
Тип: Системный тул Исходный код: sgr_agent_core/tools/clarification_tool.py
Задаёт уточняющие вопросы при неоднозначном запросе.
Параметры:
reasoning(str, макс. 200 символов): Почему нужно уточнение (1-2 предложения МАКСИМУМ)unclear_terms(list[str], 1-3 элемента): Список неясных терминов (кратко, 1-3 слова каждый)assumptions(list[str], 2-3 элемента): Возможные интерпретации (кратко, 1 предложение каждое)questions(list[str], 1-3 элемента): Конкретные уточняющие вопросы (короткие и прямые)
Поведение:
- Возвращает вопросы как строку, разделённую переносами строк
- Приостанавливает выполнение агента до получения уточнения
- Устанавливает состояние агента в
WAITING_FOR_CLARIFICATION - Увеличивает
context.clarifications_used
Использование: Используется, когда запрос пользователя неоднозначен или требует дополнительной информации.
Конфигурация:
После достижения max_clarifications тул автоматически удаляется из доступных тулов.
GeneratePlanTool
Тип: Системный тул Исходный код: sgr_agent_core/tools/generate_plan_tool.py
Генерирует исследовательский план для разбиения сложных запросов на управляемые шаги.
Параметры:
reasoning(str): Обоснование исследовательского подходаresearch_goal(str): Основная исследовательская цельplanned_steps(list[str], 3-4 элемента): Список запланированных шаговsearch_strategies(list[str], 2-3 элемента): Стратегии поиска информации
Поведение:
- Возвращает JSON-представление плана (исключая поле reasoning)
- Используется для структурирования сложных исследовательских задач
Использование: Используется в начале исследования для разбиения сложных запросов.
Конфигурация: Специальная конфигурация не требуется.
AdaptPlanTool
Тип: Системный тул Исходный код: sgr_agent_core/tools/adapt_plan_tool.py
Адаптирует исследовательский план на основе новых находок.
Параметры:
reasoning(str): Почему план нуждается в адаптации на основе новых данныхoriginal_goal(str): Изначальная исследовательская цельnew_goal(str): Обновлённая исследовательская цельplan_changes(list[str], 1-3 элемента): Конкретные изменения, внесённые в планnext_steps(list[str], 2-4 элемента): Обновлённые оставшиеся шаги
Поведение:
- Возвращает JSON-представление адаптированного плана (исключая поле reasoning)
- Позволяет динамически корректировать план в процессе исследования
Использование: Используется, когда первоначальный план нуждается в модификации на основе обнаруженной информации.
Конфигурация: Специальная конфигурация не требуется.
Вспомогательные тулы
WebSearchTool
Тип: Вспомогательный тул Исходный код: sgr_agent_core/tools/web_search_tool.py
Выполняет поиск в интернете для получения актуальной информации с использованием Tavily Search API.
Параметры:
reasoning(str): Почему нужен этот поиск и что ожидается найтиquery(str): Поисковый запрос на том же языке, что и запрос пользователяmax_results(int, по умолчанию=5, диапазон 1-10): Максимальное количество результатов
Поведение:
- Выполняет поиск через TavilySearchService
- Добавляет найденные источники в словарь
context.sources - Создаёт SearchResult и добавляет в
context.searches - Увеличивает
context.searches_used - Возвращает форматированную строку с поисковым запросом и результатами (заголовки, ссылки, сниппеты)
Использование: Используется для поиска актуальной информации, проверки фактов, исследования текущих событий, технологических обновлений или любой темы, требующей свежей информации.
Лучшие практики:
- Используйте конкретные термины и контекст в запросах
- Для аббревиатур добавляйте контекст: "SGR Schema-Guided Reasoning"
- Используйте кавычки для точных фраз: "Structured Output OpenAI"
- Поисковые запросы на ТОМ ЖЕ ЯЗЫКЕ, что и запрос пользователя
- Для вопросов о датах/числах включайте конкретный год/контекст в запрос
- Сниппеты поиска часто содержат прямые ответы — проверяйте их внимательно
Конфигурация:
search:
tavily_api_key: "your-tavily-api-key" # Обязательно: API-ключ Tavily
tavily_api_base_url: "https://api.tavily.com" # URL API Tavily
max_searches: 4 # Максимальное количество поисковых операций
max_results: 10 # Максимум результатов в поисковом запросе (переопределяет max_results тула, если меньше)
После достижения max_searches тул автоматически удаляется из доступных тулов.
Пример:
ExtractPageContentTool
Тип: Вспомогательный тул Исходный код: sgr_agent_core/tools/extract_page_content_tool.py
Извлекает полное детальное содержимое с конкретных веб-страниц с использованием Tavily Extract API.
Параметры:
reasoning(str): Почему нужно извлечь эти конкретные страницыurls(list[str], 1-5 элементов): Список URL для извлечения полного содержимого
Поведение:
- Извлекает полное содержимое с указанных URL через TavilySearchService
- Обновляет существующие источники в
context.sourcesполным содержимым - Для новых URL добавляет их с последовательной нумерацией
- Возвращает форматированную строку с превью извлечённого содержимого (ограничено
content_limit)
Использование:
Вызывается после web_search_tool для получения детальной информации с перспективных URL, найденных в результатах поиска.
Важные предупреждения:
- Извлечённые страницы могут показывать данные за ДРУГИЕ годы/периоды времени, чем запрошено
- ВСЕГДА проверяйте, что извлечённое содержимое соответствует временному контексту вопроса
- Если извлечённое содержимое противоречит поисковому сниппету, предпочитайте сниппет для фактических вопросов
- Для вопросов о датах/числах перепроверяйте извлечённые значения с поисковыми сниппетами
Конфигурация:
search:
tavily_api_key: "your-tavily-api-key" # Обязательно: API-ключ Tavily
tavily_api_base_url: "https://api.tavily.com" # URL API Tavily
content_limit: 1500 # Лимит символов содержимого на источник (обрезает извлечённое содержимое)
Пример:
agents:
research_agent:
search:
content_limit: 2000 # Увеличить лимит содержимого для более детального извлечения
tools:
- "web_search_tool"
- "extract_page_content_tool"
Конфигурация тулов
Настройка тулов в агентах
Тулы настраиваются для каждого агента в файле agents.yaml или определениях агентов. Вы можете ссылаться на тулы тремя способами:
- По имени в snake_case — используйте формат snake_case (например,
"web_search_tool") — рекомендуется - По имени из секции tools — определите тулы в секции
tools:и ссылайтесь на них по имени - По имени класса в PascalCase — используйте формат PascalCase (например,
"WebSearchTool") — для обратной совместимости
Именование тулов
Рекомендуемый формат — snake_case (например, web_search_tool). Формат PascalCase (например, WebSearchTool) поддерживается для обратной совместимости, но предпочтительнее использовать snake_case.
Пример: Базовая конфигурация тулов
agents:
my_agent:
base_class: "SGRAgent"
tools:
- "web_search_tool"
- "extract_page_content_tool"
- "create_report_tool"
- "clarification_tool"
- "generate_plan_tool"
- "adapt_plan_tool"
- "final_answer_tool"
execution:
max_clarifications: 3
max_iterations: 10
search:
max_searches: 4
max_results: 10
content_limit: 1500
Определение тулов в конфигурации
Вы можете определить тулы в отдельной секции tools: в config.yaml или agents.yaml. Это позволяет:
- Определять пользовательские тулы с конкретными конфигурациями
- Ссылаться на тулы по имени в определениях агентов
- Переопределять классы тулов по умолчанию, используя
base_class
Формат определения тула:
tools:
# Простое определение тула (использует base_class по умолчанию из ToolRegistry)
reasoning_tool:
# base_class по умолчанию: sgr_agent_core.tools.ReasoningTool
# Пользовательский тул с явным base_class
custom_tool:
base_class: "tools.CustomTool" # Относительный путь импорта или полный путь
# Здесь можно добавить дополнительные параметры, специфичные для тула
Использование определённых тулов в агентах:
tools:
reasoning_tool:
# Использует по умолчанию: sgr_agent_core.tools.ReasoningTool
custom_file_tool:
base_class: "tools.CustomFileTool" # Пользовательский тул из локального модуля
agents:
my_agent:
base_class: "SGRToolCallingAgent"
tools:
- "reasoning_tool" # Из секции tools
- "custom_file_tool" # Из секции tools
- "web_search_tool" # Из ToolRegistry
- "final_answer_tool" # Из ToolRegistry
Порядок разрешения тулов
При разрешении тулов система проверяет в следующем порядке:
1. Тулы, определённые в секции tools: (по имени)
2. Тулы, зарегистрированные в ToolRegistry (по имени в snake_case — рекомендуется, или по имени класса в PascalCase для обратной совместимости)
3. Автоконвертация из snake_case в PascalCase (например, web_search_tool → WebSearchTool) для обратной совместимости
Управление доступностью тулов
Агенты автоматически фильтруют доступные тулы на основе лимитов выполнения:
- После
max_iterations: Доступны толькоcreate_report_toolиfinal_answer_tool - После
max_clarifications:clarification_toolудаляется - После
max_searches:web_search_toolудаляется
Это гарантирует, что агенты завершают задачи в рамках настроенных лимитов.
MCP-тулы
Тулы также могут создаваться из MCP (Model Context Protocol) серверов. Эти тулы наследуются от MCPBaseTool и автоматически генерируются из схем MCP-сервера.
Исходный код: sgr_agent_core/base_tool.py (класс MCPBaseTool)
Конфигурация:
mcp:
mcpServers:
deepwiki:
url: "https://mcp.deepwiki.com/mcp"
your_server:
url: "https://your-mcp-server.com/mcp"
headers:
Authorization: "Bearer your-token"
Поведение:
- MCP-тулы автоматически преобразуются в экземпляры BaseTool
- Схемы тулов генерируются из входных схем MCP-сервера
- Выполнение вызывает MCP-сервер с полезной нагрузкой тула
- Ответ ограничен
execution.mcp_context_limit
Конфигурация:
Реестр тулов
Все тулы автоматически регистрируются в ToolRegistry при определении. На тулы можно ссылаться по имени в конфигурациях агентов.
Исходный код: sgr_agent_core/services/registry.py
Тулы регистрируются с их tool_name (автоматически генерируется из имени класса, если не указано). Пользовательские тулы должны быть импортированы до создания агента для регистрации.
Стандартные тулы
Все стандартные тулы автоматически регистрируются в ToolRegistry при импорте из sgr_agent_core.tools. Стандартный набор тулов включает:
Системные тулы:
- ReasoningTool - Для SGR-агентов, которым требуются явные фазы рассуждения
- ClarificationTool - Для запроса уточнений у пользователя
- GeneratePlanTool - Для генерации исследовательских планов
- AdaptPlanTool - Для адаптации исследовательских планов
- FinalAnswerTool - Для предоставления финальных ответов
- CreateReportTool - Для создания исследовательских отчётов
Вспомогательные тулы:
- WebSearchTool - Для функциональности веб-поиска
- ExtractPageContentTool - Для извлечения содержимого с веб-страниц
Все эти тулы можно использовать по имени в конфигурациях агентов (см. раздел Конфигурация тулов выше).