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)ツールを非同期で呼び出す

依存性注入マーカー

マーカー用途使い方
InjectedStateAgent 状態を注入Annotated[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 "なし")

# 例外処理
@tool
def safe_tool(param: int) -> str:
    if param < 0:
        raise ToolException(f"パラメータは正の数である必要があります: {param}")
    return f"OK: {param}"
その他の拡張