基础概念

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)

能够分析需求并自主调用工具。

工作流程

  1. LLM 分析用户需求。
  2. LLM 决定是否调用工具,以及调用哪个工具。
  3. 执行工具,将结果返回给 LLM。
  4. LLM 根据工具结果生成最终回答。

代码示例

const searchTool = tool(async ({ query }) => '搜索结果...', {
  name: 'search',
  description: '搜索相关信息',
  schema: z.object({ query: z.string() }),
});
// LLM 会根据 description 决定何时调用

实现要点

  • 使用 @langchain/core/toolstool 定义工具
  • 工具需要清晰的 namedescriptionschema
  • LLM 根据工具描述自动选择合适的工具

3. ReAct 架构

ReAct = Reasoning(推理)+ Acting(行动)。

它让 Agent 在每一步都能“思考-行动-观察”,从而解决复杂问题。

在 LangGraph 中的实现思路

  • reasoning 节点:分析状态,生成思考过程
  • action 节点:根据推理结果选择工具
  • tool_execution 节点:执行选定的工具
  • observation 节点:处理和记录工具结果
  • 条件边决定继续循环还是结束

3 Agent 的核心组件

工具调用(Tool Calling)

Agent 的手和脚。通过清晰的 descriptionschema,让 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 需要先分解任务,再逐个执行。

规划能力的常见步骤:

  1. 接收复杂任务后先进行任务分析
  2. 将大任务分解为可执行的子任务
  3. 按顺序或并行执行子任务
  4. 根据执行结果动态调整计划
  5. 最终整合所有结果

4 自定义 Agent 架构

人机协作(Human-in-the-Loop)

在关键节点(如转账、敏感操作)暂停,等待人工确认。LangGraph 提供了 interrupt 机制来实现这一点。

多代理系统

多个专业 Agent(如“研究员”、“撰稿人”、“审核员”)协作完成任务。


💡 练习题

  1. 选择题:以下哪种架构最适合处理“根据用户问题类型,转发给不同部门”的场景?

    • A. ReAct 架构
    • B. 路由器架构
    • C. 工具调用架构
    • D. 纯 LLM 生成
    点击查看答案

    正确答案是 B. 路由器架构。该场景核心是“分类后分发”,路由器模式最直接、可控。

  2. 分析题:为什么工具的 description 对于 Tool Calling Agent 至关重要?如果描述不清晰会发生什么?

    点击查看答案

    description 是模型选择工具的主要语义依据,决定“何时调用、调用哪个、传什么参数”。 若描述含糊,常见问题是误选工具、漏调工具或参数构造错误,导致结果不稳定。


🧭 实践指导

选择合适的 Agent 架构

架构类型适用场景优点缺点
路由器明确分类任务、有限选项简单可靠控制有限
工具调用代理需要外部 API、多步骤任务灵活强大需要好的工具设计
ReAct复杂推理、多轮交互透明可解释可能较慢

Agent 设计最佳实践

  1. 明确定义职责范围:Agent 应该有清晰的能力边界
  2. 设计清晰的工具接口:工具描述要准确,参数要明确
  3. 实现有效的错误处理:预期可能的失败场景
  4. 建立合适的记忆策略:根据需要选择短期或长期记忆
  5. 设置安全边界:限制 Agent 的操作权限

⚠️ 安全考虑

在设计 Agent 时,必须考虑安全性:

  • 输入验证:严格验证所有用户输入
  • 权限控制:限制 Agent 的操作权限
  • 恶意防护:防止恶意提示注入
  • 操作日志:记录所有关键操作
  • 异常处理:优雅处理错误和异常情况

📚 参考资源

官方文档


✅ 总结

本章要点

  • Agent 的核心在于利用 LLM 进行动态决策。
  • 从简单的路由到复杂的 ReAct 循环,架构的选择取决于业务复杂度。
  • 工具调用和记忆管理是构建强大 Agent 的两大基石。

下一步:掌握了理论,我们需要动手实践了。下一章《环境搭建》将带你准备好开发环境。

登录以继续阅读

解锁完整文档、代码示例及更多高级功能。

立即登录

On this page