はじめに:2025年、AIエージェントは「実験」から「実働」へ
AIコンサルタントのユイです。
2025年現在、AI開発の現場では大きなパラダイムシフトが起きています。単にテキストを生成するだけのLLM(大規模言語モデル)活用から、自律的に思考し、ツールを使いこなし、複雑なタスクを完遂する「AIエージェント」の実装へと焦点が移っています。
特に、LangChainエコシステムにおけるオーケストレーションツールは、従来のAgentExecutorから、より制御性と堅牢性に優れた「LangGraph」へと標準が完全に移行しました。本記事では、最新のReActパターンに基づいたAIエージェントの構築方法を、実用的なPythonコードと共に解説します。
「理論はいいから、動くコードが欲しい」というエンジニアの方も、「自社にどう導入すればいいか知りたい」というビジネスリーダーの方も、この記事一つで2025年のエージェント開発の標準を理解できる構成となっています。
1. 自律型AIエージェントとLangGraphの基礎
実装に入る前に、現在の技術トレンドにおける重要な概念を整理しましょう。なぜ今、従来のLangChainエージェントではなく、LangGraphが選ばれるのでしょうか。
ReActパターン:エージェントの「脳」の仕組み
AIエージェントの動作原理として最も一般的なのがReAct(Reasoning + Acting)パターンです。これは以下のループを自律的に繰り返す仕組みです。
- Reasoning(推論): ユーザーの指示を理解し、「次に何をすべきか」を考える。
- Acting(行動): 必要なツール(検索、計算、API呼び出しなど)を選択して実行する。
- Observation(観察): ツールの実行結果を確認し、十分な情報が得られたか判断する。
LangChain AgentExecutor vs LangGraph
2024年まではAgentExecutorが主流でしたが、複雑な分岐や状態管理(メモリ)において限界がありました。2025年の実務開発では、グラフ構造でフローを定義するLangGraphがデファクトスタンダードです。
| 比較項目 | 従来の AgentExecutor | 最新の LangGraph |
|---|---|---|
| 制御構造 | 一本道(チェーン)で隠蔽されている | グラフ構造で可視化・制御が可能 |
| ループ処理 | 複雑なループの実装が困難 | 循環フロー(Cyclic Graph)を自然に記述 |
| メモリ管理 | ブラックボックス化しやすい | 永続化(Checkpoint)機能が強力 |
| 本番適性 | プロトタイプ向け | エンタープライズ本番運用向け |
LangGraphを採用することで、マルチエージェントシステムのような高度な連携も容易になります。
2. 【実践ガイド】LangGraphによるAIエージェント構築
ここからは、実際に手を動かして「会話の記憶を持ち、計算ツールを使えるエージェント」を構築します。このコードは、そのままローカル環境で実行可能です。
ステップ0:開発環境のセットアップ
Python 3.9以上推奨です。必要なライブラリをインストールします。
pip install langchain langchain-openai langgraph
※事前にOpenAI APIキーを環境変数 OPENAI_API_KEY に設定してください。
ステップ1:ツールとモデルの定義
まず、エージェントが使用する「道具」と「頭脳」を定義します。ここでは例として、単純な乗算ツールを作成します。
from langchain_core.tools import tool
from langchain_openai import ChatOpenAI
# 1. ツールの定義(@toolデコレータを使用)
@tool
def multiply(a: int, b: int) -> int:
"""2つの整数を掛け算します。計算が必要な場合に使用してください。"""
return a * b
tools = [multiply]
# 2. モデルの定義(ツールをバインド)
# 2025年の標準的なモデルとしてGPT-4o系を想定
llm = ChatOpenAI(model="gpt-4o", temperature=0)
llm_with_tools = llm.bind_tools(tools)
ステップ2:状態管理とグラフの構築
LangGraphの核心部分です。エージェントの状態(会話履歴)を定義し、ノード(処理)とエッジ(遷移)をつなぎます。
from typing import Annotated
from typing_extensions import TypedDict
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages
from langgraph.prebuilt import ToolNode
# 3. 状態(State)の定義
# add_messagesは、新しいメッセージを履歴リストに追加するReducer関数です
class State(TypedDict):
messages: Annotated[list, add_messages]
# 4. ノード関数の定義
def chatbot(state: State):
# 現在のメッセージ履歴をLLMに渡し、応答を得る
return {"messages": [llm_with_tools.invoke(state["messages"])]}
# 5. グラフの構築
graph_builder = StateGraph(State)
# ノードを追加
graph_builder.add_node("chatbot", chatbot)
graph_builder.add_node("tools", ToolNode(tools=tools))
# エントリーポイントを設定
graph_builder.add_edge(START, "chatbot")
# 条件付きエッジの定義
# LLMがツールを呼び出した場合はtoolsノードへ、そうでなければ終了
def route_tools(state: State):
if state["messages"][-1].tool_calls:
return "tools"
return END
graph_builder.add_conditional_edges("chatbot", route_tools, {"tools": "tools", END: END})
# ツール実行後は必ずchatbotに戻る(ReActループ)
graph_builder.add_edge("tools", "chatbot")
ステップ3:メモリの実装とコンパイル
会話を記憶させるために「Checkpointer」を設定します。開発中はインメモリ(再起動で消える)で十分ですが、本番ではSQLiteやPostgreSQLを使用します。
from langgraph.checkpoint.memory import MemorySaver
# 6. メモリ(Checkpointer)の初期化
memory = MemorySaver()
# 7. グラフのコンパイル
graph = graph_builder.compile(checkpointer=memory)
print("AIエージェントの起動完了!")
ステップ4:実行してみよう
thread_id を指定することで、エージェントは過去のやり取りを記憶します。
# 設定:スレッドID(会話セッションID)を指定
config = {"configurable": {"thread_id": "session_1"}}
# ユーザー入力1:計算を依頼
user_input = "3と5を掛け算して。"
for event in graph.stream({"messages": [("user", user_input)]}, config, stream_mode="values"):
event["messages"][-1].pretty_print()
# ユーザー入力2:記憶の確認(計算結果を覚えているか)
user_input_2 = "その結果に10を足すといくつ?"
for event in graph.stream({"messages": [("user", user_input_2)]}, config, stream_mode="values"):
event["messages"][-1].pretty_print()
実行結果のイメージ:
1回目の会話でツールを使用して「15」を導き出し、2回目の会話では「15」を文脈として保持しているため、「25です」と即答できます。これが自律型AIエージェントの基本的な挙動です。
3. ビジネス導入におけるメリットとリスク
技術的な実装が可能になったところで、ビジネス視点での導入効果と注意点を見ていきましょう。
導入のメリットとROI
AIエージェント導入の最大のメリットは、「判断の自動化」です。単なるQAボットとは異なり、社内APIを叩いて在庫確認をしたり、米国CDCの事例のように膨大なデータ処理を自律的に行うことで、数万時間規模の工数削減が期待できます。
直面するリスクと対策
一方で、エージェント特有のリスクも存在します。
- 無限ループ: エージェントが解決策を見つけられず、ツール呼び出しを延々と繰り返すリスク。LangGraphでは
recursion_limit(再帰制限)を設定することで防げます。 - ハルシネーションによる誤操作: 誤った引数でAPIを実行してしまうリスク。「Human-in-the-loop(人間による承認)」フローをグラフ内に組み込むことが推奨されます。
- コスト管理: 複雑な推論はトークン消費量が多いため、各ステップでのトークン監視が必須です。
まとめ:AIエージェント開発のネクストステップ
2025年におけるLangChain AIエージェントの実装は、LangGraphによって非常に体系的かつ堅牢になりました。今回のガイドで作成した基本的なReActエージェントをベースに、RAG(検索拡張生成)機能を追加したり、複数の専門エージェントを連携させたりすることで、より複雑なビジネス課題を解決できます。
まずは上記のコードをコピーし、お手元の環境で「AIが自律的に道具を使う様子」を体験してみてください。その小さな一歩が、業務自動化の大きな革命につながるはずです。


コメント