LangGraph入門:言語モデルを使った状態管理可能なマルチエージェントアプリケーションの構築

大規模言語モデル

LangGraphとは

LangGraphは、大規模言語モデル(LLM)を使用して、状態管理が可能なマルチエージェントアプリケーションを構築するためのライブラリです。このライブラリは、LangChain社によって開発されました。

LangGraphの特徴は、以下の3つのキーワードで表現できます:

  • サイクル(循環)
  • 制御性
  • 永続性

これらの特徴により、LangGraphは他のLLMフレームワークと一線を画しています。

💡 初心者向け解説

LangGraphを簡単に例えると、レゴブロックのようなものです。様々な機能(ブロック)を組み合わせて、自分だけの特別なAIアプリケーション(レゴの作品)を作ることができるツールです。普通のAIアプリとの違いは、一度作ったアプリの中身を後から簡単に変更したり、途中で人間が介入したりできる点です。

LangGraphの主要機能

LangGraphには、以下のような主要機能があります:

  1. サイクルと分岐: アプリケーション内でループや条件分岐を実装できます。

    💡 解説: これは、AIに「もし〜なら、こうする。そうでなければ、別のことをする」といった指示を出せるということです。

  2. 永続性: グラフの実行中、各ステップの後に自動的に状態を保存します。

    💡 解説: AIの思考過程を途中で保存できるので、途中で中断してもそこから再開できます。

  3. 人間介在ワークフロー: グラフの実行を中断し、AIが計画した次のアクションを人間が承認または編集できます。

    💡 解説: AIの動きを人間がチェックしたり、修正したりできるので、より安全で正確な結果が得られます。

  4. ストリーミングサポート: 各ノードで生成される出力をリアルタイムでストリーミングできます。

    💡 解説: AIの思考過程をリアルタイムで見ることができ、長い処理でも途中経過がわかります。

  5. LangChainとの統合: LangChainやLangSmithとシームレスに統合できます(ただし、必須ではありません)。

    💡 解説: 他の便利なAIツールと簡単に連携できるので、より高度なアプリケーションが作れます。

インストール方法

LangGraphをインストールするには、以下のコマンドをターミナルで実行します:

pip install -U langgraph

💡 初心者向け解説

このコマンドは、「パッケージマネージャー」というソフトウェアを使って、インターネットからLangGraphをダウンロードし、あなたのコンピュータにインストールするものです。-Uオプションは、既にインストールされている場合に最新版にアップデートする指示です。

基本的な使い方

ステートの概念

LangGraphの中心的な概念の1つが「ステート(状態)」です。グラフの実行ごとに状態が作成され、この状態がグラフ内のノード間で受け渡されます。

💡 解説

「ステート」は、アプリケーションの現在の状況を表すものです。例えば、チャットボットの場合、これまでの会話履歴がステートに含まれます。ステートがあることで、AIは以前の会話を覚えていられるのです。

グラフの構築

LangGraphでは、アプリケーションの流れを「グラフ」として表現します。グラフは「ノード」と「エッジ」で構成されます。

💡 解説

グラフは、道路地図のようなものです。ノードは交差点、エッジは道路に相当します。AIはこの地図に従って動作します。

ノードの定義

ノードは、特定の処理を行う場所です。例えば、「AIモデルに質問する」「ウェブ検索を行う」といった処理をノードとして定義します。

エッジの設定

エッジは、ノード間の接続を表します。「通常のエッジ」と「条件付きエッジ」があります。

💡 解説

  • 通常のエッジ:必ず次のノードに進みます。
  • 条件付きエッジ:条件によって進む先が変わります。「もし〜なら、Aに行く。そうでなければBに行く」というような指示です。

実践的な例:天気情報検索エージェント

ここでは、LangGraphを使って簡単な天気情報検索エージェントを作成する例を見ていきましょう。

必要なライブラリのインストール

まず、必要なライブラリをインストールします:

pip install langchain_openai langchain_community

APIキーの設定

OpenAIとTavily SearchのAPIキーを環境変数として設定します:

export OPENAI_API_KEY=sk-...
export TAVILY_API_KEY=tvly-...

💡 注意

実際のAPIキーは公開しないように注意してください。これらは秘密の鍵のようなものです。

コードの解説

以下、コードの主要部分を解説していきます:

from typing import Annotated, Literal, TypedDict
from langchain_core.messages import HumanMessage
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain_openai import ChatOpenAI
from langgraph.checkpoint import MemorySaver
from langgraph.graph import END, StateGraph, MessagesState
from langgraph.prebuilt import ToolNode

# ツールの定義
tools = [TavilySearchResults(max_results=1)]
tool_node = ToolNode(tools)

model = ChatOpenAI(temperature=0).bind_tools(tools)

# 継続判断関数
def should_continue(state: MessagesState) -> Literal["tools", END]:
    messages = state['messages']
    last_message = messages[-1]
    if last_message.tool_calls:
        return "tools"
    return END

# モデル呼び出し関数
def call_model(state: MessagesState):
    messages = state['messages']
    response = model.invoke(messages)
    return {"messages": [response]}

# グラフの定義
workflow = StateGraph(MessagesState)
workflow.add_node("agent", call_model)
workflow.add_node("tools", tool_node)
workflow.set_entry_point("agent")
workflow.add_conditional_edges("agent", should_continue)
workflow.add_edge("tools", 'agent')

# メモリの初期化
checkpointer = MemorySaver()

# グラフのコンパイル
app = workflow.compile(checkpointer=checkpointer)

# グラフの実行
final_state = app.invoke(
    {"messages": [HumanMessage(content="what is the weather in sf")]},
    config={"configurable": {"thread_id": 42}}
)
print(final_state["messages"][-1].content)

このコードは以下のような流れで動作します:

  1. 必要なツールとモデルを初期化します。
  2. グラフの構造を定義します。
  3. 各ノードの動作を関数として定義します。
  4. グラフをコンパイルして実行可能な形にします。
  5. 実際に質問を投げかけて結果を得ます。

💡 初心者向け解説

このコードは、「天気を聞かれたら、AIが検索ツールを使って情報を探し、その結果を人間に伝える」という一連の流れを自動化しています。人間の質問→AI→検索ツール→AI→人間への回答、という順序で情報が流れていくイメージです。

LangGraphの活用シーン

LangGraphは以下のようなシーンで特に威力を発揮します:

  1. 複雑な対話システム: 多段階の会話や、状況に応じて異なる応答が必要な対話システムの構築。
  2. マルチエージェントシステム: 複数のAIエージェントが協力して問題を解決するシステムの開発。
  3. 人間とAIの協調作業: AIの判断を人間がチェックし、必要に応じて修正を加えるワークフローの実現。
  4. 長期的なタスク管理: 複数のセッションにまたがる長期的なタスクの管理と実行。

📒ノートブック

Google Colab

まとめ

LangGraphは、AIを使った複雑なアプリケーションを構築するための強力なツールです。その特徴である「サイクル」「制御性」「永続性」により、従来のAIフレームワークでは難しかった柔軟で高度なアプリケーションの開発が可能になります。

初心者の方にとっては、最初は少し難しく感じるかもしれません。しかし、基本的な概念を理解し、少しずつ実践していくことで、AIの可能性を大きく広げるツールとなるでしょう。

LangGraphを使いこなすことで、あなたのアイデアを現実のAIアプリケーションとして実現できるようになります。ぜひ、この記事を参考に、LangGraphの世界を探索してみてください。

🌟 次のステップ

  • LangGraphの公式ドキュメントを読む
  • 簡単なプロジェクトを作ってみる
  • コミュニティに参加して、他の開発者と知識を共有する

AIの世界は日々進化しています。LangGraphを学ぶことで、あなたもその最前線に立つことができるでしょう。頑張ってください!

コメント

タイトルとURLをコピーしました