AI‑агенты и фреймворки

LangChain Agents + Tools: создание кастомных инструментов

2 февраля 2026 г.

LangChain Agents + Tools: создание кастомных инструментов

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

Предварительные требования

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

  • Python 3.8 или выше
  • LangChain (версия 0.1.0+)
  • OpenAI API ключ или другая LLM
  • Базовые знания объектно-ориентированного программирования
  • Понимание концепции AI-агентов и их архитектуры

Что такое Tools в LangChain

В экосистеме LangChain инструменты (tools) представляют собой функциональные модули, которые агенты используют для выполнения специфических задач. Каждый инструмент имеет четкое описание, входные параметры и логику выполнения. Расширение стандартного набора инструментов позволяет создавать более специализированные AI-агенты, способные решать уникальные бизнес-задачи.

Кастомные инструменты открывают возможности для интеграции с корпоративными системами, внешними API, базами данных и специализированными сервисами. Это критически важно для построения production-ready решений.

Архитектура Tools в LangChain

Существует несколько подходов к созданию инструментов:

  • @tool декоратор: простейший способ превратить функцию в инструмент
  • BaseTool класс: расширенный подход с полным контролем над поведением
  • StructuredTool: для инструментов со сложной схемой входных данных

Сравнение методов создания инструментов

Метод Сложность Гибкость Валидация входных данных Использование
@tool декоратор Низкая Средняя Базовая Простые функции
BaseTool класс Средняя Высокая Расширенная Сложная логика
StructuredTool Средняя Высокая Pydantic схемы Множественные параметры
Custom Function Низкая Низкая Отсутствует Прототипирование

Пошаговое создание кастомного инструмента

Шаг 1: Простой инструмент с декоратором

Начнем с базового примера создания инструмента для расчета статистики:

from langchain.tools import tool
from typing import Optional

@tool
def calculate_statistics(numbers: str) -> str:
 """Вычисляет среднее значение, медиану и стандартное отклонение для списка чисел.
 
 Args:
 numbers: Строка с числами, разделенными запятыми (например, '1,2,3,4,5')
 """
 import statistics
 
 try:
 num_list = [float(x.strip()) for x in numbers.split(',')]
 
 mean = statistics.mean(num_list)
 median = statistics.median(num_list)
 stdev = statistics.stdev(num_list) if len(num_list) > 1 else 0
 
 return f"Среднее: {mean:.2f}, Медиана: {median:.2f}, Станд. откл.: {stdev:.2f}"
 except Exception as e:
 return f"Ошибка при расчете: {str(e)}"

Шаг 2: Расширенный инструмент с BaseTool

Для более сложных сценариев используйте наследование от BaseTool:

from langchain.tools import BaseTool
from pydantic import Field
import requests

class WeatherTool(BaseTool):
 name: str = "weather_checker"
 description: str = "Получает текущую погоду для указанного города. Используйте название города на английском."
 api_key: str = Field(default="your_api_key")
 
 def _run(self, city: str) -> str:
 """Выполняет запрос к API погоды."""
 try:
 url = f"https://api.weatherapi.com/v1/current.json?key={self.api_key}&q={city}"
 response = requests.get(url, timeout=10)
 data = response.json()
 
 temp = data['current']['temp_c']
 condition = data['current']['condition']['text']
 
 return f"Погода в {city}: {temp}°C, {condition}"
 except Exception as e:
 return f"Не удалось получить данные о погоде: {str(e)}"
 
 async def _arun(self, city: str) -> str:
 """Асинхронная версия для оптимизации производительности."""
 raise NotImplementedError("Асинхронный режим не реализован")

Шаг 3: Инструмент со структурированными входными данными

Используйте StructuredTool для сложных параметров:

from langchain.tools import StructuredTool
from pydantic import BaseModel, Field

class DatabaseQueryInput(BaseModel):
 table: str = Field(description="Название таблицы для запроса")
 filters: dict = Field(description="Словарь с условиями фильтрации")
 limit: int = Field(default=10, description="Максимальное количество результатов")

def query_database(table: str, filters: dict, limit: int = 10) -> str:
 """Выполняет запрос к базе данных с фильтрами."""
 # Здесь ваша логика работы с БД
 return f"Запрос к таблице {table} с фильтрами {filters}, лимит: {limit}"

db_tool = StructuredTool.from_function(
 func=query_database,
 name="database_query",
 description="Выполняет структурированный запрос к базе данных",
 args_schema=DatabaseQueryInput
)

Интеграция инструментов с агентами

После создания кастомных инструментов необходимо интегрировать их с LangChain Agents:

  1. Импортируйте необходимые компоненты агента
  2. Создайте список инструментов, включая ваши кастомные
  3. Инициализируйте агента с указанием модели LLM
  4. Настройте параметры выполнения (max_iterations, verbose)
  5. Запустите агента с конкретной задачей
from langchain.agents import initialize_agent, AgentType
from langchain.chat_models import ChatOpenAI

# Создаем список инструментов
tools = [calculate_statistics, WeatherTool(), db_tool]

# Инициализируем LLM
llm = ChatOpenAI(temperature=0, model="gpt-4")

# Создаем агента
agent = initialize_agent(
 tools=tools,
 llm=llm,
 agent=AgentType.OPENAI_FUNCTIONS,
 verbose=True,
 max_iterations=5
)

# Выполняем задачу
result = agent.run("Вычисли статистику для чисел 10, 20, 30, 40, 50")
print(result)

Ключевые особенности разработки кастомных инструментов

При создании собственных инструментов учитывайте следующие моменты:

  • Четкие описания: Агент выбирает инструмент на основе description, поэтому формулируйте его максимально точно
  • Обработка ошибок: Всегда используйте try-except блоки для предотвращения сбоев
  • Типизация параметров: Используйте type hints для корректной валидации входных данных
  • Timeout настройки: Для внешних API устанавливайте разумные таймауты
  • Логирование: Добавляйте логи для отладки и мониторинга работы инструментов
  • Документация: Подробно документируйте каждый параметр в docstring

Расширение возможностей через композицию инструментов

Вы можете создавать сложные инструменты, комбинируя несколько простых:

@tool
def analyze_and_visualize(data_source: str) -> str:
 """Получает данные, анализирует их и создает визуализацию."""
 # Используем другие инструменты внутри
 raw_data = fetch_data_tool.run(data_source)
 statistics = calculate_statistics.run(raw_data)
 chart = create_chart_tool.run(statistics)
 
 return f"Анализ завершен. Статистика: {statistics}. График сохранен."

Производительность и оптимизация

Для повышения эффективности работы AI-агентов с кастомными инструментами:

  • Реализуйте кэширование часто запрашиваемых данных
  • Используйте асинхронные версии (_arun) для параллельного выполнения
  • Минимизируйте количество внешних вызовов API
  • Оптимизируйте размер возвращаемых данных
  • Применяйте батчинг для массовых операций

Устранение типичных проблем

Проблема: Агент не выбирает нужный инструмент

Решение: Улучшите description инструмента, добавив больше контекста и примеров использования. Убедитесь, что название инструмента отражает его функциональность.

Проблема: Ошибки валидации входных параметров

Решение: Используйте Pydantic модели для строгой типизации. Добавьте подробные Field описания с примерами корректных значений.

Проблема: Таймауты при вызове внешних API

Решение: Установите адекватные timeout значения, реализуйте retry логику с экспоненциальной задержкой, используйте fallback механизмы.

Проблема: Инструмент возвращает слишком много данных

Решение: Ограничьте объем возвращаемой информации, используйте суммаризацию, возвращайте только релевантные поля.

Проблема: Конфликты между инструментами с похожими функциями

Решение: Дайте инструментам уникальные, специфичные названия и четко разграничьте их зоны ответственности в описаниях.

Лучшие практики безопасности

При создании production-ready инструментов обязательно:

  • Валидируйте все входные данные перед обработкой
  • Не храните API ключи и секреты в коде (используйте переменные окружения)
  • Ограничивайте доступ к критичным системам через role-based контроль
  • Логируйте все действия инструментов для аудита
  • Реализуйте rate limiting для предотвращения злоупотреблений

FAQ: Частые вопросы

Вопрос: Сколько кастомных инструментов можно добавить к одному агенту?

Ответ: Технически ограничений нет, но рекомендуется использовать 5-15 инструментов на агента. Слишком большое количество инструментов снижает точность выбора и увеличивает стоимость токенов. Для сложных систем лучше создать несколько специализированных агентов.

Вопрос: Можно ли использовать один инструмент с разными LLM моделями?

Ответ: Да, инструменты не зависят от конкретной LLM. Однако разные модели могут по-разному интерпретировать описания инструментов. Тестируйте совместимость с вашей целевой моделью и при необходимости адаптируйте формулировки.

Вопрос: Как обрабатывать долгие операции в инструментах?

Ответ: Для операций, занимающих более 30 секунд, используйте асинхронный подход с callback функциями или webhook уведомлениями. Возвращайте агенту промежуточный статус, а не блокируйте выполнение.

Вопрос: Нужно ли создавать отдельный инструмент для каждой функции API?

Ответ: Не обязательно. Группируйте связанные операции в один инструмент с параметром action. Например, инструмент database_operations может содержать действия: create, read, update, delete вместо четырех отдельных инструментов.

Вопрос: Как тестировать кастомные инструменты перед интеграцией с агентом?

Ответ: Используйте unit-тесты для проверки логики инструмента независимо от агента. Создайте тестовые наборы данных, покрывающие нормальные и граничные случаи. Затем протестируйте инструмент в составе агента на типичных сценариях использования.

Заключение

Создание кастомных инструментов для LangChain Agents открывает безграничные возможности для построения специализированных AI-решений. Вы научились использовать три основных подхода к разработке инструментов, интегрировать их с агентами и решать типичные проблемы.

Рекомендуемые следующие шаги:

  1. Начните с простого инструмента на основе @tool декоратора для освоения базовых концепций
  2. Изучите документацию по Pydantic для создания надежных схем валидации
  3. Экспериментируйте с различными типами агентов (ReAct, OpenAI Functions, Structured Chat)
  4. Постройте библиотеку переиспользуемых инструментов для вашей организации
  5. Внедрите мониторинг и метрики для оценки эффективности ваших AI-агентов

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

Ключевые слова

LangChain Agents tools создание

Нужна помощь с автоматизацией?

SDVG Labs поможет внедрить AI и автоматизацию в ваш бизнес.

Комментарии (7)

Очень помогло разобраться с архитектурой агентов. Раньше использовал только стандартные инструменты, теперь понимаю как расширять функционал под свои задачи. Буду экспериментировать дальше!

Спасибо за практические примеры! Особенно полезен был раздел про обработку ошибок в кастомных инструментах. Это как раз то, с чем столкнулась в своем проекте.

Применил описанный подход для автоматизации работы с базой данных клиентов. Работает отлично! Производительность команды выросла процентов на 30. Рекомендую всем, кто работает с LangChain.

Наконец нашел хорошую статью про LangChain Agents tools создание! Много читал по теме, но здесь все структурировано максимально логично. Единственное, хотелось бы больше примеров интеграции с внешними API.

Хорошая статья, но местами не хватает глубины. Раздел про интеграции особенно помог понять базовые принципы, но хотелось бы увидеть более сложные кейсы. В целом материал полезный для старта.

Отличная статья! Искал информацию про создание кастомных инструментов для LangChain, и эта статья идеально подошла. Все объяснено понятно, с примерами кода. Уже применил на практике для своего проекта. Спасибо автору за качественный материал!

Реализовал свой первый кастомный инструмент благодаря этой статье за пару часов. Все понятно написано, код рабочий. Теперь буду экспериментировать с расширением функционала агентов под наши бизнес-процессы.

Оставить комментарий