API d'outils LangChain


Décorateur @tool

ParamètreTypeValeur par défautDescription
args_schemaBaseModel ou NoneAucuneModèle de validation des paramètres. S'il n'est pas fourni, il est généré automatiquement à partir de la signature de la fonction.
return_directboolFalseIndique s'il faut retourner directement (ignorer la réflexion ultérieure du modèle)
namestr ou NoneNom de la fonctionNom de l'outil
descriptionstr ou NoneDocstring de la fonctionDescription de l’outil

Attributs et méthodes clés de BaseTool

Attribut/MéthodeDescription
nameNom de l'outil (string)
descriptionDescription de l'outil (string)
args_schemaModèle Pydantic de paramètre
return_directIndique s'il faut retourner directement (bool)
invoke(input)Appeler l'outil ; input est le dictionnaire de paramètres
ainvoke(input)Appeler l'outil de manière asynchrone

Marqueurs d'injection de dépendances

MarkerObjectifUtilisation
InjectedStateInjecter l'état de l'AgentAnnotated[dict, InjectedState]
InjectedStoreInjecter le store inter-sessionAnnotated[BaseStore, InjectedStore()]
InjectedToolCallIdInjecter l'ID d'appel d'outilAnnotated[str, InjectedToolCallId]
InjectedToolArgMarqueur d'injection génériqueAnnotated[T, InjectedToolArg]

Exemples d'utilisation courants

Exemples

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

# Outil de base
@tool
def my_tool(param: str) -> str:
    """Description de l'outil"""
    return f"Résultat : {param}"

# Avec validation des paramètres
from pydantic import BaseModel, Field

class MyInput(BaseModel):
    param: str = Field(description="Description du paramètre", min_length=1)

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

# Retour direct
@tool(return_direct=True)
def query_tool(query: str) -> str:
    return f"Résultat : {query}"

# Injecter l'état
@tool
def stateful_tool(
    param: str,
    state: Annotated[dict, InjectedState],
) -> str:
    return f"Nombre de messages: {len(state.get('messages', []))}"

# Injecter le 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")

# Gestion des exceptions
@tool
def safe_tool(param: int) -> str:
    if param < 0:
        raise ToolException(f"Le paramètre doit être un nombre positif: {param}")
    return f"OK: {param}"
Autres extensions