AI Agents · レッスン

グラフ状態の永続化(チェックポイント)

状態をPostgresまたはSQLiteに保存し、長時間実行するエージェントを一時停止、再開、監査できるようにします。

レッスン 4/415 ステップ

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

状態を永続化する理由

長時間実行されるエージェントには、次の機能が必要です:

  • 数時間後に一時停止して再開する
  • 実行途中のクラッシュから復旧する
  • 人間参加型処理(承認を待つ)をサポートする
  • デバッグのために実行を再現する

LangGraphのチェックポインターは、すべてのノード境界で状態を永続化します。

インメモリチェックポインター

開発やテスト用:

from langgraph.checkpoint.memory import MemorySaver

checkpointer = MemorySaver()
app = graph.compile(checkpointer=checkpointer)

Postgresチェックポインター

本番環境用:

from langgraph.checkpoint.postgres import PostgresSaver

checkpointer = PostgresSaver.from_conn_string('postgresql://...')
await checkpointer.setup()   # create tables
app = graph.compile(checkpointer=checkpointer)

Sqliteチェックポインター

DBサーバーなしでローカルに永続化します:

from langgraph.checkpoint.sqlite import SqliteSaver
import sqlite3

conn = sqlite3.connect('agents.db', check_same_thread=False)
checkpointer = SqliteSaver(conn)

スレッドID

すべての実行にはセッションIDのようなthread_idがあります。複数のユーザーには個別のthread_idが割り当てられます。実行を再開するには同じIDを使用します:

config = {'configurable': {'thread_id': 'user-42-conversation-1'}}
result = app.invoke({'messages': [...]}, config)

実行の再開

同じthread_idで、入力を指定せずにinvokeを呼び出すと、エージェントは停止した場所から続行します:

# Some hours later:
app.invoke(None, config)

状態の確認

スレッドの現在の状態を読み取ります:

snapshot = app.get_state(config)
print(snapshot.values)         # current state dict
print(snapshot.next)           # which node is next
print(snapshot.created_at)

状態履歴

すべてのチェックポイントをさかのぼります:

for snapshot in app.get_state_history(config):
    print(snapshot.created_at, snapshot.values)

実行の分岐

過去の任意のチェックポイントで状態を更新し、そこから再実行できます。「もしも」のデバッグに便利です:

app.update_state(config, {'plan': 'a different plan'})
app.invoke(None, config)   # continue with the new plan

interrupt_beforeによる人間参加型処理

人間が確認できるよう、重要なノードの前で実行を一時停止します:

app = graph.compile(
    checkpointer=checkpointer,
    interrupt_before=['send_email']
)

result = app.invoke({'messages': [...]}, config)
# Agent paused. Human inspects state.
# When approved:
app.invoke(None, config)

編集後の再開

再開する前に、人間が状態を編集できます:

app.update_state(config, {'email_draft': 'final version'})
app.invoke(None, config)

チェックポイント間のコスト追跡

永続化された状態には、クラッシュ後も維持されるトークン数やコストのカウンターを含めることができます:

class State(TypedDict):
    cost_usd: Annotated[float, lambda a, b: a + b]

# Every LLM-calling node adds to it.

クリーンアップ

古いスレッドは蓄積します。ストレージを管理するため、完了したスレッドを定期的に削除します:

await checkpointer.delete(thread_id='old-thread')

スレッドの再開

クラッシュ後にエージェントの実行を再開するには、どうすればよいですか?

まとめ

ローカル環境ではSqliteSaver、本番環境ではPostgresSaverを使用します。スレッドIDで実行を分離します。interrupt_beforeと組み合わせて、人間参加型のワークフローを構築します。

無料で開始

AI チューターと学ぶ AI Agents — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
60
レッスン
239

よくある質問

「グラフ状態の永続化(チェックポイント)」レッスンは無料ですか?

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

「グラフ状態の永続化(チェックポイント)」で何を学びますか?

状態をPostgresまたはSQLiteに保存し、長時間実行するエージェントを一時停止、再開、監査できるようにします。 ブラウザで直接実行するハンズオンコードでAI Agentsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「グラフ状態の永続化(チェックポイント)」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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