Skip to main content

Локальные инструменты

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

Метаданные — имя инструмента, описание и схема — так же критичны, как и его логика. Модель использует эти метаданные, чтобы решить, какой инструмент вызвать. Поэтому важно следующее:

  • Выбирайте точные, узко определенные имена. Если ваше имя слишком общее, LLM может вызвать его, когда это не нужно.
  • Пишите четкие, отличительные описания. Слишком широкие или перекрывающиеся описания между несколькими инструментами гарантируют путаницу и плохую производительность.
  • Определяйте строгие схемы входных/выходных данных. Явные схемы помогают базовой модели точно понять, когда и как использовать инструмент, уменьшая ошибки.

Несмотря на эти преимущества, локальные инструменты имеют некоторые важные недостатки:

Масштабируемость

Проектирование, создание и развертывание локальных инструментов может быть громоздким, трудоемким и сложным, и локальные инструменты труднее делиться между различными случаями использования. Хотя инструменты могут быть представлены как библиотеки и использоваться в нескольких случаях использования агентов, на практике и в масштабе это может быть сложно.

Дублирование

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

Обслуживание

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

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

Пример: Калькулятор

Давайте рассмотрим пример регистрации инструмента калькулятора. Сначала мы определяем нашу простую функцию калькулятора:

from langchain_core.runnables import ConfigurableField
from langchain_core.tools import tool
from langchain_openai import ChatOpenAI

# Определяем инструменты, используя краткие определения функций
@tool
def multiply(x: float, y: float) -> float:
"""Multiply 'x' times 'y'."""
return x * y

@tool
def exponentiate(x: float, y: float) -> float:
"""Raise 'x' to the 'y'."""
return x**y

@tool
def add(x: float, y: float) -> float:
"""Add 'x' and 'y'."""
return x + y

Затем мы привязываем инструмент к базовой модели в LangChain:

tools = [multiply, exponentiate, add]

# Инициализируем LLM с GPT-4o и привязываем инструменты
llm = ChatOpenAI(model_name="gpt-4o", temperature=0)
llm_with_tools = llm.bind_tools(tools)

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

Хотя эффект этого прост, последствия глубоки. Базовая модель теперь способна выполнять компьютерные программы, которые мы привязываем к ней. Это простой пример, но мы можем привязать произвольно полезные и значимые программы к базовой модели, и теперь мы полагаемся на базовую модель, чтобы выбрать, какие программы выполнять с какими параметрами. Делать это ответственно и привязывать только те инструменты, которые базовая модель будет выполнять способами, производящими больше добра, чем вреда, является одной из первостепенных обязанностей разработчиков, создающих агентов и агентные системы.