你应该懂的AI大模型 之 Agent
文章摘要:Agent是一种能自主感知环境、决策并执行任务的智能实体,强调自主性而非简单工具调用。其核心特征包括自主感知理解、目标驱动决策和动态执行调整,与传统AI工具的主要区别在于主动性。AutoGenStudio和Dify是两种开发框架,前者适合快速原型设计,后者侧重生产级应用开发。LangGraph通过图结构实现多智能体协作,包含状态、节点和边三大组件,支持复杂任务自动流转。文章以智能工厂运维
一、什么是Agent
Agent 本质是一种能自主感知环境、做决策并执行任务的智能实体,核心是 “自主性” 而非简单的工具调用。
它并非单一技术,而是融合了多种 AI 能力的综合体,目的是减少人类在复杂任务中的干预。
Agent 的核心特征
-
自主感知与理解:能主动获取信息,比如读取邮件、分析文档或理解用户指令,无需人类逐步输入。
-
目标驱动决策:明确任务目标后,会自主拆解步骤。例如,接到 “规划旅行” 指令时,会自动拆解为订机票、查酒店、做行程等子任务。
-
动态执行与调整:执行中遇到问题会灵活应对。比如航班取消时,能自动重新查询并推荐替代航班,而非停滞等待人类指示。
Agent 与传统 AI 工具的区别
很多人会混淆 Agent 和 ChatGPT 这类生成式 AI,两者的核心差异在于 “主动性”。
|
对比维度 |
Agent(智能体) |
传统 AI 工具(如 ChatGPT) |
|---|---|---|
|
核心逻辑 |
目标驱动,主动完成任务 |
指令驱动,被动响应查询 |
|
交互方式 |
一次指令后自主推进,按需反馈 |
需人类逐轮输入指令,依赖持续引导 |
|
典型场景 |
自动写周报、管理项目进度、智能客服 |
回答问题、生成文案、翻译文本 |
以用户需要 “订一家西湖边适合老人吃的餐厅” 为例,Agent 的工作流程如下:
-
大模型基座解析意图:Agent 首先通过大模型基座来理解用户需求,识别出关键信息,如 “西湖附近”“适合老人”“清淡口味”“人均 200 以内”“订位” 等。同时,大模型还会推理出一些潜在需求,比如餐厅最好有无障碍设施,方便老人进出,菜品需要少油少盐等。
-
RAG 检索补充信息:利用 RAG 技术,Agent 从点评网站等外部数据源抓取西湖周边餐厅的数据,筛选出评分 4.5 以上且有 “无障碍设施” 标签的店家。然后,Agent 会检查最新评论,排除近期服务差或已歇业的选项,确保推荐的餐厅是可靠的。
-
工具调用执行操作:Agent 调用地图 API 计算用户酒店到餐厅的距离,确保餐厅在步行 15 分钟内可达,方便老人前往。接着,Agent 接入订座系统,自动填写人数、时间,并在备注中注明 “需要一楼座位”,以满足老人腿脚不便的需求。
-
生成最终结果:最后,Agent 将推荐结果反馈给用户,例如:“推荐楼外楼(孤山路店),主打杭帮菜,有清蒸鲈鱼、龙井虾仁等清淡菜品。已帮您预订周六晚 6 点 4 人桌,一楼靠窗(无台阶)。人均 180 元,点击确认订位信息。”
Agent 与大模型是互补共生的关系,大模型为 Agent 提供智能决策支持,而 Agent 则扩展了大模型的能力边界,使其从知识库转变为行动者。以下是具体说明:
-
大模型是 Agent 的 “超级大脑”:大模型,如 GPT-4、Claude 等,是基于海量数据训练的深度学习系统,拥有强大的语言理解、知识存储和逻辑推理能力。它为 Agent 提供了智能决策支持,主要体现在三个层面。
-
环境感知层面:大模型能够准确理解用户的自然语言指令,把握其真实意图。例如,当用户提出 “帮我策划一次台北旅行” 时,大模型可以理解用户想要去东京旅游的需求。
-
任务规划层面:大模型可以将抽象的目标转化为具体的执行步骤。对于 “策划东京旅行” 的需求,大模型能够自动将其分解为查询机票、预订酒店、安排行程等子任务。
-
推理判断层面:大模型能够根据执行过程中的实时反馈及时调整策略,确保任务的顺利推进。如在预订酒店时,如果遇到所选酒店已满房的情况,大模型可以根据其他条件重新推荐合适的酒店。
-
-
Agent 是大模型的 “行动手脚”:Agent 不是一个单一的模型,而是一个具备环境感知、任务规划、决策执行等综合能力的完整智能系统。它通过其功能模块扩展了大模型的能力边界。
-
突破知识滞后问题:Agent 可以集成各种 API 接口和软件工具,使大模型能够获取实时信息。例如,在查询天气时,Agent 可以调用天气 API 获取最新的天气数据,解决了大模型知识滞后的问题。
-
突破上下文长度限制:借助向量数据库等记忆机制,Agent 突破了大模型的上下文长度限制,使其能够处理更复杂的长期任务。比如在处理长篇文档时,Agent 可以通过记忆机制记住文档的关键信息,以便更好地理解和处理文档内容。
-
约束 “幻觉” 风险:Agent 可以引入规则引擎和安全校验机制,有效约束大模型的 “幻觉” 风险,提高任务执行的可靠性。例如,在医疗数据处理场景中,Agent 通过双模决策机制,将数据分析的准确率从 70% 显著提升至 98%。
-
二、AutoGen Studio、Dify
AutoGen Studio 是微软开源的多智能体 AI 系统开发框架 AutoGen 的低代码界面,Dify 则是一个开源的 LLM 应用开发平台。
-
AutoGen Studiomicrosoft.github.io
-
基本概述:AutoGen Studio 是一个用于快速原型化 AI 智能体的低代码界面,它基于 AutoGen AgentChat 构建,后者是一个用于构建多智能体应用程序的高级 API。
-
主要功能:它提供了团队构建器、游乐场、组件库和部署四大主要界面。团队构建器是一个可视化界面,可通过声明式规范或拖放操作创建智能体团队,并支持配置所有核心组件;游乐场是一个交互式环境,用于测试和运行智能体团队,具备消息实时流、消息流可视化等功能;组件库是发现和导入社区创建组件的中心枢纽,便于集成第三方组件;部署功能可以将智能体团队导出为 Python 代码,并在 Docker 容器中运行。
-
特点:AutoGen Studio 主要用于帮助开发者快速原型化多智能体工作流,并展示使用 AutoGen 构建的最终用户界面示例,但它并非是一个可用于生产环境的应用。
-
-
Dify
-
基本概述:Dify 是一个面向未来的开源 LLM 应用开发平台,融合了后端即服务与 LLMOps 理念,为开发者和企业提供生产级的生成式 AI 应用构建能力。
-
主要功能:Dify 提供 AI 应用工厂、企业知识中枢、AI Gateway、Workflow Studio 四大核心产品形态。AI 应用工厂通过低代码界面可快速创建客服机器人等场景化应用;企业知识中枢可构建私有化 AI 大脑,支持多种语言的知识检索与推理;AI Gateway 可统一管理模型 API,实现流量控制与安全审计;Workflow Studio 可可视化编排包含 API 调用、数据库查询的复杂业务流。
-
特点:Dify 支持数百个开源与商业模型,独创蜂巢架构设计,可实现模型、插件、数据源的动态编排,还内置企业级 RAG 引擎,具备 LLMOps 监控体系。其具有生产就绪性,通过了 ISO 27001 认证,支持千万级日请求处理,同时具有开放性设计,可无缝对接多种云服务,还具备开发者友好、企业级特性强、成本控制佳等特点。
-
笔者认为AutoGen Studio学习成本比较高,但是值得一试,Dify上手容易,但是到目前为止笔者也不觉着Dify是个企业级的框架。后面有机会笔者会单独出一篇介绍AutoGen Studio的文章。
三、LangGraph构建多智能体
笔记计划后面写一个单独的专栏介绍LangGraph4j
3.1、LangGraph 核心:用 “图思维” 理解多智能体
LangGraph 的本质是将多智能体的协作逻辑建模为有向图结构,通过三大核心组件实现任务的自动流转与协作,这也是它区别于传统线性工作流工具的关键。
1. 三大核心组件
-
状态(State):多智能体的 “共享记事本”,存储对话历史、设备数据、任务进度等所有流转信息。通常用TypedDict定义结构化格式,支持所有节点读写修改,是协作的核心载体。
-
节点(Node):智能体的 “功能工作站”,每个节点对应一个具体任务逻辑,可是子智能体、工具调用或普通函数。例如 “设备状态查询节点”“工单创建节点” 均为独立功能单元。
-
边(Edge):流程的 “交通指挥员”,定义节点间的流转规则。支持固定流转(如 “查询后必执行分析”)和条件流转(如 “温度异常则创建工单,正常则直接反馈”)。
2. 运行机制:超步骤驱动的自动协作
LangGraph 采用 “超步骤(Super-Step)” 机制实现高效运行,流程如下:
-
初始状态下所有节点处于 “非活跃” 状态,START 节点接收用户输入后激活首个节点;
-
活跃节点执行逻辑并更新状态,通过边将新状态传递给下一个节点;
-
每个超步骤结束后,未收到新消息的节点自动 “投票停止”;
-
当所有节点均非活跃且无消息流转时,流程终止(抵达 END 节点)。
这种机制确保了多智能体既能并行处理任务,又能根据实时状态动态调整流程,完美适配复杂场景的协作需求。
3.2、撸代码
构建一个智能工厂的运维智能体
以 “处理设备异常并安排检修” 为例,我们构建包含 3 个核心智能体的系统:主管 Agent(总协调)、设备状态查询 Agent(数据获取)、维保任务调度 Agent(工单处理)。
1. 环境准备
(1)安装依赖
首先安装核心库,包含 LangGraph 框架、大模型集成和状态存储工具:
pip install langchain langchain-openai langgraph python-dotenv typing_extensions
(2)初始化配置
创建.env文件存储 API 密钥,并用 SQLite 实现短期记忆(对话状态保存)、内存存储模拟长期记忆(设备历史数据):
# main.py
import os
from dotenv import load_dotenv
from langgraph.checkpoint.sqlite import SqliteSaver
from langgraph.store.memory import InMemoryStore
# 加载环境变量
load_dotenv()
# 短期记忆:保存对话上下文,支持中断恢复
short_term_memory = SqliteSaver.from_conn_string(":memory:")
# 长期记忆:存储设备历史故障数据,生产环境可替换为Redis/Postgres
long_term_memory = InMemoryStore()
2. 定义全局状态
设计AgentState作为共享数据结构,包含所有智能体需要的信息,确保协作时数据互通:
from typing import TypedDict, Annotated, List
from langgraph.graph.message import AnyMessage, add_messages
class AgentState(TypedDict):
# 对话历史:自动聚合消息,支持多轮交互
messages: Annotated[List[AnyMessage], add_messages]
# 设备历史故障:从长期记忆加载
device_history: str
# 当前操作设备ID:如"C-101"(1号数控车床)
device_id: str
# 安全机制:防止无限循环
remaining_steps: int
3. 构建子智能体节点
(1)设备状态查询 Agent
采用 ReAct 风格实现,包含工具定义和节点逻辑,负责查询设备实时数据:--
from langchain_core.tools import tool
from langgraph.prebuilt import ToolNode
"C-101": {"name": "1号数控车床", "status": "告警", "temp": 95.2, "pressure": 2.8},
"P-205": {"name": "5号加压泵", "status": "正常", "temp": 68.1, "pressure": 1.3}
}
return mock_db.get(device_id, {"error": "设备ID不存在"})
# 2. 创建工具节点:LangGraph预置,自动处理工具调用
tool_node = ToolNode([query_device_status])
# 3. 定义状态更新逻辑:将查询结果写入对话历史
def device_agent(state: AgentState) -> AgentState:
# 调用工具节点获取数据
tool_result = tool_node(state)
# 更新状态:添加工具返回结果
state["messages"].append(AnyMessage(content=f"设备状态查询结果:{tool_result}"))
state["remaining_steps"] -= 1
return state
(2)维保任务调度 Agent
使用 LangGraph 预置的create_react_agent快速构建,专注于工单创建:
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent
# 1. 初始化大模型
llm = ChatOpenAI(model="gpt-4o", api_key=os.getenv("OPENAI_API_KEY"))
# 2. 定义工单创建工具
@tool
def create_maintenance_ticket(device_id: str, issue: str) -> str:
"""为故障设备创建维保工单,需提供设备ID和问题描述"""
# 生产环境替换为真实工单系统API调用
ticket_id = f"MT-{device_id}-{hash(issue)[:6]}"
return f"维保工单创建成功,ID:{ticket_id},问题:{issue}"
# 3. 快速创建React风格Agent
maintenance_agent = create_react_agent(
llm,
tools=[create_maintenance_ticket],
system_message="你是维保任务调度员,根据设备故障信息创建工单,必填设备ID和问题描述"
)
# 4. 封装为图节点
def maintenance_node(state: AgentState) -> AgentState:
result = maintenance_agent(state)
state["messages"].append(AnyMessage(content=f"工单处理结果:{result['messages'][-1].content}"))
state["remaining_steps"] -= 1
return state
4. 构建主管 Agent(核心调度逻辑)
主管 Agent 作为 “总指挥”,负责解析用户意图并路由任务,通过条件边实现动态流转:
def supervisor_agent(state: AgentState) -> str:
"""根据用户意图返回下一个节点:device_agent/maintenance_node/END"""
user_query = state["messages"][0].content # 获取用户初始请求
llm = ChatOpenAI(model="gpt-3.5-turbo")
# 意图分类提示词
prompt = f"""
分析用户请求,判断需要调用的节点:
- 若包含"温度""状态""参数"等词,返回"device_agent"
- 若包含"检修""工单""维修"等词,返回"maintenance_node"
- 若任务完成,返回"END"
用户请求:{user_query}
"""
response = llm.invoke(prompt).content.strip()
return response
5. 编排图结构并运行
将所有节点和边组合为完整图,实现任务自动流转:
from langgraph.graph import StateGraph, START, END
# 1. 初始化图
graph_builder = StateGraph(AgentState)
# 2. 添加节点
graph_builder.add_node("device_agent", device_agent) # 设备查询节点
graph_builder.add_node("maintenance_node", maintenance_node) # 工单创建节点
graph_builder.add_node("supervisor", lambda s: s) # 主管节点(仅做路由)
# 3. 定义边规则
# 起始节点→主管节点
graph_builder.add_edge(START, "supervisor")
# 主管节点→条件流转(根据意图路由)
graph_builder.add_conditional_edges(
"supervisor",
supervisor_agent, # 路由函数
{
"device_agent": "device_agent",
"maintenance_node": "maintenance_node",
"END": END
}
)
# 子节点处理后返回主管节点,继续判断
graph_builder.add_edge("device_agent", "supervisor")
graph_builder.add_edge("maintenance_node", "supervisor")
# 4. 编译图(启用记忆机制)
graph = graph_builder.compile(
checkpointer=short_term_memory, # 启用短期记忆
interrupt_before=["maintenance_node"] # 可选:人机回环,创建工单前确认
)
# 5. 运行多智能体系统
if __name__ == "__main__":
# 用户输入:1号车床温度异常,帮我安排检修
initial_state = {
"messages": [AnyMessage(content="C-101号车床温度异常,帮我安排检修")],
"device_history": "C-101曾在3个月前因温度过高停机",
"device_id": "C-101",
"remaining_steps": 5 # 最多执行5步,防止循环
}
# 执行流程并输出结果
for step in graph.stream(initial_state):
for node, value in step.items():
print(f"【{node}】处理结果:{value['messages'][-1].content}")
6. 运行结果
系统将自动执行以下流程并输出:
-
【supervisor】处理结果:路由至 device_agent
-
【device_agent】处理结果:设备状态查询结果:{"name": "1 号数控车床", "status": "告警", "temp": 95.2, "pressure": 2.8}
-
【supervisor】处理结果:路由至 maintenance_node
-
【maintenance_node】处理结果:工单处理结果:维保工单创建成功,ID:MT-C-101-2f8d1a,问题:1 号数控车床温度 95.2℃,状态告警
3.3、LangGraph 多智能体进阶技巧
1. 人机回环(Human-in-the-Loop)
在关键节点添加人工确认,提升系统可靠性。例如创建工单前中断流程:
# 编译图时添加中断点
graph = graph_builder.compile(
checkpointer=short_term_memory,
interrupt_before=["maintenance_node"] # 工单创建前中断
)
# 人工确认后继续执行
for step in graph.stream(initial_state):
if "interrupt" in step:
user_confirm = input("是否创建维保工单?(y/n)")
if user_confirm == "y":
graph.resume() # 继续执行
else:
graph.abort() # 终止流程
2. 记忆优化
-
短期记忆:用SqliteSaver替换InMemorySaver,支持对话持久化;
-
长期记忆:将InMemoryStore改为 Redis/Postgres,存储设备历史数据、用户偏好等跨会话信息。
3. 可观测性建设
集成 LangFuse 实现流程跟踪与评估,定位节点性能瓶颈:
import langfuse
from langfuse.langchain import LangfuseCallbackHandler
# 初始化LangFuse
langfuse.init(
public_key=os.getenv("LANGFUSE_PUBLIC_KEY"),
secret_key=os.getenv("LANGFUSE_SECRET_KEY"),
host="https://cloud.langfuse.com"
)
# 运行时添加回调
for step in graph.stream(initial_state, callbacks=[LangfuseCallbackHandler()]):
# 处理步骤...
通过 LangFuse 可直观看到每个节点的执行时间、工具调用次数,轻松优化系统效率。
3.4、LangGraph vs 其他多智能体框架
|
特性 |
LangGraph |
AutoGen |
Dify |
|---|---|---|---|
|
核心定位 |
图结构工作流框架 |
多智能体对话协作框架 |
低代码 LLM 应用平台 |
|
灵活性 |
高(全代码控制节点 / 边) |
中(基于对话规则) |
低(可视化拖拽,限制多) |
|
状态管理 |
原生支持共享状态 |
依赖消息传递 |
内置状态管理 |
|
生产就绪性 |
需自行封装部署 |
需二次开发 |
内置部署、监控功能 |
|
适用场景 |
复杂流程多智能体(工业、金融) |
对话式协作(客服、创作) |
快速迭代 LLM 应用(企业助手) |
更多推荐


所有评论(0)