核心概念

图 (Graph)

LangGraphGo 的核心是图。图定义了应用程序的工作流。它由节点(Nodes)和边(Edges)组成。

StateGraph 是最常用的图类型,它允许你定义一个状态 Schema,并在节点之间传递状态。

状态 (State)

状态是图在执行过程中维护的数据。每个节点接收当前状态作为输入,并返回状态更新作为输出。

LangGraphGo 支持自定义状态 Schema,允许你定义如何合并来自不同节点的更新(例如,覆盖、追加等)。

节点 (Nodes)

节点是执行具体逻辑的函数。它们可以是调用 LLM、执行工具、或者只是简单的代码逻辑。

func MyNode(ctx context.Context, state MyState) (MyState, error) {
    // 执行逻辑
    return newState, nil
}

边 (Edges)

边定义了节点之间的控制流。

并行执行

当多个节点共享同一个起始节点时,LangGraphGo 会自动并行执行它们。结果将使用图的状态合并器或 Schema 进行合并。

g.AddEdge("start", "branch_a")
g.AddEdge("start", "branch_b")
// branch_a 和 branch_b 将并发运行

人工介入 (HITL)

LangGraphGo 支持在图执行过程中暂停,允许人工干预。这对于需要人工批准或输入的场景非常有用。

config := &graph.Config{
    InterruptBefore: []string{"human_review"},
}
// 执行在 "human_review" 节点前停止

Checkpointers

Checkpointers 用于持久化图的状态。这使得你可以保存执行进度,并在稍后恢复(例如,用于长运行的对话或故障恢复)。

支持的后端包括 Redis, Postgres, SQLite 等。

import (
    "github.com/smallnest/langgraphgo/checkpoint/sqlite"
    "github.com/smallnest/langgraphgo/graph"
)

// 1. 初始化 SQLite Checkpoint Store
store, err := sqlite.NewSqliteCheckpointStore(sqlite.SqliteOptions{
    Path:      "./checkpoints.db",
    TableName: "checkpoints",
})
if err != nil {
    panic(err)
}
defer store.Close()

// 2. 配置 Checkpoint 选项
config := graph.CheckpointConfig{
    Store:          store,
    AutoSave:       true,
    SaveInterval:   2 * time.Second,
    MaxCheckpoints: 5,
}

// 3. 将配置应用到图
g := graph.NewStateGraph()
g.SetCheckpointConfig(config)