AIパーソナル・ラーニング
と実践的なガイダンス

LangGraph: 有向非循環グラフトポロジーに基づくAIエージェント構築・実行フレームワーク

人工知能(AI)は急速に成長している分野である。言語モデルは、AIエージェントが複雑なタスクを実行し、複雑な意思決定を行えるように進化してきた。しかし、これらのエージェントのスキルが成長し続けるにつれて、それをサポートするインフラは追いつくのに苦労している。

LangGraphは、AIエージェントに革命をもたらす画期的なライブラリです。 ビルドとランタイム 実施する。


ラングラフが新しいエージェントを発表ビルドとランタイムエージェントのワークフローを循環グラフトポロジーに基づく構造として捉える構成的パラダイム。

 

LangGraphとは?

LangChainの重要な価値提案は、カスタムチェーンを簡単に作成できることです。しかし、LangChainにはチェーンにループを導入する簡単な方法がありません。実際、これらのチェーンは有向無サイクルグラフ(ディーエージー) - ほとんどのデータ・オーケストレーション・フレームワークがそうであるように。

複雑なLLMアプリケーションを作るときによくあるパターンは、ランタイムにループを導入することだ。これらのループは、ループ内の次のアクションを推論するためにLLMを利用することが多い。これは本質的にLLMをforループで実行するのと同じことだ。このようなシステムはしばしばエージェントと呼ばれる。

最も単純な形は、2つのステップを持つループである:

  1. LLMを呼び出して、どのようなアクションを取るべきか、あるいはどのような応答をユーザーに与えるべきかを決定する。
  2. 指定された操作を実行し、ステップ1に戻る。

このステップを最終レスポンスが生成されるまで繰り返します。これはLangChainの心臓部であるAgentExecutorを駆動するループです。 非常にシンプルなループですが、LLMの手にほとんどすべての意思決定と推論力を委ねるため、最も重要なループでもあります。

このプロセスは通常、より多くの制御を必要とすることに注意することが重要です。例えば、エージェントに特定のツールを最初に起動させる、ツールの起動方法をより制御する、エージェントの状態に応じて異なるプロンプトを表示する、などです。

これらは制御されたプロセスで、LangChainでは "ステートマシン "と呼んでいる。

これらのステートマシンにはループ機能があるが、このループの構築には人間の介入が必要である。

LangGraphは、グラフとして指定することで、これらのステートマシンを作成する。

LangGraphはLangChainの上に構築されており、LangChainエコシステムと完全な互換性があります。相互運用性.主にループ図を簡単に作成する方法を導入することで、新たな価値を付加しています。これはエージェントのランタイムを作成する際に非常に便利である。

このアプローチにより、エージェントは従来の線形実行モデルよりも多様で微妙な挙動を示すことができます。グラフ理論を用いて、LangGraphは複雑なネットワーク化されたエージェントシステムを開発する新しい方法を提供します。

図:コード生成のためのLangGraph

例:動的質疑応答システム

取る 一度にすべての情報を送るのではなく、段階を追ってモデルに情報を提供する。

処方 環状図を使ってください:

  1. LLMに初期応答を生成させる。
  2. 回答が不完全であったり、より多くの情報が必要な場合は、新しい質問を生成し、ユーザーに質問を続けます。
  3. 問題が解決したことをユーザーが確認するまで。

サイクルダイヤグラムの構造

  • ノード各ノードは、テキスト生成、質問応答、データ処理など、特定のタスクや操作を表す。
  • エッジノード間の接続はタスクの実行順序を示す。
  • ルーピング・パスループは、あるノードの出力を前のノードにフィードバックする必要がある場合や、繰り返し実行する必要がある場合に形成される。
  • 停止条件例えば、結果の品質が要求を満たしたとき、設定された回数制限に達したとき、あるいは外部トリガーの停止信号が作動したときなどである。

 

なぜLangGraphを使うのか?

  • 熟練 AIエージェントが進化するにつれて、開発者は、パーソナライズされたアクションプランと意思決定手順を可能にするために、エージェントのランタイムをよりコントロールする必要があります。
  • AIの推論の循環的性質 複雑なLLMアプリケーションの多くは、連鎖推論のようなストラテジーを使うとき、サイクリックな実行に依存している。LangGraphは、このようなサイクリックなプロセスをモデル化するための自然なフレームワークを提供する。
  • マルチインテリジェンス・システム マルチインテリジェンス・ワークフローが一般的になるにつれ、複数の自律的インテリジェンスを効率的に管理・調整できるシステムの必要性が高まっている。

 

コードを使ってLangGraphがどのように機能するか見てみよう

LangGraphの機能はいくつかの基本要素に基づいている:

  • ノード これらは機能やエージェントのためのツールである。
  • エッジ。 エージェントシステムにおける実行とデータフローのパスを定義し、ノードを接続します。
  • StateGraph。 LangGraphでは、ステート・オブジェクトを管理・更新することで、実行サイクル間で永続的なデータを維持することができる。

図:LangGraphの基本ワークフロー

ステートグラフ

ステートグラフ はグラフを表すクラスである。グラフを作成するには 状態 定義を使用してこのクラスを初期化します。状態定義は、時間の経過とともに更新される中央の状態オブジェクトを表す。この状態は、グラフ内のノードによって更新され、ノードは、キー・バリュー・ストアの形でこの状態の属性に対する操作を返す。

import os # オペレーティングシステムモジュールをインポートする。
os.environ['OpenAI_API_KEY'] = 'hk-iwtbi1e427'
from typing import Annotated
from typing_extensions import TypedDict
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages
class State(TypedDict).
    #メッセージは "list "型で、Annotatedの "add_messages "はメッセージの更新方法を定義しています。
    #この例では、メッセージはリストに追加され、上書きはされません。
    messages: Annotated[list, add_messages].
# StateGraphのインスタンスを作成し、Stateクラスを渡します。
graph_builder = StateGraph(State)

ノード

を作成する。 ステートグラフ その後 graph.add_node(name, value) ノードを追加する構文。 名称 引数はノード名の文字列である。 価値 引数は、呼び出される関数または実行可能なLCELである。

この関数 /LCEL は、以下のような関数を受け付ける。 状態 オブジェクトは入力と同じ形式の辞書を持ち、その辞書を出力する。 状態 オブジェクトのキーで辞書を更新する。

from langchain_openai import ChatOpenAI # インポート ChatOpenAI from langchain_openai モジュール
llm = ChatOpenAI( # ChatOpenAIのインスタンスを作成します。
    model="gpt-4o-mini", # モデルの指定
    temperature=0, # 温度を設定する
    base_url="https://api.openai-hk.com/v1" # ベースURLを設定する
)
def chatbot(state: State):# State型の引数を受け付けるチャットボット関数を定義します。
    """
    チャットボットのリクエストを処理し、メッセージを返します。
    パラメータ
    state (State): メッセージの状態を含みます。
    戻り値
    dict: ボットが生成したメッセージの辞書。
    """
    return {"messages": [llm.invoke(state["messages"])]} # メッセージを含む辞書を返します。
# 最初の引数はノード名です。
# 第2引数は呼び出される関数またはオブジェクト
graph_builder.add_node("chatbot", chatbot) # "chatbot "という名前のノードをグラフに追加する。

エッジ

一方のノードが常にもう一方のノードの後に呼び出されることを示す。

# STARTから "chatbot "へのエッジの追加
graph_builder.add_edge(START, "chatbot")
# "chatbot "からENDにエッジを追加する。
graph_builder.add_edge("chatbot", END)  

コンパイル コンパイル

グラフを定義したら、コンパイルして実行可能にする!LangChainと同じメソッド ( .invoke 属 ストリーム 属 .astream_log など)、チェーンと同じように呼び出すことができる。

graph = graph_builder.compile() # グラフのコンパイル

うごきだす

def stream_graph_updates(user_input: str): # ユーザー入力を受け付けるstream_graph_updates関数を定義する。
    """
    user_input を使用してグラフ更新メッセージをストリームします。
    パラメータ
    user_input (str): ユーザー入力メッセージ。
    戻り値
    なし
    """
    # グラフのストリームイベントを繰り返し、ユーザーメッセージを渡してモデルのレスポンスを取得する
    for event in graph.stream({"messages": [("user", user_input)]]}): # グラフのストリームイベントを辿る
        for value in event.values(): #イベントの値をトラバースする
            print("Assistant:", value["messages"][-1].content) # アシスタントからの最後のメッセージを表示する
whileTrue.
    試す
        user_input = input("User: ") #ユーザー入力を取得する
        if user_input.lower() in ["quit", "exit", "q"]: # ユーザーが終了を望んでいるかチェックします。
            print("Goodbye!")
            break# ループを抜ける
        # stream_graph_updates関数を呼び出して、ユーザ入力を処理する
        stream_graph_updates(user_input)
    except: # キャッチ例外
        # input()が利用できない場合のフォールバック
        user_input = "LangGraphについて何を知っていますか?" #デフォルトのユーザ入力を設定する
        print("User: " + user_input) #ユーザ入力を表示
        stream_graph_updates(user_input) #デフォルト入力を処理するためにstream_graph_updates関数を呼び出します。
        break# ループを終了

視覚化「ダイアグラム」(オプション)

Jupyter Notebook環境で「ダイアグラム」を視覚化する

営業効果

LangGraphのようなフレームワークは、AIの進化とともにますます重要になってきている。

開発者がLangGraphの機能をより使いこなすようになれば、より複雑なタスクを実行できる、より高度なAIエージェントの登場が期待できる。

要約すると、LangGraphはAIエージェント開発における重要な進歩です。LangGraphは今後のAI開発の方向性に大きな影響を与える可能性を秘めています。

無断転載を禁じます:チーフAIシェアリングサークル " LangGraph: 有向非循環グラフトポロジーに基づくAIエージェント構築・実行フレームワーク

チーフAIシェアリングサークル

チーフAIシェアリングサークルは、AI学習に焦点を当て、包括的なAI学習コンテンツ、AIツール、実践指導を提供しています。私たちの目標は、高品質のコンテンツと実践的な経験の共有を通じて、ユーザーがAI技術を習得し、AIの無限の可能性を一緒に探求することです。AI初心者でも上級者でも、知識を得てスキルを向上させ、イノベーションを実現するための理想的な場所です。

お問い合わせ
ja日本語