LangChain Tools API
@tool デコレータ
| パラメータ | 型 | デフォルト値 | 説明 |
|---|---|---|---|
| args_schema | BaseModel または None | None | パラメータ検証モデル。指定しない場合は関数シグネチャから自動生成される |
| return_direct | bool | False | 直接返すかどうか(モデルの再思考をスキップ) |
| name | str または None | 関数名 | ツール名 |
| description | str または 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 | ツール呼び出し 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}"
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}"