エージェントは完全なレスポンス用に .invoke() / await .ainvoke() を使用するか、増分ストリーミング出力用に .stream() / .astream() のいずれかを使用して、同期と非同期実行の両方をサポートします。このセクションはどのように入力を提供し、出力を解釈し、ストリーミングを有効にし、そして実行制限を制御するかを説明します。
LangGraph : Prebuilt エージェント : エージェントの実行
作成 : クラスキャット・セールスインフォメーション
作成日時 : 06/08/2025
* 本記事は langchain-ai.github.io の以下のページを独自に翻訳した上で、補足説明を加えてまとめ直しています :
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
◆ お問合せ : 下記までお願いします。
- クラスキャット セールス・インフォメーション
- sales-info@classcat.com
- ClassCatJP
LangGraph : Get started : Prebuilt エージェント : エージェントの実行
エージェントは、完全なレスポンス用に .invoke() / await .ainvoke() を使用するか、増分 (incremental) ストリーミング 出力用に .stream() / .astream() のいずれかを使用して、同期と非同期実行の両方をサポートします。このセクションはどのように入力を提供し、出力を解釈し、ストリーミングを有効にし、そして実行制限を制御するかを説明します。
基本的な使用方法
エージェントは 2 つの主要なモードで実行されます :
- 同期 .invoke() または .stream() を使用
- 非同期 await .ainvoke() または async for を .astream() と共に使用
同期呼び出し
from langgraph.prebuilt import create_react_agent
agent = create_react_agent(...)
response = agent.invoke({"messages": [{"role": "user", "content": "what is the weather in sf"}]})
非同期呼び出し
from langgraph.prebuilt import create_react_agent
agent = create_react_agent(...)
response = await agent.ainvoke({"messages": [{"role": "user", "content": "what is the weather in sf"}]})
入力と出力
エージェントは入力として messages のリストを想定する言語モデルを使用します。従って、エージェントの入力と出力はエージェント 状態 の messages キーの下に messages のリストとしてストアされます。
入力形式
エージェント入力は messages キーを持つ辞書である必要があります。サポート形式は :
形式 | 例 |
---|---|
文字列 | {“messages”: “Hello”} — HumanMessage として解釈されます |
Message 辞書 | {“messages”: {“role”: “user”, “content”: “Hello”}} |
messages のリスト | {“messages”: [{“role”: “user”, “content”: “Hello”}]} |
With カスタム状態 | {“messages”: [{“role”: “user”, “content”: “Hello”}], “user_name”: “Alice”} — If using a custom state_schema |
メッセージは自動的に LangChain の内部メッセージ形式に変換されます。You can read more about LangChain messages in the LangChain documentation.
Note : messages 用の文字列入力は HumanMessage に変換されます。この動作は create_react_agent の prompt パラメータとは異なります、それは文字列として渡されたとき SystemMessage として解釈されます。
出力形式
エージェント出力は以下を含む辞書です :
- messages: 実行中に交換されたすべてのメッセージ (ユーザ入力、アシスタントの応答、ツール呼び出し) のリスト
- オプションで、構造化出力 が設定されている場合は structured_response
- カスタム state_schema を使用する場合、定義済みフィールドに対応する追加キーもまた出力に存在する場合があります。これらはツール実行やプロンプトロジックから更新された状態値を保持できます。
See the context guide for more details on working with custom state schemas and accessing context.
ストリーミング出力
エージェントはより応答性の高いアプリケーションのためにストリーミング応答をサポートします。これは以下を含みます :
- 各ステップ後の進捗更新 (progress update)
- 生成中の LLM トークン
- 実行中の カスタムツール・メッセージ
ストリーミングは同期と非同期モードの両方で利用可能です :
同期ストリーミング
for chunk in agent.stream(
{"messages": [{"role": "user", "content": "what is the weather in sf"}]},
stream_mode="updates"
):
print(chunk)
非同期ストリーミング
async for chunk in agent.astream(
{"messages": [{"role": "user", "content": "what is the weather in sf"}]},
stream_mode="updates"
):
print(chunk)
Tip : For full details, see the streaming guide.
最大反復数
エージェント実行を制御して無限ループを回避するため、再帰制限 (recursion limit) を設定します。これは、GraphRecursionError を発生させる前に、エージェントが取ることができる最大ステップ数を定義します。recursion_limit は実行時、または .with_config() でエージェントを定義するときに設定できます :
実行時
from langgraph.errors import GraphRecursionError
from langgraph.prebuilt import create_react_agent
max_iterations = 3
recursion_limit = 2 * max_iterations + 1
agent = create_react_agent(
model="anthropic:claude-3-5-haiku-latest",
tools=[get_weather]
)
try:
response = agent.invoke(
{"messages": [{"role": "user", "content": "what's the weather in sf"}]},
{"recursion_limit": recursion_limit},
)
except GraphRecursionError:
print("Agent stopped due to max iterations.")
.with_config()
from langgraph.errors import GraphRecursionError
from langgraph.prebuilt import create_react_agent
max_iterations = 3
recursion_limit = 2 * max_iterations + 1
agent = create_react_agent(
model="anthropic:claude-3-5-haiku-latest",
tools=[get_weather]
)
agent_with_recursion_limit = agent.with_config(recursion_limit=recursion_limit)
try:
response = agent_with_recursion_limit.invoke(
{"messages": [{"role": "user", "content": "what's the weather in sf"}]},
)
except GraphRecursionError:
print("Agent stopped due to max iterations.")
追加リソース
以上