预构建 Agent (Prebuilt Agents)
虽然 LangGraphGo 提供了构建任意图的底层能力,但对于许多常见任务,我们不需要从零开始。LangGraphGo 提供了一系列预构建的 Agent 工厂函数,封装了最佳实践,让你能快速启动。
1. ReAct Agent
背景与功能
ReAct (Reason + Act) 是最流行的 Agent 模式之一。它允许 LLM 在生成回复之前,先进行推理并调用工具获取信息。这种循环(思考 -> 行动 -> 观察 -> 思考)使得 Agent 能够解决需要外部知识或计算能力的问题。
实现原理
CreateReactAgent 内部构建了一个包含两个主要节点的图:
- Agent 节点: 调用 LLM,根据当前状态决定是回复用户还是调用工具。
- Tools 节点: 执行 LLM 请求的工具调用,并将结果返回给 Agent。
这两个节点通过条件边连接,形成一个闭环,直到 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("管理研究员、作家和审稿人..."),
)