グラフ状態の永続化(チェックポイント)
状態をPostgresまたはSQLiteに保存し、長時間実行するエージェントを一時停止、再開、監査できるようにします。
「グラフ状態の永続化(チェックポイント)」は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 planinterrupt_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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- グラフがフラットなチェーンに勝る理由
- ノード、エッジ、状態
- 条件付きルーティングと分岐
- グラフ状態の永続化(チェックポイント)