LangGraph : Prebuilt エージェント : ツール

ツールは、関数とその入力スキーマをカプセル化し、ツール呼び出しをサポートするチャットモデルに渡せる手段です。これはモデルが特定の入力でこの関数の実行を要求することを可能にします。独自ツールを定義したり、LangChain が提供する事前定義済み統合機能を使用することができます。

LangGraph : Prebuilt エージェント : ツール

作成 : クラスキャット・セールスインフォメーション
作成日時 : 06/11/2025

* 本記事は langchain-ai.github.io の以下のページを独自に翻訳した上で、補足説明を加えてまとめ直しています :

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

クラスキャット 人工知能 研究開発支援サービス ⭐️ リニューアルしました 😉

クラスキャット は人工知能に関する各種サービスを提供しています。お気軽にご相談ください :

  • 人工知能導入個別相談会(無償)実施中! [詳細]

  • 人工知能研究開発支援 [詳細]
    1. 自社特有情報を含むチャットボット構築支援
    2. 画像認識 (医療系含む) / 画像生成

  • PoC(概念実証)を失敗させないための支援 [詳細]

お問合せ : 下記までお願いします。

  • クラスキャット セールス・インフォメーション
  • 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 パラメータを使用して設定してエージェントに追加できます。

 

以上