现在位置: 首页 > LangChain 教程 > 正文

LangChain Tools API


@tool 装饰器

参数类型默认值说明
args_schemaBaseModel 或 NoneNone参数校验模型。不传则从函数签名自动生成
return_directboolFalse是否直接返回(跳过模型再思考)
namestr 或 None函数名工具名称
descriptionstr 或 None函数文档字符串工具描述

BaseTool 主要属性与方法

属性/方法说明
name工具名称(字符串)
description工具描述(字符串)
args_schema参数 Pydantic 模型
return_direct是否直接返回(bool)
invoke(input)调用工具,input 是参数字典
ainvoke(input)异步调用工具

依赖注入标记

标记用途用法
InjectedState注入 Agent 状态Annotated[dict, InjectedState]
InjectedStore注入跨会话存储Annotated[BaseStore, InjectedStore()]
InjectedToolCallId注入工具调用 IDAnnotated[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 "无")

# 异常处理
@tool
def safe_tool(param: int) -> str:
    if param < 0:
        raise ToolException(f"参数必须为正数: {param}")
    return f"OK: {param}"