こんにちは、石原です。
はじめに
2025年は「AIエージェント元年」とも呼ばれ、生成AIアプリケーションの進化が目覚ましい情勢となっています。そんな中、langgraphを使用して、最も簡単にエージェントを作成する方法が create_react_agent です。本記事では、その実装にフォーカスし、ソースコードを読み解くことで、AIエージェント実装の基本や仕組みについて解説していきます。
そもそもAIエージェントって?
AIエージェントとは、生成AIを活用して半自律的に判断・行動を行うプログラムのことです。これらのエージェントは、ユーザーの指示や環境からのフィードバックに基づいて、データの解析、意思決定、タスクの自動実行などを行います。
従来のルールベースのシステムと異なり、より柔軟で高度な知識獲得と適応が可能となっており、人間のような複雑なタスク処理が実現されています。
さらに、さまざまなツールやAPIとの連携により、情報の取得から処理、最終的な結果の提示までをシームレスに行うことができ、ビジネスや日常生活の多岐にわたるシーンでその応用が期待されています。
その中でも今回実装を確認していくAIエージェントはReActエージェントと呼ばれるものです
ReActエージェント
ReActエージェントとは2022年に公開された「ReAct: Synergizing Reasoning and Acting in Language Models」によって提案された手法で、「Reason:推論」と「Act:行動」を繰り返すことで生成AIが実行可能なタスクを拡張することができます
これは、もともと提案されていた「Chain of Thought」に代表される推論をすることで性能を上げる手法と「RAG」に代表されるような生成AIと別アプリケーションの実行結果を追加することで性能を上げる手法を組み合わせた方法になっています。
現在、AIエージェントとして一般に用いられているのは≒ReActエージェントと考えても差し支えないと思います。
create_react_agentの基本となる呼び出し方
それではまず、動かし方を試してみましょう。LangGraphで用意されているcreate_react_agentを呼び出してAIエージェントを作っていきます。
ReActエージェント開発の上では「Act」となるツールと呼ばれるものは切っても切り離せない関係にあります。まずはツール作成から見てみましょう。
ツールの作成
もっとも簡単なツールを作成する方法はツールデコレーターを使用し、関数をツール化することです。
今回は簡単化のために下記のようにルールベースで都市名が与えられたときにその日付を返す関数とユーザの住所を返す関数を定義します。
|
使用可能なツールはリストの形で定義します。これはツールが1つの場合でも同様です。
|
これで後はモデルと、ツールをcreate_react_agentに渡すだけです。
|
invokeで呼び出すことが出来ます。
住所を与えずに呼び出してみましょう。
|
|
地方を変えて聞いてみます。
|
|
場所を聞いてみます。
|
|
何も関係のない質問を投げてみます。
|
|
処理の流れを見る
それではcreate_react_agentの関数を見ていきましょう。(今回の呼び出しの際に実行されていない部分はスキップしています。)
stateの指定が無い場合、AgentStateが使用されます。
|
AgentStateクラスは以下のようになっています。
messagesは要素が次々と追加されていくようにadd_messagesが設定されています。
is_last_stepは最終ステップかどうかのbool、remaining_stepsは残りのステップ数が入ります。
|
例えば下記のようにrecursion_limitを設定している場合はここの数値がstepの各値に反映されます。
|
はじめのagentのリターン
|
それ以外の場合は基本的には使用されていないようです。
次の処理部分では入力されたツールリストをlanggraphに定義されているTool Node変換しています。Tool Nodeは、メッセージの最後の要素(tool_callが入っている)を取得し、対応するツールを実行、その結果となるToolMessage型に変換し、メッセージへappendするという処理が実装されています。
|
最終的な出力の型を指定している場合は変換するためのノードが追加されます。
|
エッジの追加部分ではshould_continue関数を使用しています。
|
最後のメッセージクラスによって処理の分岐を実施し、AImessageでないかtool_callでなければ次のノード(先ほど指定したレスポンスフォーマットの指定によって最後か変換処理に分岐する)へ移ります。
それ以外の場合、バージョンの指定によって処理を分けています。v1の場合はToolNodeでの並列処理が行われ、v2の場合はToolNodeのインスタンスを複数立ち上げて実行する処理が立ち上がります。
要するにツールが呼び出されていたら実行し、それ以外なら終了させるだけですね。
|
toolによってreturn_directlyオプションが有効になっている場合はそのツール呼び出し後に実行が終了されるようになります。
|
最後にlanggraphで作成したグラフをコンパイルすればエージェントの完成です!
|
まとめ
この記事では、2025年を迎えた今、langgraphを使って手軽にReActエージェントを構築する方法を解説しました。ReActエージェントは「推論」と「行動」をうまく組み合わせ、スマートなタスク処理を実現します。実際の例として、桜の開花予想やユーザの住所を返す簡単なツールを作り、内部での状態管理やツール連携の仕組みを見てきました。
今回紹介したcreate_react_agentは驚くほど簡単にAIエージェントを作成できます。ツール側をメール送信のAPIやカレンダーにすることで業務サポートツールを作成したり、DBのAPIにして文章からSQLの実行までを試したり、複数のAIエージェントに仕事を割り振ることで精度の高いマルチエージェントシステムを作成することだってできます。
今後どのようなエージェントが構築されるのか自分も楽しみにしています。






