2025-Agent解析
LangGraph是LangChain生态系统的核心组件,专门用于构建基于图结构的复杂工作流和Agent系统。相比传统的链式调用,LangGraph提供了更强大的流程编排能力。核心优势:结构化工作流:支持分支、循环和条件逻辑状态管理:强大的上下文维护机制可视化监控:与LangSmith深度集成可扩展性:易于集成自定义组件"""Agent状态定义"""query: strAI Agent架构:决策
🍋🍋AI学习🍋🍋
🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。
💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞
2025年,AI Agent技术迎来爆发式发展,从概念验证走向生产级应用。本文将系统拆解AI Agent的核心架构,详细介绍如何使用LangGraph构建企业级智能体系统,并通过实战案例展示开发的完整流程。
一、AI Agent核心架构解析
1.1 Agent系统三层架构模型
一个完整的AI Agent系统通常包含以下三个核心层次:
1.1.1 决策层(Model Layer)
核心职责:
-
任务规划与分解
-
工具选择与参数生成
-
状态管理与决策
技术实现:
class DecisionEngine:
def __init__(self, llm, tools):
self.llm = llm
self.tools = tools
def plan_task(self, objective, context):
"""任务规划"""
prompt = f"""
基于当前目标和上下文,制定详细的执行计划:
目标:{objective}
上下文:{context}
可用工具:{[tool.name for tool in self.tools]}
请返回JSON格式的任务计划,包含:
- steps: 执行步骤列表
- tool_usage: 预计使用的工具
- dependencies: 依赖关系
"""
return self.llm.generate(prompt)
def decide_next_action(self, state):
"""决定下一步行动"""
prompt = f"""
基于当前状态,决定下一步应该执行什么操作:
{state}
请选择:
1. 直接回答用户问题
2. 调用工具获取信息
3. 请求用户补充信息
"""
return self.llm.generate(prompt)
1.1.2 执行层(Execution Layer)
核心组件:
-
工具调用管理器
-
API接口适配器
-
异常处理机制
工具分类体系:
| 工具类型 | 执行位置 | 应用场景 | 示例 |
|---|---|---|---|
| Extensions | 服务端 | 实时API调用 | 搜索服务、天气查询 |
| Functions | 客户端 | UI交互、权限控制 | 按钮点击、表单提交 |
| Data Stores | 服务端 | 知识检索、数据查询 | 向量数据库、SQL查询 |
1.1.3 交互层(Interaction Layer)
主要功能:
-
用户意图识别
-
多模态输入处理
-
响应生成与格式化
1.2 Agent能力成熟度模型
根据2025年最新标准,AI Agent能力分为五个成熟度等级:
Level 1-2:基础执行阶段
-
脚本自动化
-
单步工具调用
-
固定流程执行
Level 3:规划执行阶段(当前主流)
-
任务分解能力
-
动态工具选择
-
异常恢复机制
Level 4:反思优化阶段(2025年技术突破点)
-
自我批判能力
-
用户反馈学习
-
策略动态优化
Level 5:自主进化阶段(未来方向)
-
跨领域知识迁移
-
元学习能力
-
自主创新
二、LangGraph核心概念与技术架构
2.1 LangGraph简介
LangGraph是LangChain生态系统的核心组件,专门用于构建基于图结构的复杂工作流和Agent系统。相比传统的链式调用,LangGraph提供了更强大的流程编排能力。
核心优势:
-
结构化工作流:支持分支、循环和条件逻辑
-
状态管理:强大的上下文维护机制
-
可视化监控:与LangSmith深度集成
-
可扩展性:易于集成自定义组件
2.2 核心概念详解
2.2.1 图(Graph)
图是整个工作流的容器,包含节点和边的集合:
from langgraph.graph import StateGraph
from typing import Dict, Any
# 创建状态图
workflow = StateGraph(Dict[str, Any])
2.2.2 节点(Node)
节点是工作流的基本处理单元:
def process_node(state: Dict[str, Any]) -> Dict[str, Any]:
"""处理节点示例"""
# 执行业务逻辑
result = do_something(state["input_data"])
# 更新状态
return {
**state,
"processed_data": result,
"status": "completed"
}
# 添加节点到图中
workflow.add_node("processor", process_node)
2.2.3 边(Edge)
边定义节点之间的连接关系:
# 标准边:固定执行路径
workflow.add_edge("start", "processor")
# 条件边:根据状态动态选择路径
def route_based_on_result(state: Dict[str, Any]) -> str:
if state["confidence"] > 0.8:
return "high_confidence_path"
else:
return "low_confidence_path"
workflow.add_conditional_edges(
"classifier",
route_based_on_result,
{
"high_confidence_path": "direct_output",
"low_confidence_path": "human_review"
}
)
2.2.4 状态(State)
状态是在工作流中传递的数据结构:
# 初始状态
initial_state = {
"input": "用户查询内容",
"context": [],
"intermediate_results": {},
"final_result": None
}
# 编译工作流
app = workflow.compile()
# 执行工作流
result = app.invoke(initial_state)
三、LangGraph搭建Agent核心步骤
3.1 环境准备与安装
# 基础安装
pip install langchain langgraph langchain-community
# 如果需要可视化和监控
pip install langsmith
# 设置环境变量
export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_API_KEY="your-api-key"
export LANGCHAIN_PROJECT="agent-development"
3.2 构建基础Agent工作流
3.2.1 定义状态结构
from typing import TypedDict, List
class AgentState(TypedDict):
"""Agent状态定义"""
query: str
thoughts: List[str]
actions: List[str]
observations: List[str]
final_answer: str
iterations: int
max_iterations: int = 10
3.2.2 实现核心节点
from langchain_openai import ChatOpenAI
from langchain.tools import tool
from langgraph.graph import END
# 初始化LLM
llm = ChatOpenAI(model="gpt-4o", temperature=0.7)
# 定义工具
@tool
def search_tool(query: str) -> str:
"""搜索工具:获取最新信息"""
# 实际实现中这里会调用搜索引擎API
return f"搜索结果:关于'{query}'的最新信息..."
@tool
def calculator_tool(expression: str) -> str:
"""计算工具:执行数学计算"""
try:
result = eval(expression)
return f"计算结果:{expression} = {result}"
except Exception as e:
return f"计算错误:{str(e)}"
tools = [search_tool, calculator_tool]
# 思考节点
def think_node(state: AgentState) -> AgentState:
"""思考节点:决定下一步行动"""
prompt = f"""
基于当前状态,决定下一步应该执行什么操作:
查询:{state['query']}
历史思考:{state['thoughts']}
历史行动:{state['actions']}
观察结果:{state['observations']}
可用工具:{[tool.name for tool in tools]}
请思考:
1. 是否需要调用工具?
2. 如果需要,应该调用哪个工具?
3. 工具参数是什么?
4. 如果不需要工具,直接回答用户问题。
输出格式:
思考:[你的思考过程]
行动:[工具名称,参数] 或 完成:[最终答案]
"""
response = llm.invoke(prompt).content
# 解析响应
thoughts = state['thoughts'] + [response.split('思考:')[1].split('行动:')[0].strip()]
if '完成:' in response:
final_answer = response.split('完成:')[1].strip()
return {
**state,
'thoughts': thoughts,
'final_answer': final_answer
}
else:
action_part = response.split('行动:')[1].strip()
tool_name, tool_args = action_part.split(',')[0], action_part.split(',')[1]
actions = state['actions'] + [(tool_name, tool_args)]
return {
**state,
'thoughts': thoughts,
'actions': actions,
'iterations': state['iterations'] + 1
}
# 行动节点
def act_node(state: AgentState) -> AgentState:
"""行动节点:执行工具调用"""
last_action = state['actions'][-1]
tool_name, tool_args = last_action
# 查找对应的工具
tool = next((t for t in tools if t.name == tool_name), None)
if tool:
try:
result = tool.invoke(tool_args)
observations = state['observations'] + [result]
return {
**state,
'observations': observations
}
except Exception as e:
observations = state['observations'] + [f"工具调用失败:{str(e)}"]
return {
**state,
'observations': observations
}
else:
observations = state['observations'] + [f"工具'{tool_name}'不存在"]
return {
**state,
'observations': observations
}
# 判断节点:是否继续循环
def should_continue(state: AgentState) -> str:
"""判断是否继续执行"""
if state['final_answer']:
return END
if state['iterations'] >= state['max_iterations']:
return "max_iteration_break"
return "continue"
3.2.3 组装工作流
# 创建状态图
workflow = StateGraph(AgentState)
# 添加节点
workflow.add_node("think", think_node)
workflow.add_node("act", act_node)
workflow.add_node("max_iteration_break", lambda state: {**state, "final_answer": "已达到最大迭代次数"})
# 设置入口点
workflow.set_entry_point("think")
# 添加边
workflow.add_edge("think", "act")
workflow.add_edge("act", "think")
workflow.add_edge("max_iteration_break", END)
# 添加条件边
workflow.add_conditional_edges(
"think",
should_continue,
{
END: END,
"continue": "act",
"max_iteration_break": "max_iteration_break"
}
)
# 编译工作流
agent = workflow.compile()
3.3 高级特性实现
3.3.1 工作流可视化
# 生成ASCII图
agent.get_graph().print_ascii()
# 生成Mermaid图(用于文档)
print(agent.get_graph().draw_mermaid())
3.3.2 状态持久化
import json
from datetime import datetime
def save_state(state: AgentState, filename: str = None):
"""保存状态到文件"""
if not filename:
filename = f"agent_state_{datetime.now().strftime('%Y%m%d_%H%M%S')}.json"
with open(filename, 'w', encoding='utf-8') as f:
json.dump(state, f, ensure_ascii=False, indent=2)
return filename
def load_state(filename: str) -> AgentState:
"""从文件加载状态"""
with open(filename, 'r', encoding='utf-8') as f:
state = json.load(f)
# 确保类型正确
return AgentState(**state)
3.3.3 异常处理与重试机制
def robust_tool_invoke(tool, args, max_retries=3):
"""带重试机制的工具调用"""
for attempt in range(max_retries):
try:
return tool.invoke(args)
except Exception as e:
if attempt == max_retries - 1:
raise e
print(f"工具调用失败,重试 {attempt + 1}/{max_retries}")
time.sleep(1) # 简单的退避策略
四、实战案例:智能数据分析Agent
4.1 需求分析
业务场景: 企业数据分析智能体,能够自动完成数据获取、清洗、分析和报告生成。
核心功能:
-
接收用户的数据分析需求
-
自动搜索相关数据源
-
数据清洗和预处理
-
执行统计分析
-
生成可视化报告
-
提供自然语言解释
4.2 系统设计
class DataAnalysisState(TypedDict):
"""数据分析Agent状态"""
user_request: str
data_sources: List[str]
raw_data: Dict[str, Any]
cleaned_data: Dict[str, Any]
analysis_results: Dict[str, Any]
visualization: str
final_report: str
status: str
4.3 核心实现代码
# 1. 需求理解节点
def understand_requirement(state: DataAnalysisState) -> DataAnalysisState:
"""理解用户需求"""
prompt = f"""
分析用户的数据分析需求:
{state['user_request']}
请识别:
1. 分析主题
2. 需要的数据类型
3. 分析方法建议
4. 预期输出格式
"""
understanding = llm.invoke(prompt).content
return {
**state,
'requirement_analysis': understanding,
'status': 'requirement_understood'
}
# 2. 数据搜索节点
def search_data(state: DataAnalysisState) -> DataAnalysisState:
"""搜索相关数据"""
prompt = f"""
基于需求分析,生成数据搜索查询:
{state['requirement_analysis']}
请生成3-5个具体的搜索关键词或数据源。
"""
search_queries = llm.invoke(prompt).content.split('\n')
search_queries = [q.strip() for q in search_queries if q.strip()]
# 模拟数据搜索
data_sources = []
for query in search_queries[:3]: # 限制搜索次数
data = search_tool.invoke(query)
data_sources.append({
'query': query,
'data': data[:200] + '...' # 简化显示
})
return {
**state,
'data_sources': data_sources,
'status': 'data_searched'
}
# 3. 数据分析节点
def analyze_data(state: DataAnalysisState) -> DataAnalysisState:
"""执行数据分析"""
prompt = f"""
基于搜索到的数据,执行分析:
{state['data_sources']}
请完成:
1. 数据清洗和预处理
2. 关键指标计算
3. 趋势分析
4. 结论和建议
"""
analysis = llm.invoke(prompt).content
return {
**state,
'analysis_results': analysis,
'status': 'data_analyzed'
}
# 4. 报告生成节点
def generate_report(state: DataAnalysisState) -> DataAnalysisState:
"""生成最终报告"""
prompt = f"""
基于分析结果,生成专业的数据分析报告:
{state['analysis_results']}
报告格式要求:
1. 标题和摘要
2. 数据来源说明
3. 详细分析过程
4. 关键发现
5. 建议和展望
"""
report = llm.invoke(prompt).content
return {
**state,
'final_report': report,
'status': 'report_generated'
}
# 组装数据分析工作流
data_workflow = StateGraph(DataAnalysisState)
# 添加节点
data_workflow.add_node("understand", understand_requirement)
data_workflow.add_node("search", search_data)
data_workflow.add_node("analyze", analyze_data)
data_workflow.add_node("report", generate_report)
# 设置流程
data_workflow.set_entry_point("understand")
data_workflow.add_edge("understand", "search")
data_workflow.add_edge("search", "analyze")
data_workflow.add_edge("analyze", "report")
data_workflow.add_edge("report", END)
# 编译工作流
data_agent = data_workflow.compile()
4.4 执行与测试
# 测试数据分析Agent
test_request = """
分析2025年第三季度中国新能源汽车市场的发展趋势,
包括销量增长、主要厂商表现、技术创新和政策影响。
"""
# 执行Agent
result = data_agent.invoke({
'user_request': test_request,
'data_sources': [],
'raw_data': {},
'cleaned_data': {},
'analysis_results': {},
'visualization': '',
'final_report': '',
'status': 'initialized'
})
# 输出结果
print("=" * 80)
print("数据分析报告")
print("=" * 80)
print(result['final_report'])
总结
9.1 核心要点回顾
AI Agent架构:决策层、执行层、交互层的三层架构模型
9.2 未来展望
随着大模型技术的不断发展和应用场景的持续拓展,AI Agent将在以下方面实现重大突破:
-
认知能力:从工具调用向真正的理解和推理演进
-
自主决策:具备更强的自主决策和规划能力
-
人机协作:与人类实现更自然、更高效的协作
更多推荐



所有评论(0)