核心概念
图 (Graph)
LangGraphGo 的核心是图。图定义了应用程序的工作流。它由节点(Nodes)和边(Edges)组成。
StateGraph 是最常用的图类型,它允许你定义一个状态 Schema,并在节点之间传递状态。
状态 (State)
状态是图在执行过程中维护的数据。每个节点接收当前状态作为输入,并返回状态更新作为输出。
LangGraphGo 支持自定义状态 Schema,允许你定义如何合并来自不同节点的更新(例如,覆盖、追加等)。
节点 (Nodes)
节点是执行具体逻辑的函数。它们可以是调用 LLM、执行工具、或者只是简单的代码逻辑。
func MyNode(ctx context.Context, state MyState) (MyState, error) {
// 执行逻辑
return newState, nil
}
边 (Edges)
边定义了节点之间的控制流。
- 普通边:
g.AddEdge("nodeA", "nodeB")- A 执行完后执行 B。 - 条件边:
g.AddConditionalEdges("nodeA", routingFunction)- 根据 A 的输出动态决定下一个节点。
并行执行
当多个节点共享同一个起始节点时,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)