ツールは、関数とその入力スキーマをカプセル化し、ツール呼び出しをサポートするチャットモデルに渡せる手段です。これはモデルが特定の入力でこの関数の実行を要求することを可能にします。独自ツールを定義したり、LangChain が提供する事前定義済み統合機能を使用することができます。
LangGraph : Prebuilt エージェント : ツール
作成 : クラスキャット・セールスインフォメーション
作成日時 : 06/11/2025
* 本記事は langchain-ai.github.io の以下のページを独自に翻訳した上で、補足説明を加えてまとめ直しています :
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
◆ お問合せ : 下記までお願いします。
- クラスキャット セールス・インフォメーション
- sales-info@classcat.com
- ClassCatJP
LangGraph : Get started : Prebuilt エージェント : ツール
ツールは、関数とその入力スキーマをカプセル化し、ツール呼び出しをサポートするチャットモデルに渡せる手段です。これはモデルが特定の入力でこの関数の実行を要求することを可能にします。
独自ツールを定義したり、LangChain が提供する 事前定義済み統合機能 を使用することができます。
単純なツールの定義
vanilla 関数を create_react_agent に渡してツールとして使用できます :
API リファレンス: create_react_agent
from langgraph.prebuilt import create_react_agent
def multiply(a: int, b: int) -> int:
"""Multiply two numbers."""
return a * b
create_react_agent(
model="anthropic:claude-3-7-sonnet",
tools=[multiply]
)
create_react_agent automatically converts vanilla functions to LangChain tools.
ツールのカスタマイズ
ツールの動作をより制御するには、@tool デコレータを使用します :
API リファレンス: tool
from langchain_core.tools import tool
@tool("multiply_tool", parse_docstring=True)
def multiply(a: int, b: int) -> int:
"""Multiply two numbers.
Args:
a: First operand
b: Second operand
"""
return a * b
Pydantic を使用してカスタム入力スキーマを定義することもできます :
from pydantic import BaseModel, Field
class MultiplyInputSchema(BaseModel):
"""Multiply two numbers"""
a: int = Field(description="First operand")
b: int = Field(description="Second operand")
@tool("multiply_tool", args_schema=MultiplyInputSchema)
def multiply(a: int, b: int) -> int:
return a * b
For additional customization, refer to the custom tools guide.
モデルから引数を隠す
一部のツールは、モデルにより制御するべきではない、ランタイム-only 引数 (e.g., ユーザ ID or セッションコンテキスト) を必要とします。
これらの引数をエージェントの state や config に置いて、ツール内でこの情報にアクセスすることができます :
API リファレンス: InjectedState | AgentState | RunnableConfig
from langgraph.prebuilt import InjectedState
from langgraph.prebuilt.chat_agent_executor import AgentState
from langchain_core.runnables import RunnableConfig
def my_tool(
# This will be populated by an LLM
tool_arg: str,
# access information that's dynamically updated inside the agent
state: Annotated[AgentState, InjectedState],
# access static data that is passed at agent invocation
config: RunnableConfig,
) -> str:
"""My tool."""
do_something_with_state(state["messages"])
do_something_with_config(config)
...
ツールの並列 (parallel) 呼び出しを無効にする
一部のモデルプロバイダーは複数のツールの並列実行をサポートしていますが、ユーザがこの機能を無効にすることを可能にしています。
サポートされているプロバイダーについては、model.bind_tools() メソッド経由で parallel_tool_calls=False を設定することでツールの並列呼び出しを無効にできます :
API リファレンス: init_chat_model
from langchain.chat_models import init_chat_model
def add(a: int, b: int) -> int:
"""Add two numbers"""
return a + b
def multiply(a: int, b: int) -> int:
"""Multiply two numbers."""
return a * b
model = init_chat_model("anthropic:claude-3-5-sonnet-latest", temperature=0)
tools = [add, multiply]
agent = create_react_agent(
# disable parallel tool calls
model=model.bind_tools(tools, parallel_tool_calls=False),
tools=tools
)
agent.invoke(
{"messages": [{"role": "user", "content": "what's 3 + 5 and 4 * 7?"}]}
)
ツールの結果を直接返す
ツールの結果を直ちに返して、エージェントループを停止するには、return_direct=True を使用します :
API リファレンス: tool
from langchain_core.tools import tool
@tool(return_direct=True)
def add(a: int, b: int) -> int:
"""Add two numbers"""
return a + b
agent = create_react_agent(
model="anthropic:claude-3-7-sonnet-latest",
tools=[add]
)
agent.invoke(
{"messages": [{"role": "user", "content": "what's 3 + 5?"}]}
)
ツールの使用の強制
エージェントが特定のツールを使用するように強制するには、model.bind_tools() の tool_choice オプションを設定します :
from langchain_core.tools import tool
@tool(return_direct=True)
def greet(user_name: str) -> int:
"""Greet user."""
return f"Hello {user_name}!"
tools = [greet]
agent = create_react_agent(
model=model.bind_tools(tools, tool_choice={"type": "tool", "name": "greet"}),
tools=tools
)
agent.invoke(
{"messages": [{"role": "user", "content": "Hi, I am Bob"}]}
)
ツールエラーの処理
デフォルトでは、エージェントはツール呼び出し中に発生したすべての例外をキャッチして、それらをツールメッセージとして LLM に渡します。エラーが処理される方法を制御するには、create_react_agent 内でツールを実行するノードである、事前構築済みの ToolNode をその handle_tool_errors パラメータ経由で使用することができます :
エラー処理を有効にする (デフォルト)
from langgraph.prebuilt import create_react_agent
def multiply(a: int, b: int) -> int:
"""Multiply two numbers."""
if a == 42:
raise ValueError("The ultimate error")
return a * b
# Run with error handling (default)
agent = create_react_agent(
model="anthropic:claude-3-7-sonnet-latest",
tools=[multiply]
)
agent.invoke(
{"messages": [{"role": "user", "content": "what's 42 x 7?"}]}
)
エラー処理を無効にする
from langgraph.prebuilt import create_react_agent, ToolNode
def multiply(a: int, b: int) -> int:
"""Multiply two numbers."""
if a == 42:
raise ValueError("The ultimate error")
return a * b
tool_node = ToolNode(
[multiply],
handle_tool_errors=False
)
agent_no_error_handling = create_react_agent(
model="anthropic:claude-3-7-sonnet-latest",
tools=tool_node
)
agent_no_error_handling.invoke(
{"messages": [{"role": "user", "content": "what's 42 x 7?"}]}
)
カスタム・エラー処理
from langgraph.prebuilt import create_react_agent, ToolNode
def multiply(a: int, b: int) -> int:
"""Multiply two numbers."""
if a == 42:
raise ValueError("The ultimate error")
return a * b
tool_node = ToolNode(
[multiply],
handle_tool_errors=(
"Can't use 42 as a first operand, you must switch operands!"
)
)
agent_custom_error_handling = create_react_agent(
model="anthropic:claude-3-7-sonnet-latest",
tools=tool_node
)
agent_custom_error_handling.invoke(
{"messages": [{"role": "user", "content": "what's 42 x 7?"}]}
)
See API reference for more information on different tool error handling options.
メモリ操作
LangGraph はツールから短期記憶と長期記憶にアクセスすることを可能にしています。See Memory guide for more information on:
Prebuilt ツール
モデルプロバイダーからの prebuilt (事前構築済み) ツール、ツール仕様を含む辞書を create_react_agent の tools パラメータに渡すことで使用できます。例えば、OpenAI の web_search_preview ツールを使用するには :
API リファレンス: create_react_agent
from langgraph.prebuilt import create_react_agent
agent = create_react_agent(
model="openai:gpt-4o-mini",
tools=[{"type": "web_search_preview"}]
)
response = agent.invoke(
{"messages": ["What was a positive news story from today?"]}
)
更に、LangChain は、API、データベース、ファイルシステム、web データ 等と連携するための広範囲な prebuilt ツール統合をサポートしています。これらのツールはエージェントの機能を拡張して迅速な開発を可能にします。
利用可能な統合の完全なリストは LangChain 統合ディレクトリ でご覧になれます。
一般に利用されるツールのカテゴリーは以下のようなものです :
- 検索: Bing, SerpAPI, Tavily
- コード・インタープリタ: Python REPL, Node.js REPL
- データベース: SQL, MongoDB, Redis
- Web データ: Web スクレイピングとブラウジング
- API: OpenWeatherMap, NewsAPI, その他
これらの統合は、上記の例で示したのと同じ tools パラメータを使用して設定してエージェントに追加できます。
以上