什么是智能体
智能体(AI Agents或Agents)是指能够自主感知环境、做出决策并执行行动的系统或程序。根据IBM的定义,智能体是“能够通过设计其工作流和利用可用工具,代表用户或其他系统自主执行任务的系统或程序”[IBM]。英伟达则将智能体描述为“AI 智能体是先进的 AI 系统,旨在根据高级目标自主进行推理,制定计划并执行复杂任务。”,代表了“从简单自动化向能够管理复杂工作流的自主系统过渡”的演进方向[NVIDIA]。
在更专业的学术定义中,百度百科指出:“智能体是指能够感知环境并自主采取行动以实现特定目标的实体。这一概念最早由“人工智能之父”马文·明斯基提出,他认为某些问题可经由社会中的一些个体经过协商后解决,这些个体就是智能体。”[百度百科]
智能体具有以下基本特征:
- 自主性(Autonomy):智能体能够在没有人类或其他实体的直接干预下运行,并对其行动和内部状态具有某种程度的控制。
- 反应性(Reactivity):智能体能够感知其环境,并对环境变化做出实时响应。
- 交互性/社交性(Socialability):智能体能够与其他智能体或人类进行交互和协作。
- 适应性/主动性(Proactivity):智能体能够根据环境变化主动调整其行为策略,适应新的情况。
- 学习能力:许多智能体具有通过经验或数据学习和改进的能力。
在 LangChain 的语境下,智能体是一个利用 LLM 作为推理引擎的系统。它不仅能回答问题,还能根据目标自主决定调用哪些工具(如搜索、运行代码、查询数据库)来完成任务。
智能体的核心公式:
Agent = LLM(大脑) + Planning(规划) + Memory(记忆) + Tool Use(工具使用)
- 规划: 将复杂任务拆解为小步骤。
- 记忆: 记住之前的对话上下文或中间操作结果。
- 工具: 能够访问外部 API、计算器、搜索引擎等。
单智能体 (Single-Agent)
概念: 只有一个核心控制循环。所有的推理、规划和执行都由一个 LLM 驱动。
在 LangChain 中的实现
LangChain 最早的火爆就是因为提供了各种 Agent 类型。最经典的模式是 ReAct (Reason + Act):
- Thought(思考): LLM 决定下一步做什么。
- Action(行动): LLM 选择一个工具并提供参数。
- Observation(观察): 运行工具并返回结果给 LLM。
- 循环: 重复上述步骤直到任务完成。
优缺点:
- 优点: 结构简单,易于调试,适合处理逻辑线性、目标明确的任务。
- 缺点: 随着任务复杂度增加,LLM 容易陷入循环、丢失目标(上下文过长)或在复杂决策中“断片”。
多智能体系统 (Multi-Agent System, MAS)
概念: 多个智能体协同工作。每个智能体通常扮演不同的角色(Role),就像一个公司里的不同部门(如:程序员、测试员、产品经理)。
优缺点:
- 优点: 专业化: 每个智能体只需要精通一件事(提示词更短、准确度更高)。
- 鲁棒性: 可以引入“审核员”角色,大幅降低幻觉。
- 缺点: 架构复杂,Token 消耗量大,存在通信开销。

常见的多智能体架构
多智能体架构中的网状结构、监管者模式、分级架构和自定义模式,并通过类比人类工作方式说明多智能体如何协作完成复杂任务。

- 网状结构:任何一个智能体都可以进行决策
- 监督者结构:由主管来决策下一步操作
- 监管者架构(工具):智能体作为工具,接受一个LLM主管的调用
- 分级架构:多级架构每级都有一个监管者
- 自定义:只有部分智能体具备决策权
LangGraph介绍
官方地址:https://docs.langchain.com/oss/python/langgraph/overview
LangGraph 是一个用于构建、管理和部署长期运行、有状态的智能代理(agents)的底层编排框架和运行时环境。
通过使用 LangGraph,你可以获得控制权,设计出能够可靠处理复杂任务的智能代理。这意味着 LangGraph 提供了强大的工具和能力,帮助开发者构建出能够应对各种复杂场景和任务需求的智能代理系统。
LangGraph 是一个非常底层的框架,完全专注于智能代理的编排。在使用 LangGraph 之前,建议你先熟悉用于构建智能代理的一些组件,从模型和工具开始。这说明 LangGraph 的定位是底层的基础设施,它主要关注如何将不同的组件(如模型和工具)有效地组织和协调起来,以实现智能代理的功能。注意:LangChain的智能体底层就是基于LangGraph进行实现的。
LangGraph 关注于智能代理编排中重要的底层能力,包括持久化执行、流式处理、人工干预等。这里列举了 LangGraph 的一些关键特性:
- “durable execution”(持久化执行):构建的智能代理能够在发生故障后继续运行,并且可以从上次中断的地方恢复执行,这对于需要长期运行的智能代理来说非常重要,确保了系统的可靠性和稳定性。
- “streaming”(流式处理):支持对数据流的处理,能够实时地处理和响应输入的数据,这对于需要及时处理动态数据的智能代理应用非常关键。
- “human-in-the-loop”(人工干预):允许在智能代理运行的任何阶段进行人工检查和修改代理的状态,这使得智能代理系统更加灵活可控,能够在必要时引入人类的智慧和决策,提高系统的可靠性和适应性。
核心优势
LangGraph为任何长期运行的、有状态的工作流程或智能体提供了底层的支持性基础设施。LangGraph不会对提示(prompts)或架构进行抽象,它提供了以下核心优势:
| 优势 | 说明 |
|---|---|
| 持久执行 | 构建能够在遇到故障时持续运行,并且可以长时间运行的智能体,这些智能体能够从它们停止的地方恢复执行。 |
| 人机交互 | 通过在任意时刻检查和修改智能体的状态,将人类监督纳入其中。 |
| 综合记忆 | 创建具有状态的智能体,这些智能体既有用于持续推理的短期工作内存,也有跨越会话的长期内存。 |
| LangSmith 调试 | 借助可视化工具追踪执行路径、捕获状态转换以及提供详细的运行时指标,从而深入了解复杂智能体的行为。 |
| 生产就绪部署 | 凭借为处理有状态、长期运行工作流程的独特挑战而设计的可扩展基础设施,自信地部署复杂的智能体系统。 |
LangGraph 生态系统
LangGraph 可独立使用,也可与 LangChain 生态深度集成:
| 组件 | 功能 |
|---|---|
| LangSmith | 用于追踪请求、评估输出以及监控部署,所有这些操作都可以在一个地方完成。你可以使用LangGraph进行本地原型开发,然后借助集成的可观察性和评估功能转移到生产环境中,从而构建更加可靠的代理系统。 |
| LangSmith Agent Server | 这是一个专为长期运行、有状态的工作流设计的部署平台,可以轻松地部署和扩展代理。你可以在这个平台上发现、重用、配置以及共享代理,并且团队成员之间可以进行快速迭代,还可以利用Studio进行可视化原型开发。 |
| LangChain | 提供了集成和可组合的组件,以简化LLM应用开发。它包含了基于LangGraph构建的代理抽象层。 |
环境安装
1 | pip install -U langgraph |
Langgraph的使用
Langgraph提供了两种不同的编程线路:Graph API(图 API)和 Functional API(函数式 API)。
Graph API(图 API)
官方描述: “如果你倾向于将智能体定义为由‘节点’(Nodes)和‘边’(Edges)组成的图,请使用 Graph API。”
- 解读: 核心逻辑: 这种方式是*显式的。你需要像画流程图一样,定义哪一部分是“大脑决策”,哪一部分是“执行计算”,并用线(边)把它们连起来。
- 形象比喻: 就像一个工厂流水线。零件(数据)从一个工位(节点)流向下一个工位。
- 适用场景:
- 逻辑非常复杂,包含循环、分支判断(例如:如果计算结果不对,就退回上一步重新算)。
- 你希望清晰地可视化智能体的工作流程。
- 需要精细控制状态(State)在不同步骤间的传递。
Functional API(函数式 API)
官方描述: “如果你倾向于将智能体定义为一个单一的函数,请使用 Functional API。”
- 解读:
- 核心逻辑: 这种方式是隐式的。它更接近传统的 Python 编程,你只需要写一个函数,通过装饰器(如
@task)来标识任务。LangGraph 会在后台自动帮你处理状态和异步逻辑。 - 形象比喻: 就像一个高级主管。你给他一个指令,他内部怎么协调、怎么计算你不用画图规划得那么细,看起来就是一个简洁的函数调用。
- 适用场景:
- 逻辑相对线性或简单。
- 你希望代码更简洁,不想去维护复杂的图结构。
- 追求快速原型开发,不想处理繁琐的节点连接。
- 核心逻辑: 这种方式是隐式的。它更接近传统的 Python 编程,你只需要写一个函数,通过装饰器(如
核心概念对比解读
这段话里提到的两个核心术语是理解 LangGraph 的关键:
- Graph API Overview(图 API 概览): 侧重于“结构化”。它强制你思考:智能体有哪些状态?从“思考”到“行动”的跳转条件是什么?这在构建具有高度可靠性的工业级 Agent 时非常有用。
- Functional API Overview(函数式 API 概览): 侧重于“开发体验”。它是 LangGraph 近期推出的简化版(通常指
EntryPoint模式),让习惯了普通 Python 开发的人能更平滑地过渡到智能体开发。
核心概念
State(状态)
- 状态是一个在整个图中共享和传递的对象,包含了流程执行过程中所有信息。
- 有状态(stateful):程序具有“记忆”,能记住过去的步骤和结果,并根据这些信息来决定下一步
- 可变(mutable):每个节点都可以修改状态。例如,一个节点可能会将LLM的回复写入状态中,而下一个节点则会读取这个回复并根据它来做决策
Node(节点)
- 节点是图中的基本单元,代表一个具体的功能或操作,视作流程中的一个步骤
- 每个节点负责完成一项特定任务(如查询数据、生成文本、做决策等)
- 节点接受输入,处理后产生输出
- 可以是简单的函数、API调用、LLM调用或其他复杂操作
Edges(边)
- 边决定了流程如何从一个节点移动到另一个节点。
- LangGraph支持两种主要类型的边:
- Normal Edges(普通边):简单的将流程从节点A -> B
- Conditional Edges(条件边):根据当前状态的内容来决定下一步执行哪个节点,是根据LLM的回复或工具的结果动态的做出决策