预构建 Agent (Prebuilt Agents)

虽然 LangGraphGo 提供了构建任意图的底层能力,但对于许多常见任务,我们不需要从零开始。LangGraphGo 提供了一系列预构建的 Agent 工厂函数,封装了最佳实践,让你能快速启动。

1. ReAct Agent

背景与功能

ReAct (Reason + Act) 是最流行的 Agent 模式之一。它允许 LLM 在生成回复之前,先进行推理并调用工具获取信息。这种循环(思考 -> 行动 -> 观察 -> 思考)使得 Agent 能够解决需要外部知识或计算能力的问题。

实现原理

CreateReactAgent 内部构建了一个包含两个主要节点的图:

这两个节点通过条件边连接,形成一个闭环,直到 LLM 决定结束。

代码展示

import "github.com/smallnest/langgraphgo/prebuilt"

// 1. 定义工具
tools := []llms.Tool{
    // ... 你的工具定义 ...
}

// 2. 创建 Agent
// 这个函数会自动构建图、添加节点和边
agent := prebuilt.CreateReactAgent(model, tools)

// 3. 运行
res, err := agent.Invoke(ctx, input)

2. 通用 Agent (CreateAgent)

背景与功能

有时你需要比 ReAct 更灵活的配置,例如自定义 System Message、添加 Checkpointer 或修改状态 Schema。CreateAgent 提供了一个更通用的入口。

实现原理

它使用 Go 的 Option 模式来接收配置。底层逻辑与 ReAct 类似,但允许更多的定制化。

代码展示

agent := prebuilt.CreateAgent(
    model,
    tools,
    // 自定义系统提示词
    prebuilt.WithSystemMessage("你是一个专注于数学问题的助手。"),
    // 启用持久化
    prebuilt.WithCheckpointer(checkpointer),
)

技能集成 (Skills Integration) v0.4.0

从 v0.4.0 开始,CreateAgent 支持动态技能加载。技能是可以按需加载和执行的功能模块,支持 Claude Skills 和其他技能系统。

// 创建支持技能的代理
agent := prebuilt.CreateAgent(
    model,
    tools,
    prebuilt.WithSkills(skillsConfig), // 启用技能支持
)

// 代理可以根据用户请求自动发现和加载相应技能
res, err := agent.Invoke(ctx, map[string]any{
    "messages": []string{"使用计算器技能帮我计算 123 * 456"},
})

查看 dynamic_skill_agent 示例 了解详细用法。

3. Supervisor (监督者)

背景与功能

如"多 Agent 系统"指南中所述,Supervisor 用于协调多个 Worker Agent。预构建的 CreateSupervisor 让你无需手动编写复杂的路由逻辑。

实现原理

它创建一个专门的 Supervisor 节点,该节点使用特殊的 Prompt 来引导 LLM 输出下一个 Worker 的名字。它还处理了状态的传递和结果的汇总。

代码展示

supervisor := prebuilt.CreateSupervisor(
    model,
    []string{"Researcher", "Writer", "Reviewer"}, // Worker 列表
    prebuilt.WithSupervisorSystemMessage("管理研究员、作家和审稿人..."),
)