API инструментов LangChain


Декоратор @tool

ПараметрTypeЗначение по умолчаниюОписание
args_schemaBaseModel или NoneОтсутствуетМодель проверки параметров. Если не указана, она автоматически генерируется из сигнатуры функции.
return_directboolFalseВозвращать ли напрямую (пропустить повторное осмысление моделью)
namestr или NoneИмя функцииНазвание инструмента
descriptionstr или NoneСтрока документации функцииОписание инструмента

Ключевые атрибуты и методы BaseTool

Атрибут/МетодОписание
nameИмя инструмента (string)
descriptionОписание инструмента (string)
args_schemaPydantic-модель параметров
return_directСледует ли возвращать напрямую (bool)
invoke(input)Вызвать инструмент; input — словарь параметров
ainvoke(input)Асинхронно вызвать инструмент

Маркеры внедрения зависимостей

MarkerНазначениеИспользование
InjectedStateВнедрить состояние AgentAnnotated[dict, InjectedState]
InjectedStoreВнедрить межсессионное хранилищеAnnotated[BaseStore, InjectedStore()]
InjectedToolCallIdВнедрить ID вызова инструментаAnnotated[str, InjectedToolCallId]
InjectedToolArgОбобщённый маркер внедренияAnnotated[T, InjectedToolArg]

Общие примеры использования

Примеры

from langchain.tools import tool, InjectedState, InjectedStore, ToolException
from typing import Annotated
from langgraph.store.base import BaseStore

# Базовый инструмент
@tool
def my_tool(param: str) -> str:
    """Описание инструмента"""
    return f"Результат: {param}"

# С валидацией параметров
from pydantic import BaseModel, Field

class MyInput(BaseModel):
    param: str = Field(description="Описание параметра", min_length=1)

@tool(args_schema=MyInput)
def validated_tool(param: str) -> str:
    return param

# Прямой возврат
@tool(return_direct=True)
def query_tool(query: str) -> str:
    return f"Результат: {query}"

# Внедрить состояние
@tool
def stateful_tool(
    param: str,
    state: Annotated[dict, InjectedState],
) -> str:
    return f"Количество сообщений: {len(state.get('messages', []))}"

# Внедрить Store
@tool
def store_tool(
    key: str,
    store: Annotated[BaseStore, InjectedStore()],
) -> str:
    item = store.get(("ns",), key)
    return str(item.value if item else "None")

# Обработка исключений
@tool
def safe_tool(param: int) -> str:
    if param < 0:
        raise ToolException(f"Параметр должен быть положительным числом: {param}")
    return f"ОК: {param}"
Другие расширения