Agent(智能代理)概念
深入理解智能代理的核心概念、架构类型和在 LangGraph 中的实现方式
引言
在人工智能的发展历程中,我们从简单的规则系统发展到了能够自主决策的智能代理。Agent 代表了 AI 应用的重要进化方向:让系统能够自主选择执行路径,而不是被动地遵循预定义流程。
本节将深入探讨 Agent 的核心概念、不同架构类型,以及它们在 LangGraph 中的实现思路。
📚 学习目标
学完这篇文章后,你将能够:
- 理解 Agent 与传统固定流程应用的核心区别
- 掌握三种主要的 Agent 架构(路由器、工具调用、ReAct)
- 学会在 LangGraph 中实现基本的 Agent 逻辑
- 了解 Human-in-the-Loop(人机交互)模式
前置知识
在开始学习之前,建议先阅读:
你需要了解:
- 基本的图结构和节点定义
- LLM 的基本能力(推理、生成)
1 什么是 Agent?
Agent(智能代理) 是一个使用 LLM 来决定应用控制流的系统。
核心能力
- 自主决策:根据当前情况选择下一步行动
- 动态适应:根据环境变化调整策略
- 工具使用:选择和使用各种外部工具
- 学习记忆:从历史经验中学习和改进
Agent vs 传统应用
| 特性 | 传统应用 | Agent 应用 |
|---|---|---|
| 流程 | 固定(预处理 -> LLM -> 后处理) | 动态循环(感知 -> 决策 -> 行动 -> 观察) |
| 灵活性 | 低,路径预定义 | 高,路径运行时决定 |
| 复杂度 | 低 | 高 |
传统应用的特点:高效、可预测、易于调试,但难以处理复杂场景。
Agent 应用的特点:灵活、智能、可处理复杂任务,但执行路径不确定,设计成本更高。
2 Agent 架构类型
1. 路由器(Router)
最简单的 Agent 类型,从预定义的多个路径中选择一条。
实现要点:使用 addConditionalEdges 根据分类结果路由到不同节点。
特点:
- ✅ 简单可靠、易于理解和调试
- ❌ 控制能力有限、只能做单次决策
2. 工具调用代理(Tool Calling Agent)
能够分析需求并自主调用工具。
工作流程:
- LLM 分析用户需求。
- LLM 决定是否调用工具,以及调用哪个工具。
- 执行工具,将结果返回给 LLM。
- LLM 根据工具结果生成最终回答。
代码示例:
const searchTool = tool(async ({ query }) => '搜索结果...', {
name: 'search',
description: '搜索相关信息',
schema: z.object({ query: z.string() }),
});
// LLM 会根据 description 决定何时调用实现要点:
- 使用
@langchain/core/tools的tool定义工具 - 工具需要清晰的
name、description、schema - LLM 根据工具描述自动选择合适的工具
3. ReAct 架构
ReAct = Reasoning(推理)+ Acting(行动)。
它让 Agent 在每一步都能“思考-行动-观察”,从而解决复杂问题。
在 LangGraph 中的实现思路:
reasoning节点:分析状态,生成思考过程action节点:根据推理结果选择工具tool_execution节点:执行选定的工具observation节点:处理和记录工具结果- 条件边决定继续循环还是结束
3 Agent 的核心组件
工具调用(Tool Calling)
Agent 的手和脚。通过清晰的 description 和 schema,让 LLM 能够准确使用外部能力。
import { tool } from '@langchain/core/tools';
import { z } from 'zod';
const searchTool = tool(async ({ query }) => `搜索 "${query}" 的结果...`, {
name: 'search',
description: '搜索相关信息',
schema: z.object({
query: z.string().describe('搜索查询'),
}),
});记忆管理(Memory)
- 短期记忆:对话历史(Messages),通过状态传递。
- 长期记忆:用户偏好、知识库,通过持久化存储。
规划能力(Planning)
对于复杂任务,Agent 需要先分解任务,再逐个执行。
规划能力的常见步骤:
- 接收复杂任务后先进行任务分析
- 将大任务分解为可执行的子任务
- 按顺序或并行执行子任务
- 根据执行结果动态调整计划
- 最终整合所有结果
4 自定义 Agent 架构
人机协作(Human-in-the-Loop)
在关键节点(如转账、敏感操作)暂停,等待人工确认。LangGraph 提供了 interrupt 机制来实现这一点。
多代理系统
多个专业 Agent(如“研究员”、“撰稿人”、“审核员”)协作完成任务。
💡 练习题
-
选择题:以下哪种架构最适合处理“根据用户问题类型,转发给不同部门”的场景?
- A. ReAct 架构
- B. 路由器架构
- C. 工具调用架构
- D. 纯 LLM 生成
点击查看答案
正确答案是 B. 路由器架构。该场景核心是“分类后分发”,路由器模式最直接、可控。
-
分析题:为什么工具的
description对于 Tool Calling Agent 至关重要?如果描述不清晰会发生什么?点击查看答案
description是模型选择工具的主要语义依据,决定“何时调用、调用哪个、传什么参数”。 若描述含糊,常见问题是误选工具、漏调工具或参数构造错误,导致结果不稳定。
🧭 实践指导
选择合适的 Agent 架构
| 架构类型 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 路由器 | 明确分类任务、有限选项 | 简单可靠 | 控制有限 |
| 工具调用代理 | 需要外部 API、多步骤任务 | 灵活强大 | 需要好的工具设计 |
| ReAct | 复杂推理、多轮交互 | 透明可解释 | 可能较慢 |
Agent 设计最佳实践
- 明确定义职责范围:Agent 应该有清晰的能力边界
- 设计清晰的工具接口:工具描述要准确,参数要明确
- 实现有效的错误处理:预期可能的失败场景
- 建立合适的记忆策略:根据需要选择短期或长期记忆
- 设置安全边界:限制 Agent 的操作权限
⚠️ 安全考虑
在设计 Agent 时,必须考虑安全性:
- 输入验证:严格验证所有用户输入
- 权限控制:限制 Agent 的操作权限
- 恶意防护:防止恶意提示注入
- 操作日志:记录所有关键操作
- 异常处理:优雅处理错误和异常情况
📚 参考资源
官方文档
✅ 总结
本章要点:
- Agent 的核心在于利用 LLM 进行动态决策。
- 从简单的路由到复杂的 ReAct 循环,架构的选择取决于业务复杂度。
- 工具调用和记忆管理是构建强大 Agent 的两大基石。
下一步:掌握了理论,我们需要动手实践了。下一章《环境搭建》将带你准备好开发环境。
登录以继续阅读
解锁完整文档、代码示例及更多高级功能。