0Pricing
AI Agents · レッスン

ノード、エッジ、状態

TypedDictの状態を定義し、それを変更するノード関数を記述して、有向エッジで接続します。

「ノード、エッジ、状態」はCoddyKit上の無料AI Agentsレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAI Agents学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AI Agentsコースには全4レッスンが含まれています。

このレッスンの一部はまだ翻訳されておらず、英語で表示されています。

状態オブジェクト

すべてのLangGraphエージェントには型付きの状態があり、通常はTypedDictを使用します:

from typing import TypedDict
from typing_extensions import Annotated
import operator

class AgentState(TypedDict):
    messages: Annotated[list, operator.add]   # appends instead of replaces
    plan: str
    answer: str

状態の更新方法

各ノードは部分的なdictを返します。LangGraphは次の処理を行います:

  1. 現在の状態を読み取る
  2. その状態を渡してノードを呼び出す
  3. 返された部分的なdictを状態にマージする

operator.addを使うリストフィールドでは、既存の値が上書きされず、新しい項目が追加されます。

Defining a Node

def planner(state: AgentState) -> dict:
    prompt = f'User wants: {state["messages"][-1].content}'
    plan = llm.invoke(prompt).content
    return {'plan': plan}

Registering the Node

from langgraph.graph import StateGraph, END

graph = StateGraph(AgentState)
graph.add_node('planner', planner)

エッジの定義

静的エッジは無条件に実行されます:

graph.set_entry_point('planner')
graph.add_edge('planner', 'researcher')
graph.add_edge('researcher', 'writer')
graph.add_edge('writer', END)

条件付きエッジ

分岐には、次のノードを選択する関数を登録します:

def route(state: AgentState) -> str:
    if state['needs_research']:
        return 'researcher'
    return 'writer'

graph.add_conditional_edges(
    'planner',
    route,
    {'researcher': 'researcher', 'writer': 'writer'}
)

ENDは特別です

ENDは終端ノードです。ENDへのエッジがあるとグラフは終了し、現在の状態を返します。

Compiling the Graph

app = graph.compile()
result = app.invoke({'messages': [...]})
print(result['answer'])

状態更新のストリーミング

状態の変化をリアルタイムで確認します:

for event in app.stream({'messages': [...]}):
    print(event)
# Each event is the state diff from the just-completed node.

リデューサー関数

複雑な状態のマージには、カスタムリデューサーを使用します:

def merge_facts(old, new):
    return {**old, **new}

class State(TypedDict):
    facts: Annotated[dict, merge_facts]

サブグラフ

ノード自体を別のコンパイル済みグラフにできます。階層型エージェントに便利です:

subgraph = StateGraph(SubState).compile()
graph.add_node('subprocess', subgraph)

非同期ノード

ノードには非同期関数を指定できます:

async def fetch_node(state):
    data = await fetch_async(state['url'])
    return {'data': data}

result = await app.ainvoke({...})

ノード内のエラー

ノードで例外が発生すると、LangGraphはそのエラーを伝播させて停止します。適切に処理したい場合は、ノード内で捕捉してください:

def safe_search(state):
    try:
        return {'results': search(state['query'])}
    except Exception as e:
        return {'error': str(e), 'results': []}

状態の更新

ノードがdictとして{'plan': '...'}を返すと、何が起こりますか?

まとめ

TypedDictで状態を定義し、部分的な更新を返す関数を記述し、ノードとエッジを追加して、コンパイルして実行します。これがLangGraphです。

よくある質問

「ノード、エッジ、状態」レッスンは無料ですか?

はい。「ノード、エッジ、状態」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AI Agentsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI Agentsコースには全4レッスンが含まれています。

「ノード、エッジ、状態」で何を学びますか?

TypedDictの状態を定義し、それを変更するノード関数を記述して、有向エッジで接続します。 ブラウザで直接実行するハンズオンコードでAI Agentsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

AI Agentsを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのAI Agentsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「ノード、エッジ、状態」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このAI Agentsレッスンでコードを書いて実行できますか?

はい。すべてのAI Agentsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. グラフがフラットなチェーンに勝る理由
  2. ノード、エッジ、状態
  3. 条件付きルーティングと分岐
  4. グラフ状態の永続化(チェックポイント)
← AI Agentsに戻る