LangChain Tools API


Decorador @tool

ParámetroTipoValor predeterminadoDescripción
args_schemaBaseModel o NoneNoneModelo de validación de parámetros. Si no se proporciona, se genera automáticamente desde la firma de la función.
return_directboolFalseSi devolver directamente (omitir el razonamiento del modelo)
namestr o NoneNombre de la funciónNombre de la herramienta
descriptionstr o NoneCadena de documentación de la funciónDescripción de la herramienta

Propiedades y métodos principales de BaseTool

Propiedad/MétodoDescripción
nameNombre de la herramienta (cadena)
descriptionDescripción de la herramienta (cadena)
args_schemaModelo Pydantic de parámetros
return_directSi devolver directamente (bool)
invoke(input)Invocar herramienta, input es el diccionario de parámetros
ainvoke(input)Invocar herramienta de forma asíncrona

Marcadores de inyección de dependencias

MarcadorPropósitoUso
InjectedStateInyectar estado del AgentAnnotated[dict, InjectedState]
InjectedStoreInyectar almacenamiento entre sesionesAnnotated[BaseStore, InjectedStore()]
InjectedToolCallIdInyectar ID de llamada de herramientaAnnotated[str, InjectedToolCallId]
InjectedToolArgMarcador de inyección genéricoAnnotated[T, InjectedToolArg]

Ejemplos de uso comunes

Ejemplo

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

# Herramienta básica
@tool
def my_tool(param: str) -> str:
    """Descripción de la herramienta"""
    return f"Resultado: {param}"

# Con validación de parámetros
from pydantic import BaseModel, Field

class MyInput(BaseModel):
    param: str = Field(description="Descripción de parámetros", min_length=1)

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

# Devolución directa
@tool(return_direct=True)
def query_tool(query: str) -> str:
    return f"Resultado: {query}"

# Inyectar estado
@tool
def stateful_tool(
    param: str,
    state: Annotated[dict, InjectedState],
) -> str:
    return f"Número de mensajes: {len(state.get('messages', []))}"

# Inyectar Store
@tool
def store_tool(
    key: str,
    store: Annotated[BaseStore, InjectedStore()],
) -> str:
    item = store.get(("ns",), key)
    return str(item.value if item else "Ninguno")

# Manejo de excepciones
@tool
def safe_tool(param: int) -> str:
    if param < 0:
        raise ToolException(f"El parámetro debe ser un número positivo: {param}")
    return f"OK: {param}"
Otras extensiones