Skip to content

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]

常用用法示例

实例

python

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}"

AI 思考中...

LangChain Messages API

LangChain Middleware API

基于 VitePress 构建,部署于 GitHub Pages