收藏备用!ReAct范式深度解析+LangGraph落地实战,小白也能学会的大模型Agent构建指南

LangGraph实战:从LangChain到MCP与Memory,构建可控可记忆的AI Agent工作流 AI Agent正从单纯的对话机器人演进为可控、可回溯、有记忆的图式工作流。其核心原理在于将LangChain的组件库、LangGraph的图编排、MCP的工具接入协议与Memory的跨会话记忆分层协同。LangGraph作为编排层,通过节点与条件边实现ReAct循环,让模型判断下一步动作;MCP将外部工具标准化为USB-C式接口,降低接入成本;Memory则通过Checkpointer与向量库让Agent长期运行。这一组合适用于需要动态决策、外接企业工具及多轮记忆的工程场景。从跑通最小状态图开始,逐步加入 阅读详情

本文全面拆解ReAct(推理与行动交替)核心范式,详解其在LangGraph框架中的落地实现逻辑。ReAct通过“思考-行动-观察-调整”的闭环链路,让AI具备动态决策与工具调用能力,彻底突破传统AI的应用局限。文章从基础原理、框架实现、源码深挖、真实项目落地到手写实践,形成完整学习链路,为刚入门大模型的小白及资深程序员,提供一套可直接复用的智能Agent构建方案。

一、ReAct范式原理

1.1 ReAct概念

ReAct范式由Shunyu Yao团队在2022年的论文《ReAct: Synergizing Reasoning and Acting in Language Models》中正式提出,其核心创新点在于打破传统AI“纯推理”或“纯行动”的单一模式,实现“推理-行动”的交替协同。

用最通俗的天气查询场景举例,我们通过代码直观对比三者差异(新手可直接复制运行理解):


# 传统AI方法:要么纯推理,要么纯行动
def traditional_reasoning_only(question):
    """纯推理方法:仅基于训练数据回答"""
    return "基于我的训练数据,今天可能是晴天"
    
def traditional_action_only(question):
    """纯行动方法:直接调用API,缺乏思考"""
    # 模拟直接调用API,没有推理过程
    if "天气" in question:
        return "晴天,温度25°C"  # 硬编码结果,没有推理
    return "无法处理"

# ReAct方法:推理和行动交替进行
def react_approach(question):
    """ReAct方法:推理和行动交替进行"""
    # 第1步:推理 - 分析问题
    reasoning = "用户问的是今天某城市的天气,我需要查询实时天气信息"
    
    # 第2步:行动 - 执行查询
    weather_result = weather_api("某城市")
    
    # 第3步:推理 - 分析查询结果
    reasoning = "查询结果显示今天某城市是晴天,温度25度,这是实时准确信息"
    
    # 第4步:行动 - 生成最终答案
    return"今天某城市是晴天,温度25度,适合外出"

ReAct让AI能够在需要时主动获取信息,而不是仅依赖训练数据,同时保持推理过程的透明性。

1.2 ReAct范式为什么有效

ReAct范式之所以有效,在于它解决了传统AI方法的几个问题:

解决信息获取问题

传统AI只能依赖训练数据,ReAct让AI能够主动获取最新信息,解决知识时效性问题。

实现推理与行动的结合

不是简单的"先推理后行动",而是推理和行动的交替进行,让AI能够根据中间结果调整策略。

保持推理过程透明

每个行动都有明确的推理依据,推理过程完全可见,便于调试和理解AI的决策逻辑。

支持复杂协作

通过工具调用机制,ReAct可以处理需要多步骤、多工具协作的复杂任务场景。

1.3 ReAct的设计理念

ReAct范式不仅仅是一个技术方案,它反映了AI系统设计理念的转变:

从"黑盒AI"到"透明AI"

传统AI的决策过程是黑盒的,用户无法理解AI为什么做出某个决定。ReAct让AI的思考过程变得透明,每个行动都有明确的推理依据,这带来了理解与信任。

从"静态AI"到"动态AI"

传统AI只能基于训练时的静态数据,无法适应新情况。ReAct让AI能够主动获取最新信息,根据实际情况动态调整策略,实现了学习与适应。

从"单一AI"到"协作AI"

传统AI往往是孤立的,无法与其他系统协作。ReAct通过工具调用机制,让AI能够与其他系统协作,实现了扩展与创新。

理解了ReAct的原理后,你可能会想:如何在项目中实现这种"推理-行动"的循环?比如,如何让AI在需要时主动调用工具,如何管理整个对话状态,如何控制循环的结束条件?LangGraph就是专门解决这些问题的框架。

二、LangGraph中的ReAct实现机制

2.1 什么是LangGraph?

LangGraph是LangChain团队开发的用于构建AI Agent的框架。它的思想是:将AI Agent的执行过程抽象为一个有向图。

LangGraph的核心特性:

1.图结构:将AI逻辑抽象为节点和边的图;

2.状态驱动:系统围绕状态对象运行;

3.条件路由:根据状态决定下一步执行路径;

2.2 LangGraph如何实现ReAct?

通过一个完整的例子来理解LangGraph如何实现ReAct范式:


from langgraph.prebuilt import create_react_agent
from langchain_core.tools import tool
from langchain_ollama import ChatOllama
from langchain_core.messages import HumanMessage
# 1. 定义工具
@tool
def search_weather(location: str) -> str:
"""搜索指定地点的天气信息"""
# 模拟天气查询API
weather_data = {
"A城市": "晴天,温度25°C,湿度60%",
"B城市": "多云,温度22°C,湿度70%"
}
return weather_data.get(location, f"{location}的天气信息暂时无法获取")
@tool
def calculate_distance(city1: str, city2: str) -> str:
"""计算两个城市之间的距离"""
# 模拟距离计算API
distances = {
("A城市", "B城市"): "约500公里",
("B城市", "A城市"): "约500公里"
}
return distances.get((city1, city2), f"{city1}到{city2}的距离信息暂时无法获取")
# 2. 创建模型
model = ChatOllama(model="qwen3:8b", temperature=0.1)
# 3. 创建ReAct Agent
agent = create_react_agent(
model=model,
tools=[search_weather, calculate_distance],
prompt="你是一个天气助手,可以帮助用户查询天气和计算距离。",
version="v2"
)
# 4. 使用Agent
result = agent.invoke({
"messages": [HumanMessage(content="A城市和B城市的天气怎么样?距离有多远?")]
})

LangGraph的简洁性体现在:几行代码就创建了一个完整的ReAct Agent,系统自动判断是否需要调用工具,消息历史自动维护,工具调用完全透明。

2.3 LangGraph的内部机制

让我们深入看看create_react_agent内部是如何工作的:

核心实现逻辑:

# 文件路径: libs/langgraph/langgraph/prebuilt/agent_executor.py
def create_react_agent(
    model: BaseChatModel,
    tools: Sequence[BaseTool],
    prompt: Optional[BaseMessage] = None,
    response_format: Optional[Union[Dict, Type[BaseModel]]] = None,
    pre_model_hook: Optional[Callable] = None,
    post_model_hook: Optional[Callable] = None,
    state_schema: Optional[Type[TypedDict]] = None,
    version: Literal["v1", "v2"] = "v2",
) -> CompiledGraph:
    """创建ReAct Agent的核心实现"""
    
    # 1. 定义状态结构
    class AgentState(TypedDict):
        messages: Annotated[Sequence[BaseMessage], add_messages]
        remaining_steps: NotRequired[RemainingSteps]
    
    # 2. 创建图结构
    workflow = StateGraph(AgentState)
    
    # 3. 定义节点
    def agent_node(state: AgentState):
        """Agent节点:调用模型进行推理"""
        model_with_tools = model.bind_tools(tools)
        response = model_with_tools.invoke(state["messages"])
        return {"messages": [response]}
    
    def tools_node(state: AgentState):
        """工具节点:执行工具调用"""
        return tool_node.invoke(state)
    
    # 4. 定义路由逻辑
    def should_continue(state: AgentState) -> str:
        """判断是否需要继续执行工具"""
        last_message = state["messages"][-1]
        if hasattr(last_message, 'tool_calls') and last_message.tool_calls:
            return"tools"
        return"end"
    
    # 5. 组装图结构
    workflow.add_node("agent", agent_node)
    workflow.add_node("tools", tools_node)
    workflow.add_conditional_edges(
        "agent", 
        should_continue, 
        {"tools": "tools", "end": END}
    )
    workflow.add_edge("tools", "agent")
    
    return workflow.compile()
2.4 关键设计思想
  1. 状态驱动架构

# 文件路径: libs/langgraph/langgraph/prebuilt/agent_executor.py
# 状态是系统的核心
class AgentState(TypedDict):
    messages: Annotated[Sequence[BaseMessage], add_messages]  # 消息历史
    remaining_steps: NotRequired[RemainingSteps]  # 剩余步数

状态包含所有必要信息,支持断点续传,便于调试和监控。

  1. 条件路由机制

# 文件路径: libs/langgraph/langgraph/prebuilt/agent_executor.py
def should_continue(state: AgentState) -> str:
    """智能路由决策"""
    last_message = state["messages"][-1]
    ifhasattr(last_message, 'tool_calls')and last_message.tool_calls:
        return "tools"  # 需要工具
    return "end"        # 直接结束

基于内容而非规则,支持复杂决策逻辑,易于扩展和修改。

  1. 工具绑定机制

# 文件路径: libs/langgraph/langgraph/prebuilt/agent_executor.py
# 工具绑定到模型
model_with_tools = model.bind_tools(tools)
response = model_with_tools.invoke(messages)

工具调用对AI透明,支持并行工具调用,提供统一的工具接口。

2.5 实际运行示例

让我们看一个完整的运行过程:


# 用户输入
user_input = "A城市和B城市的天气怎么样?距离有多远?"

# 执行过程
result = agent.invoke({
    "messages": [{"role": "user", "content": user_input}]
})

# 执行步骤:
# 1. Agent接收用户消息
# 2. 模型分析:需要查询天气和计算距离
# 3. 调用search_weather工具
# 4. 调用calculate_distance工具  
# 5. 基于工具结果生成最终回复

执行流程图:

2.6 设计特点总结

LangGraph的设计有几个特点:

简单易用:几行代码创建Agent,自动处理状态管理,路由决策。

灵活:支持自定义工具,可扩展的图结构,钩子机制。

性能优化:并行工具调用,状态增量更新,缓存机制。

易于调试:执行日志,状态可视化,错误追踪。

create_react_agent是LangGraph中的重要函数,它封装了ReAct范式的实现。

三、create_react_agent源码解析

3.1 实现逻辑

# 文件路径: libs/prebuilt/langgraph/prebuilt/chat_agent_executor.py
def create_react_agent(
    model: Union[str, LanguageModelLike, Callable],
    tools: Union[Sequence[BaseTool], ToolNode],
    prompt: Optional[Prompt] = None,
    response_format: Optional[StructuredResponseSchema] = None,
    state_schema: Optional[StateSchemaType] = None,
    version: Literal["v1", "v2"] = "v2",
) -> CompiledStateGraph:
    """
    创建ReAct Agent的核心函数
    
    参数说明:
    - model: 语言模型实例
    - tools: 工具列表或工具节点
    - prompt: 自定义提示词
    - response_format: 结构化输出格式
    - state_schema: 状态模式
    - version: 版本选择
    """

关键设计点:

  1. 状态模式的动态选择

# 文件路径: libs/langgraph/langgraph/prebuilt/agent_executor.py
if state_schema is None:
    state_schema = (
        AgentStateWithStructuredResponse
        if response_format is not None
        else AgentState
    )

简单场景使用基础状态,复杂场景支持结构化输出,避免了过度设计。

  1. 工具绑定的智能判断

# 文件路径: libs/langgraph/langgraph/prebuilt/agent_executor.py
if _should_bind_tools(model, tool_classes, num_builtin=len(llm_builtin_tools)):
    model = model.bind_tools(tool_classes + llm_builtin_tools)

能自动判断模型是否需要绑定工具,处理不同类型的工具,用户不需要关心技术细节。

  1. 路由逻辑的单一职责

# 文件路径: libs/langgraph/langgraph/prebuilt/agent_executor.py
def should_continue(state: StateSchema) -> Union[str, list[Send]]:
    messages = _get_state_value(state, "messages")
    last_message = messages[-1]
    
    ifnot isinstance(last_message, AIMessage) ornot last_message.tool_calls:
        return END
    else:
        return"tools"

只负责路由决策,基于内容而非规则,支持扩展(钩子、结构化输出)。

3.2 设计原理深度分析
  1. 状态管理的设计思路

# 传统方法:全局状态,难以管理
classTraditionalAgent:
    def __init__(self):
        self.messages = []
        self.tool_results = []
        self.current_step = 0
        # ... 更多状态变量

# LangGraph方法:状态模式,类型安全
# 文件路径: libs/langgraph/langgraph/prebuilt/agent_executor.py
class AgentState(TypedDict):
    messages: Annotated[Sequence[BaseMessage], add_messages]
    remaining_steps: NotRequired[RemainingSteps]

LangGraph使用TypedDict确保状态类型安全,使用Annotated提供状态更新策略,让状态管理既安全又灵活。

  1. 条件路由的智能实现

# 文件路径: libs/langgraph/langgraph/prebuilt/agent_executor.py
def should_continue(state: AgentState) -> str:
    messages = state["messages"]
    last_message = messages[-1]
    
    # 关键设计:不是检查所有消息,而是只检查最后一条
    if isinstance(last_message, AIMessage) and last_message.tool_calls:
        return"tools"
    return"end"

只检查最后一条消息,避免了遍历整个消息历史,性能更好,逻辑更清晰。

  1. 工具绑定的统一抽象
# 文件路径: libs/langgraph/langgraph/prebuilt/agent_executor.py
# 核心设计:工具绑定到模型,而不是单独管理
model_with_tools = model.bind_tools(tools)
response = model_with_tools.invoke(state["messages"])

通过工具绑定机制,让AI能够调用工具而不需要了解工具的具体实现细节。

  1. 复杂性管理

ReAct系统天然复杂,但通过精妙的设计,让复杂性变得可控。

  1. 可扩展性

基础功能保持简洁,复杂需求通过扩展支持。

  1. 可理解性

通过声明式的图结构,开发者可以直观地理解系统行为。

了解 LangGraph的设计原理后,让我们通过一个真实的项目案例来看看ReAct在实际应用中的价值。这个案例来自智能解决方案系统,其中PPT生成大纲是其中的一个重点能力。

四、真实项目案例:智能解决方案系统

4.1 项目背景:为什么选择ReAct?

在智能解决方案系统中,我选择使用ReAct范式构建智能大纲生成Agent。这个决策背后有一个真实的踩坑故事:

第一阶段:纯大模型方案的问题

# 最初的简单方案
def generate_outline(user_input):
"""纯大模型方案:直接生成PPT大纲"""
prompt = f"""
用户需求:{user_input}
请生成一份完整的PPT大纲,包含:
1. 封面页
2. 目录页
3. 产品介绍
4. 功能特性
5. 应用案例
6. 总结页
"""
return llm.invoke(prompt)

问题暴露:

  • 客户信息不准确:大模型不知道具体的客户背景;
  • 产品信息过时:内部产品信息无法实时更新;
  • 用户需求不明确:用户可能只需要某几页,不需要完整PPT;

第二阶段:增加知识检索的尝试

# 改进方案:增加知识检索
def generate_outline_with_knowledge(user_input):
# 检索客户信息
customer_info = search_customer_knowledge(user_input)
# 检索产品信息
product_info = search_product_knowledge(user_input)
# 检索行业信息
industry_info = search_industry_knowledge(user_input)
prompt = f"""
用户需求:{user_input}
客户信息:{customer_info}
产品信息:{product_info}
行业信息:{industry_info}
请生成一份完整的PPT大纲...
"""
return llm.invoke(prompt)

新问题出现:

  • 信息过载:每次都要检索大量信息,即使不需要;
  • 固化输出:总是生成"完整"的PPT大纲;
  • 用户体验差:用户说"我只要3页介绍产品功能",却生成了20页的完整大纲;

能不能让AI像人类一样,先分析用户真正需要什么,再决定要不要检索信息,检索什么信息,生成什么样的结构?

第三阶段:ReAct范式的解决方案

# ReAct方案:智能判断
def react_outline_generation(user_input):
# 1. 推理:分析用户真正需要什么
reasoning = analyze_user_intent(user_input)
# 2. 行动:根据推理结果决定是否检索
if reasoning.needs_customer_info:
customer_info = search_customer_knowledge(user_input)
if reasoning.needs_product_info:
product_info = search_product_knowledge(user_input)
# 3. 观察:基于检索结果调整策略
# 4. 调整:生成符合用户真实需求的大纲
return generate_adaptive_outline(reasoning, retrieved_info)

关键点:ReAct让AI能够像人一样,在不确定的情况下做出明智的决策。

  • 分析用户需求(客户背景、产品需求、行业特点);
  • 收集相关信息(行业趋势、竞品分析、产品特性);
  • 生成结构化的PPT大纲;
  • 确保内容质量和业务价值;
4.2 系统架构深度解析:基于真实需求的架构演进

基于我在PPT生成项目中的真实落地经验,下面是SmartOutlineReActAgent的架构设计演进过程:

架构演进历程:

核心设计决策:

1.智能判断层:分析用户意图,决定是否需要检索;

2.按需检索层:根据判断结果,选择性检索信息;

3.自适应生成层:基于检索结果,生成个性化大纲;

架构设计经验:

架构设计采用分层解耦设计,工具、提示词、执行引擎完全解耦,便于独立优化。整个执行过程由状态变化驱动,支持断点续传。通过通用工具 + 专业工具的分层设计,既保证通用性又满足专业性。同时需要从输入到输出的完整监控体系,确保系统稳定性。

classSmartOutlineReActAgent:
"""智能大纲生成ReAct Agent - 核心设计思路"""
def __init__(self):
# 核心组件:工具 + 模型 + Agent
self.tools = self._load_tools()           # 分层工具设计
self.llm = self._init_llm()              # 模型初始化
self.agent = self._create_react_agent()   # ReAct Agent
def _load_tools(self):
"""工具分层设计:通用工具 + 专业工具"""
general_tools = load_general_tools()      # 时间、搜索等
internal_tools = load_internal_tools()    # 内部知识库
return general_tools + internal_tools
def _create_react_agent(self):
"""构建ReAct Agent - 核心执行引擎"""
return create_react_agent(
model=self.llm,
tools=self.tools,
prompt=self.system_prompt,
version="v2"  # 支持并行工具调用
)
def generate_outline(self, user_input: str) -> str:
"""生成PPT大纲 - 核心业务逻辑"""
# 1. 构建输入
messages = [HumanMessage(content=user_input)]
# 2. 执行ReAct循环
result = self.agent.invoke({
"messages": messages,
"recursion_limit": 50,
"max_iterations": 20
})
# 3. 返回结果
return result["messages"][-1].content

核心设计思路:

1.分层架构:工具、模型、Agent各司其职;

2.工具生态:通用工具 + 专业工具的分层设计;

3.执行引擎:ReAct循环 + 智能路由;

4.业务逻辑:输入 → 推理 → 行动 → 输出;

4.3 create_react_agent运行原则浅析

接下来先简单了解一下create_react_agent的内部实现,以便理解其内在的设计思路:

核心实现分析:

def create_react_agent(model, tools, prompt=None, version="v2"):
"""创建ReAct Agent的核心实现"""
# 1. 状态模式定义
class AgentState(TypedDict):
messages: Annotated[Sequence[BaseMessage], add_messages]
remaining_steps: int
# 2. 图结构构建
workflow = StateGraph(AgentState)
# 3. 节点定义
def agent_node(state: AgentState):
"""Agent节点 - 核心推理引擎"""
# 绑定工具到模型
model_with_tools = model.bind_tools(tools)
# 调用模型
response = model_with_tools.invoke(state["messages"])
return {"messages": [response]}
def tools_node(state: AgentState):
"""Tools节点 - 工具执行引擎"""
if version == "v1":
# v1版本:串行执行所有工具
return tool_node.invoke(state)
else:
# v2版本:并行执行工具(使用Send API)
return tool_node.invoke(state)
# 4. 条件路由逻辑
def should_continue(state: AgentState) -> str:
"""智能路由决策"""
messages = state["messages"]
last_message = messages[-1]
# 检查是否包含工具调用
if isinstance(last_message, AIMessage) and last_message.tool_calls:
return"tools"
return"end"
# 5. 图结构组装
workflow.add_node("agent", agent_node)
workflow.add_node("tools", tools_node)
workflow.add_conditional_edges(
"agent",
should_continue,
{"tools": "tools", "end": END}
)
workflow.add_edge("tools", "agent")
# 6. 编译并返回
return workflow.compile()

LangGraph不是简单的工具链,而是一个能够"思考"的智能系统。它通过状态管理让Agent记住整个对话过程,通过条件路由让Agent能够根据当前情况智能选择下一步,通过循环控制让Agent能够反思和优化结果。

让Agent从"执行者"变成了"思考者",能够处理复杂的多轮对话和动态决策场景。

4.4 LangGraph底层执行引擎深度分析

继续深入分析LangGraph的底层执行机制,理解其如何实现高效的ReAct执行:

核心执行机制分析:

# LangGraph底层执行引擎核心代码分析
classPregel:
"""LangGraph的核心执行引擎 - 基于Pregel算法"""
def __init__(self, nodes: Dict[str, Any], edges: List[Edge]):
self.nodes = nodes
self.edges = edges
self.state_schema = self._build_state_schema()
def invoke(self, inputs: Dict[str, Any]) -> Dict[str, Any]:
"""执行图的核心方法"""
# 1. 状态初始化
state = self._initialize_state(inputs)
# 2. 执行循环
whilenot self._is_complete(state):
# 3. 节点调度
next_nodes = self._get_next_nodes(state)
# 4. 并行执行节点
updates = self._execute_nodes_parallel(next_nodes, state)
# 5. 状态更新
state = self._update_state(state, updates)
# 6. 检查终止条件
if self._should_terminate(state):
break
return state
def _execute_nodes_parallel(self, nodes: List[str], state: Dict) -> Dict:
"""并行执行多个节点 - 性能优化的关键"""
import asyncio
async def execute_node(node_name: str):
node_func = self.nodes[node_name]
return await node_func(state)
# 并行执行所有节点
tasks = [execute_node(node) for node in nodes]
results = asyncio.gather(*tasks)
return self._merge_results(results)
def _get_next_nodes(self, state: Dict) -> List[str]:
"""智能节点调度 - 基于条件路由"""
next_nodes = []
for edge in self.edges:
if edge.condition(state):
next_nodes.append(edge.target)
return next_nodes

执行引擎的关键特性:

1.图计算优化:基于图计算算法,支持大规模并行计算;

2.状态管理高效:增量状态更新,避免全量状态复制;

3.节点调度智能:基于条件路由的智能节点调度;

4.并行执行支持:支持多个节点的并行执行,提升性能;

5.错误恢复机制:完整的错误处理和恢复机制;

4.5 工具设计原则

基于实际项目经验,我总结出以下工具设计的核心原则:

实战案例:基于真实需求的工具设计

基于智能解决方案系统的真实需求,设计以下工具:

# 工具1:内部知识库搜索 - 解决信息获取问题
def search_internal_knowledge(query: str, knowledge_type: str = "all") -> str:
"""按需检索,避免信息过载"""
# 根据知识类型选择性搜索
if knowledge_type == "customer":
results = customer_knowledge_base.search(query, limit=3)
elif knowledge_type == "product":
results = product_knowledge_base.search(query, limit=3)
else:
results = knowledge_base.search(query, limit=5)
# 返回原始数据,让AI自己判断如何使用
return format_search_results(results)
# 工具2:用户意图分析 - 解决"固化输出"问题
def analyze_user_intent(user_input: str) -> str:
"""让AI理解用户的真实需求"""
intent = {
"needs_customer_info": "客户" in user_input,
"needs_product_info": "产品" in user_input,
"output_scope": "partial"if"只要" in user_input else"full",
"page_count": extract_page_count(user_input)
}
return json.dumps(intent)

工具设计经验:

工具设计需要考虑职责边界、数据流纯净性、错误处理、性能优化和可观测性。每个工具都有明确的输入输出和职责范围,只负责数据获取和格式化,不进行业务逻辑处理。同时需要完善的异常处理、频率控制、并行调用等性能优化,以及完整的日志记录和监控指标。

# 工具设计核心原则
"""
1. 工具只负责获取信息,不负责分析
2. 工具只提供数据,不提供结论
3. 工具支持LLM推理,不替代LLM推理
4. 保持工具简单、纯净、单一职责
"""
@tool
def web_search(query: str) -> str:
"""获取互联网最新信息"""
return search_engine.search(query)
@tool
def search_internal_knowledge(query: str) -> str:
"""获取内部文档和知识"""
return knowledge_base.search(query)

工具设计原则:

工具设计要遵循单一职责原则,每个工具只做一件事,做好一件事。工具只提供原始数据,不进行业务逻辑处理,同时需要优雅地处理各种异常情况,支持并行调用和缓存机制。

4.6 提示词工程设计

在实际项目中,我发现提示词工程是ReAct系统成功的关键因素。经过大量踩坑和调试,我总结出了一套提示词工程方法论:

4.6.1 核心工作原则设计

问题:传统的提示词往往过于僵化,无法适应复杂的业务场景;

解决方案:设计启发式指导框架,让Agent能够自主思考和决策;

## 核心工作原则
### 思考引导
- **智能分析**:分析用户输入的信息丰富度和需求复杂度
- **深度推理**:基于收集的信息进行多维度推理和关联分析
- **自主决策**:根据分析结果,自主选择执行策略和工具调用方式
- **价值导向**:每页内容都要体现客户价值和业务成果
### 深度思考框架
**多维度分析策略**:
- **客户维度**:规模、发展阶段、业务模式、技术成熟度
- **产品维度**:核心能力、技术优势、应用场景、实施复杂度
- **行业维度**:发展趋势、竞争格局、转型路径、成功要素
- **竞争维度**:竞品分析、差异化优势、价值主张、市场定位
4.6.2 提示词工程经验

从规则到框架的转变

传统提示词:"如果遇到X情况,执行Y操作"

优化后提示词:"分析当前情况,基于以下框架自主决策..."

从静态到动态的转变

传统提示词:"按照以下步骤执行"优化后提示词:"根据实际情况,灵活调整执行策略"

从检查清单到质量框架的转变

传统提示词:"确保包含以下要素:A、B、C"

优化后提示词:"评估内容质量,确保达到以下标准..."

4.6.3 实践中的关键经验

经验1:提示词不是指令,而是思考引导

# 错误的提示词设计
prompt = """
如果用户询问天气,调用天气API
如果用户询问时间,调用时间API
如果用户询问新闻,调用新闻API
"""
# 正确的提示词设计
prompt = """
分析用户需求,判断需要什么信息,然后选择合适的工具。
考虑以下因素:
1. 用户意图的明确程度
2. 所需信息的类型和来源
3. 当前上下文的相关性
4. 用户可能的后续需求
"""

经验2:建立质量评估框架,而不是检查清单

# 错误的质量检查
quality_check = [
"是否包含所有必要信息?",
"是否格式正确?",
"是否长度合适?"
]
# 正确的质量框架
quality_framework = """
评估内容质量:
1. 信息完整性:是否回答了用户的核心问题?
2. 逻辑一致性:内容是否逻辑清晰、前后一致?
3. 价值相关性:是否对用户有实际价值?
4. 可操作性:用户是否能够基于此内容采取行动?
"""

经验3:场景适配比通用模板更重要

# 通用模板的问题
generic_prompt = "请分析以下内容并提供建议"
# 场景适配的优势
business_analysis_prompt = """
作为业务分析师,请分析以下内容:
1. 识别关键业务指标和趋势
2. 分析潜在风险和机会
3. 提供具体的改进建议
4. 考虑实施可行性和成本效益
"""
4.6.4 提示词优化的关键原则

启发式指导而非僵化规则

# 不好的提示词
prompt = """
你必须按照以下步骤:
1. 先分析问题
2. 再调用工具
3. 最后给出答案
"""
# 好的提示词
prompt = """
你是一个智能助手,能够帮助用户解决各种问题。
当遇到需要外部信息的问题时,你可以主动调用相关工具。
请根据问题的具体情况,灵活地选择最合适的解决方案。
"""

灵活策略而非固定流程

# 不好的设计
def fixed_workflow(question):
if "天气" in question:
returncall_weather_api()
elif "订单" in question:
returncall_order_api()
else:
return "我无法处理"
# 好的设计
def flexible_workflow(question):
# 让AI自己决定需要什么工具
return agent.invoke({"messages": [{"role": "user", "content": question}]})

质量框架而非检查清单

# 不好的设计
def check_quality(response):
checks = [
"是否包含关键词",
"是否超过100字",
"是否包含标点符号"
]
return all(checks)
# 好的设计
def assess_quality(response, context):
# 基于上下文和用户需求评估质量
return quality_score
4.7 常见问题与解决方案

AI过度依赖工具

# 解决方案:在提示词中强调判断能力
prompt = """
你是一个智能助手。当用户问题简单明确时,可以直接回答;
当需要外部信息时,才调用相关工具。
请根据问题的复杂度和信息需求,合理选择处理方式。
"""

工具调用失败处理

# 解决方案:优雅的错误处理
def robust_tool_call(tool_name, tool_input):
try:
result = tool_name.invoke(tool_input)
return result
except Exception as e:
return f"工具调用失败:{str(e)},让我尝试其他方法"

循环调用问题

# 解决方案:设置最大迭代次数
classReActAgent:
def __init__(self, max_iterations=5):
self.max_iterations = max_iterations
self.current_iteration = 0
def should_continue(self, state):
self.current_iteration += 1
if self.current_iteration >= self.max_iterations:
return"end"
# 其他逻辑...
4.8 性能优化实践

在智能解决方案系统中,我遇到了几个关键的性能问题,这些问题直接影响了用户体验:

信息过载导致的性能问题

# 问题:每次都要检索大量信息,即使不需要
def generate_outline_with_knowledge(user_input):
# 问题:无论用户需要什么,都检索所有信息
customer_info = search_customer_knowledge(user_input)  # 耗时2-3秒
product_info = search_product_knowledge(user_input)   # 耗时2-3秒
industry_info = search_industry_knowledge(user_input)  # 耗时2-3秒
# 总耗时:6-9秒,用户体验很差
return generate_outline(customer_info, product_info, industry_info)
# 解决方案:ReAct智能判断
def react_outline_generation(user_input):
# 1. 先分析用户意图
intent = analyze_user_intent(user_input)
# 2. 按需检索
retrieved_info = {}
if intent.needs_customer_info:
retrieved_info["customer"] = search_customer_knowledge(user_input)
if intent.needs_product_info:
retrieved_info["product"] = search_product_knowledge(user_input)
if intent.needs_industry_info:
retrieved_info["industry"] = search_industry_knowledge(user_input)
# 3. 基于检索结果生成大纲
return generate_adaptive_outline(intent, retrieved_info)

固化输出导致的用户体验问题

# 问题:总是生成"完整"的PPT大纲
用户说:"我只要3页介绍产品功能"
系统回答:生成20页的完整PPT大纲  # 用户体验差
# 解决方案:智能判断输出范围
def generate_adaptive_outline(intent, retrieved_info):
if intent.output_scope == "partial":
# 只生成用户需要的部分
return generate_partial_outline(intent.focus_areas, retrieved_info)
elif intent.output_scope == "full":
# 生成完整大纲
return generate_full_outline(retrieved_info)
else:
# 根据页数要求生成
return generate_specific_outline(intent.page_count, retrieved_info)

工具调用频率过高

# 问题:AI过度依赖工具,即使问题很简单
用户问:"什么是PPT?"
AI回答:我需要搜索一下PPT的定义...  # 不必要的工具调用
# 解决方案:智能判断是否需要工具
def should_use_tools(user_input, intent):
# 简单问题直接回答
if intent.complexity == "simple":
return False
# 需要外部信息才调用工具
if intent.needs_external_info:
return True
return False

  1. 智能配置管理
def get_adaptive_config(task_complexity: str) -> Dict[str, Any]:
configs = {
"simple": {
"recursion_limit": 20,
"max_iterations": 10,
"timeout": 30
},
"complex": {
"recursion_limit": 50,
"max_iterations": 25,
"timeout": 120
}
}
return configs.get(task_complexity, configs["simple"])
  1. 工具并行调用
# 支持并行工具调用
def parallel_tool_calls(tools: List[BaseTool], inputs: List[Dict]) -> List[str]:
import asyncio
async def call_tool(tool, input_data):
return await tool.ainvoke(input_data)
tasks = [call_tool(tool, input_data) for tool, input_data in zip(tools, inputs)]
return asyncio.run(asyncio.gather(*tasks))
  1. 调用频率控制
import time
from collections import defaultdict
classRateLimiter:
def __init__(self, max_calls_per_minute=60):
self.max_calls = max_calls_per_minute
self.calls = defaultdict(list)
def can_call(self, tool_name: str) -> bool:
now = time.time()
# 清理1分钟前的调用记录
self.calls[tool_name] = [t for t in self.calls[tool_name] if now - t < 60]
return len(self.calls[tool_name]) < self.max_calls
def record_call(self, tool_name: str):
self.calls[tool_name].append(time.time())
# 创建全局频率限制器实例
rate_limiter = RateLimiter()
4.9 错误处理与监控

def _handle_state_update(self, data: Any, step_count: int, outline_id: str, source: str = "", message_context: Dict[str, Any] = None):
# 处理工具调用开始
ifisinstance(last_message, AIMessage)and last_message.tool_calls:
for tool_call in last_message.tool_calls:
send_outline_tool_call_start(
outline_id=outline_id,
tool_name=tool_name,
tool_args=tool_args,
step_count=step_count
)
# 处理工具调用完成
elif isinstance(last_message, ToolMessage):
if is_error:
send_outline_tool_call_error(...)
else:
send_outline_tool_call_complete(...)

监控体系设计:

1.全链路监控:从任务开始到完成的完整监控;

2.实时日志:详细的执行日志和状态更新;

3.错误追踪:完整的错误信息和堆栈跟踪;

4.性能指标:执行时间、工具调用次数、成功率等;

通过智能PPT生成系统的实践,我们积累了大量的优化经验,掌握了这些经验后,接下来我们回到基础,通过手写实现来深入理解ReAct的机制。

五、手写实践:从零构建ReAct Agent

经过前面的理论学习和源码分析,现在动手实现一个简化版的ReAct Agent。这个实现虽然功能简单,但包含了ReAct范式的要素。

5.1 核心实现代码
# 手写ReAct Agent
# 安装:pip install langchain langchain-ollama
from langchain_ollama import ChatOllama
from langchain_core.messages import HumanMessage, AIMessage, ToolMessage
from typing import Dict, List, Any, Optional
import re
import time
classMiniReActAgent:
"""手写ReAct Agent """
def __init__(self):
self.model = ChatOllama(model="qwen3:8b", temperature=0.1)
self.tools = {
"time": self._get_time,
"calc": self._calculate,
"search": self._search
}
# 状态管理
self.state = {
"messages": [],
"current_step": "start",
"tool_results": {},
"reasoning": ""
}
def _get_time(self, param=""):
"""获取当前时间"""
import datetime
now = datetime.datetime.now()
return f"现在是{now.strftime('%Y年%m月%d日 %H:%M')}"
def _calculate(self, expression: str):
"""安全计算表达式"""
try:
ifnot re.match(r'^[0-9+\-*/.() ]+$', expression):
return "计算错误:表达式包含非法字符"
return str(eval(expression))
except:
return "计算错误:表达式无效"
def _search(self, query: str):
"""模拟搜索功能"""
return f"关于'{query}'的搜索结果..."
def should_continue(self, state: Dict) -> str:
"""条件路由 """
last_message = state["messages"][-1] if state["messages"] else None
# 检查AI回复中是否包含工具调用
if isinstance(last_message, AIMessage):
content = last_message.content
if "工具:" in content and "参数:" in content:
return "tools"  # 需要工具
return "end"        # 直接结束
def agent_node(self, state: Dict) -> Dict:
"""Agent节点 """
# 构建工具描述 - 让AI知道有哪些工具可用
tool_descriptions = []
for tool_name, tool_func in self.tools.items():
if tool_name == "time":
tool_descriptions.append("time: 获取当前时间(无需参数)")
elif tool_name == "calc":
tool_descriptions.append("calc: 计算数学表达式(需要表达式参数)")
elif tool_name == "search":
tool_descriptions.append("search: 搜索信息(需要搜索关键词)")
# 构建提示词
last_message = state["messages"][-1].content
# 检查是否有工具执行结果
if "工具执行结果:" in last_message:
# 基于工具结果继续推理
prompt = f"""
用户问题: {state['messages'][0].content}
工具执行结果: {last_message}
请基于工具执行结果回答用户问题。
如果还需要更多信息,请回答: 工具: [工具名] 参数: [参数]
如果信息足够,请直接回答用户问题。
"""
else:
# 初始推理
prompt = f"""
用户问题: {last_message}
可用工具: {', '.join(tool_descriptions)}
请分析问题并决定是否需要使用工具。
如果需要工具,请回答: 工具: [工具名] 参数: [参数]
注意:time工具无需参数,直接写"工具: time 参数: 无"
如果不需要工具,请直接回答用户问题。
"""
# 调用模型
response = self.model.invoke([HumanMessage(content=prompt)])
# 更新状态
new_state = state.copy()
new_state["messages"] = state["messages"] + [AIMessage(content=response.content)]
new_state["current_step"] = "agent"
return new_state
def tools_node(self, state: Dict) -> Dict:
"""Tools节点 """
last_message = state["messages"][-1]
if isinstance(last_message, AIMessage):
content = last_message.content
# 解析工具调用
if "工具:" in content and "参数:" in content:
# 提取工具名和参数
tool_match = re.search(r'工具:\s*(\w+)', content)
param_match = re.search(r'参数:\s*(.+)', content)
if tool_match and param_match:
tool_name = tool_match.group(1)
param = param_match.group(1).strip()
# 执行工具
if tool_name in self.tools:
# 处理time工具的无参数调用
if tool_name == "time" and (param == "无" or param == "" or param == "[]"):
result = self.tools[tool_name]("")
else:
result = self.tools[tool_name](param)
# 更新状态
new_state = state.copy()
new_state["messages"] = state["messages"] + [AIMessage(content=f"工具执行结果: {result}")]
new_state["current_step"] = "tools"
return new_state
return state
def react_cycle(self, question: str):
"""ReAct核心循环 """
print(f"用户问题: {question}")
# 初始化状态
self.state = {
"messages": [HumanMessage(content=question)],
"current_step": "start",
"tool_results": {},
"reasoning": ""
}
# 执行循环
max_iterations = 5
for i in range(max_iterations):
print(f"\n--- 第{i+1}轮执行 ---")
# 1. Agent节点
self.state = self.agent_node(self.state)
print(f"Agent推理: {self.state['messages'][-1].content}")
# 2. 条件路由
next_step = self.should_continue(self.state)
print(f"路由决策: {next_step}")
if next_step == "tools":
# 3. Tools节点
self.state = self.tools_node(self.state)
print(f"工具执行结果: {self.state['messages'][-1].content}")
# 4. 继续下一轮推理
continue
else:
# 5. 结束
print("执行完成")
break
return self.state["messages"][-1].content
# 使用示例
if __name__ == "__main__":
agent = MiniReActAgent()
# 测试不同场景
agent.react_cycle("现在几点了?")
print("\n" + "="*50 + "\n")
agent.react_cycle("计算 15 + 27")
print("\n" + "="*50 + "\n")
agent.react_cycle("什么是人工智能?")

运行效果展示:

从运行截图可以看到,这个极简ReAct Agent展现了ReAct范式的工作原理:当用户问"现在几点了?"时,Agent会推理出需要调用时间工具;当用户问"什么是人工智能?"时,Agent会直接回答而不调用工具。整个示例代码实现了推理→行动→观察→回答的完整循环。

5.2 从手写实现到生产系统的思考

手写实现确实能够帮助我们对ReAct有了更深的理解。但说实话,真正要在项目中使用,这个简化版本还远远不够。

ReAct的"推理-行动-观察"循环看起来简单,但实现起来需要考虑很多细节。状态管理、工具调用、错误处理,每个环节都有坑。

在实际项目中,你需要考虑状态类型安全、工具调用失败、模型调用超时、内存管理等问题。这些细节处理不好,系统就会不稳定。

这就是为什么需要LangGraph这样的框架。它把这些复杂性都处理好了,让我们能够专注于业务逻辑。

六、总结

在做智能解决方案系统的这段时间,我踩了不少坑,也学到了一些东西。ReAct范式确实在Agent落地方面解决了很多实际问题,总结下来主要是这个方面:

可控性比智能性更重要

用户说"只要3页",AI如果生成20页,即使内容再好,用户体验也是失败的。问题的根源在于AI的决策过程不透明,用户无法知道AI为什么生成了20页。ReAct让AI的思考过程变得透明,用户可以看到AI的推理过程,从而控制输出。这比让它变得更聪明更有价值。

工具设计决定系统上限

工具不是简单的API调用,而是AI的"手"和"眼"。设计工具时需要考虑灵活性、信息完整性和错误恢复能力。

状态管理是复杂系统的核心

LangGraph的图状态模型证明,复杂系统不是靠复杂的逻辑,而是靠清晰的状态转换。

从小做起

先实现一个最简单的ReAct Agent,让它能处理一个具体场景,再逐步增加复杂度。不要一开始就想着做复杂系统。

提示词需要反复调试

明确AI的角色和职责,提供清晰的决策标准,包含错误处理机制。这部分需要大量测试和调整。

性能优化从架构开始

在智能解决方案系统中,按需检索比全量检索快3倍,这就是架构设计的价值。这个例子说明,性能问题往往不是代码实现问题,而是架构设计问题。类似的还有缓存策略、并行处理、数据分片等,都需要从架构层面考虑。

技术选型的平衡

ReAct范式虽然强大,但并不是万能的。在实际项目中,需要根据任务复杂度选择合适的方案:简单任务用直接API调用,复杂但确定的任务用workflow编排,只有真正需要动态推理和工具调用的场景才使用ReAct。技术选型要务实,避免为了使用新技术而过度设计。

有些问题用ReAct解决得很好,有些问题用传统方法更简单。重要的是理解其原理,然后根据实际情况选择合适的技术方案。

以上是本篇的全部内容,希望对你有帮助

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】

https://img-blog.csdnimg.cn/img_convert/05840567e2912bcdcdda7b15cba33d93.jpeg

在这里插入图片描述

为什么要学习大模型?

我国在A大模型领域面临人才短缺,数量与质量均落后于发达国家。2023年,人才缺口已超百万,凸显培养不足。随着AI技术飞速发展,预计到2025年,这一缺口将急剧扩大至400万,严重制约我国AI产业的创新步伐。加强人才培养,优化教育体系,国际合作并进是破解困局、推动AI发展的关键。

在这里插入图片描述

在这里插入图片描述

大模型入门到实战全套学习大礼包

1、大模型系统化学习路线

作为学习AI大模型技术的新手,方向至关重要。 正确的学习路线可以为你节省时间,少走弯路;方向不对,努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划,带你从零基础入门到精通!

img


2、大模型学习书籍&文档

学习AI大模型离不开书籍文档,我精选了一系列大模型技术的书籍和学习文档(电子版),它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。

在这里插入图片描述

3、AI大模型最新行业报告

2025最新行业报告,针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

img

4、大模型项目实战&配套源码

学以致用,在项目实战中检验和巩固你所学到的知识,同时为你找工作就业和职业发展打下坚实的基础。

img

5、大模型大厂面试真题

面试不仅是技术的较量,更需要充分的准备。在你已经掌握了大模型技术之后,就需要开始准备面试,我精心整理了一份大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。

img

适用人群

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范
  • …
第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署
  • …
第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建
  • …
第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案
  • …

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】

https://img-blog.csdnimg.cn/img_convert/05840567e2912bcdcdda7b15cba33d93.jpeg

AI Agent工程:2026年软件范式转移与LangChain实战指南 这次我们来看一个关于AI Agent技术趋势的深度话题。LangChain创始人Harrison Chase近期发出了一个明确的行业警告:2026年将成为“Agent工程”的分水岭,传统软件公司的生存考验已经拉开序幕。这并非危言耸听,而是基于当前技术迭代速度和资本流向做出的判断。对于开发者、技术决策者和企业架构师而言,理解Agent工程的内涵、评估其对现有技术栈的冲击、并提前规划应对策略,已经变得刻不容缓。 简单来说,Agent工程是指设计、构建、部署和维护能够自主理解目标、规划并执行复杂任务的智能体(AI 阅读详情

相关推荐

Agent开发框架选型指南:LangChain、LangGraph、Deep Agents与ADK对比

在人工智能应用从对话式交互走向自主决策的今天,Agent开发已成为大模型落地的重要方向。理解Agent循环、状态管理、多智能体编排等基础概念,是构建可靠智能系统的前提。LangChain作为成熟的工具生态,为RAG与文档问答提供了丰富组件;LangGraph通过状态图模型强化了流程控制与条件路由;Deep Agents以极简循环范式降低单任务Agent的工程门槛;而ADK则面向Google云环境下的多智能体协作。本文结合工程实践,从环境搭建、最小示例到常见问题逐一梳理,为技术团队提供可落地的选型决策参考。

weixin_33770878的博客 571

LangChain实战指南:从RAG到Agent,构建企业级大模型应用

在人工智能应用开发领域,围绕大语言模型构建复杂业务系统已成为必然趋势。开发者要解决的核心问题包括:如何让模型获取私有知识、如何自主调用外部工具,以及如何设计可控的多步骤推理流程。检索增强生成(RAG)通过向量检索与生成结合,解决了模型知识时效性和私有化需求;Agent技术以ReAct范式驱动模型进行“思考-行动-观察”循环,实现任务规划与工具调用;而模型上下文协议MCP则统一了Agent与外部工具的数据交互标准。这些技术共同构成了现代大模型应用开发的基础设施,并逐步融入企业知识库问答、智能客服、自动化办公等

weixin_33847182的博客 304

AI Agent学习资料整理指南:从散落收藏到体系化知识库

AI Agent技术快速发展,相关学习资料大量涌现,但资料庞杂、信息过载让学习者难以构建有效知识体系。掌握系统化的资料整理方法成为提升学习效率的关键。其核心在于先建立认知框架,区分基础层、核心层、工程层与应用层,再结合知识库工具对资料进行分类归档、标签管理和双向链接。知识库技术(如使用Obsidian配合Dataview插件)能构建可检索的个人知识网络,而RAG技术则能进一步将笔记转化为可交互的Agent问答数据源。这一方法不仅适用于AI Agent学习,也可迁移至技术文档管理、面试准备与团队知识沉淀等场景

weixin_34253126的博客 401

关于REACT范式的一些思考

关于REACT范式的一些思考 REACT范式经过近一年的探索,让我们在很多领域有了非常广泛的应用,它确实提升了很多之前无法解决的问题,比如大模型虽然在语言理解和交互式决策方面在任务中表现出令人印象深刻的表现,但是如何让模型基于解释来使用 LLMs 以交错方式生成推理跟踪和特定于任务的操作 一直是一个问题,REACT范式提出了一种,模仿人类在“行动”和“推理”之间的这种紧密协同作用,并且模仿人类快...

weixin_42305648的博客 527

从入门到实战:构建自主AI智能代理(Agent)的完整指南

在人工智能领域,大语言模型(LLM)作为核心的推理引擎,通过理解、规划和生成能力,推动了AI应用范式的演进。其工作原理在于将复杂的自然语言指令转化为结构化的任务序列,并通过思维链(Chain-of-Thought)等技术进行多步推理。这一技术的核心价值在于,使AI系统从被动应答升级为具备自主规划与执行能力的“智能代理”,从而在自动化办公、智能数据分析、代码生成等复杂场景中创造实际生产力。本文聚焦于如何系统学习并构建此类智能代理系统,深入探讨了其核心组件,包括作为“大脑”的LLM、作为“手脚”的工具(Tool

weixin_30482181的博客 332

Agent全面爆发!一文搞懂背后的核心范式ReAct!

ReAct范式:大模型与外部环境协同的智能体架构 摘要:ReAct(Reasoning+Acting)是一种创新的大模型智能体架构范式,通过构建"推理-行动-观察"(TAO)闭环机制,实现了语言模型推理能力与外部环境交互能力的协同。该范式通过显式推理轨迹、环境锚定原则和模块化解耦设计,有效解决了传统AI系统存在的事实幻觉、策略僵化和决策不可解释等核心痛点。ReAct采用三层架构设计:核心逻辑层负责推理与规划,执行循环层调度TAO流程,外部交互层实现环境交互。其应用场景涵盖知识密集型任务、

银行信息系统应用架构详解 437

ReAct范式全流程详解

ReAct范式是推理(Reasoning)-> 行动(Acting)-> 观察(Observe)的闭环循环,让AI从“纸上谈兵”的纯语言模型,变成“手脑并用”的智能执行体。ReAct三大核心优势:1. 突破幻觉边界传统LLM问题:遇到知识盲区时编造答案ReAct解决方案:不知道就去查,通过工具调用获取实时、准确的外部信息实际效果:回答的准确性从“模型训练数据的局限”提升到“真实世界的边界”2. 克服能力局限​传统LLM问题:只能说,不能做ReAct解决方案:想到了就去做,通过工具执行具体操作实际效果。

gdpu2400502251的博客 1418

Ubuntu22.04 上ROS1 Noetic的安装与常见问题解决

本文详细介绍了在Ubuntu 22.04系统上安装ROS1 Noetic的两种主要方法:推荐使用社区维护的适配仓库进行便捷安装,并提供了从源码编译的备选方案。文章重点解决了安装后编译ROS包时极易遇到的“shared_mutex”等C++标准库冲突问题,并给出了其他常见错误的排查与解决指南,帮助开发者顺利搭建稳定的ROS开发环境。

weixin_29295541的博客 363

大白话带你玩转大模型 Agent:一文带你看懂 ReAct 范式

如果你用过智能助手,可能遇到过这种情况:问它 “今天北京的 PM2.5 是多少,适合户外运动吗?”,它可能瞎编一个数字,或者直接说 “适合”—— 因为它既不会查实时数据,也不会结合数据推理。但如果用了ReAct 范式,AI 就会像个靠谱的助理:先想 “我需要查北京今天的 PM2.5 数据”,然后调用天气 API,拿到数据后再分析 “数值大于 100,不适合户外运动”。 今天咱们就用大白话聊聊,这个让 AI 变聪明的 ReAct 范式到底是啥。

cuguanren的博客 1355

VMware ESXi 7.0下Intel网卡SR-IOV配置实战:解决虚拟化网络延迟问题

本文详细介绍了在VMware ESXi 7.0环境下为Intel网卡配置SR-IOV(单根I/O虚拟化)的完整实战流程。通过硬件辅助直通技术,虚拟机可直接访问物理网卡资源,有效绕过虚拟化层瓶颈,从而显著降低网络延迟和CPU开销,适用于金融交易、实时计算等对性能敏感的场景。

embedding5hiker的博客 553

5G R18标准:AI/ML如何重塑空口优化与网络架构

人工智能与机器学习正逐步成为通信网络优化的核心技术。其核心原理在于通过数据驱动模型,从海量网络数据中学习信道变化、用户行为等统计规律,替代传统的基于固定规则的优化方法。这一技术范式能显著提升网络性能与效率,尤其在空口资源管理、干扰协调和能耗控制等场景中价值突出。在5G Advanced(R18)标准化框架下,AI/ML被系统性地引入空口设计,聚焦于信道状态信息反馈增强、波束管理与预测等关键用例。通过定义网络侧AI、终端侧AI及联合学习的标准化接口与流程,R18旨在实现跨厂商设备的智能协同,推动无线网络向自适

weixin_35671843的博客 244

智能体开发范式之 ——ReAct (Reasoning and Acting) 到底是什么?

智能体开发范式之 ——ReAct (Reasoning and Acting) 到底是什么?

qq_46094651的博客 2516

国产PLC实战:用汇川Easy320搞定TCP通信,手把手教你网口转串口控制设备

本文详细解析了如何使用汇川Easy320 PLC实现TCP通信与串口控制,解决工业自动化中设备间通信协议差异问题。通过实战案例和代码示例,展示了Easy320在协议转换、数据解析和串口转发中的高效应用,帮助工程师快速掌握网口转串口控制技术。

weixin_31774841的博客 500

AI Agent学习路线全解析:从大模型原理到LangChain实战

大模型本质上是预测下一个token的引擎,而AI Agent在其基础上构建了感知-决策-行动的闭环,使模型能够调用工具、规划任务并迭代执行。理解这一原理后,技术价值逐渐显现:Agent能将自然语言转化为真实世界的动作,落地于自动化办公、知识库问答、智能客服等场景。在实际工程中,LangChain与LangGraph提供了灵活的编排框架,ReAct等经典模式则解释了模型如何交替推理与行动。Java技术栈可通过Spring AI快速集成工具调用能力。面对海量学习资料,应更关注核心论文、官方文档和最小可运行代码,

weixin_34341229的博客 536

2023年全国青少年信息素养大赛复赛真题(C++智能算法复赛真题:带解析)

2023年全国青少年信息素养大赛复赛真题(C++智能算法复赛真题:带解析)

王老师青少年编程 2114

Doris实战——结合Flink构建极速易用的实时数仓

Doris实战——结合Flink构建极速易用的实时数仓

爱吃辣条的博客 8231

大模型实战指南:从提示工程到AI Agent的落地应用

大语言模型(LLM)作为当前人工智能领域的核心技术,其工作原理基于Transformer架构,通过海量数据预训练获得强大的语言理解和生成能力。这项技术的核心价值在于将复杂的自然语言处理任务转化为高效的工程实践,极大地降低了AI应用开发门槛。在实际应用中,提示工程(Prompt Engineering)成为撬动模型潜力的关键杠杆,通过精心设计的指令引导模型输出精准结果。而AI Agent则代表了更高级的应用范式,通过集成规划、工具调用和记忆模块,使大模型能够自主完成复杂任务序列。从代码开发助手到智能数据分析,

weixin_34354945的博客 444

【ArcGIS遇上Python】ArcGIS10.8 Python代码批量完美实现MODIS NDVI数据格式转换和投影变换

由于论文的需要,将MODIS NDVI数据进行投影变换和格式转换,具体操作可以参照:《ArcGIS10.8完美实现MODIS NDVI数据格式转换和投影变换》,但是该文章中的做法只能一次性实现一景影像的转换,没法批量,虽然ArcGIS中提供了Batch的方法但是需要挨个添加数据,确定输出路径等等,本文就实现以ArcGIS10.8 Python代码批量完美实现MODIS NDVI数据格式转换和投影变换。先来看投影后的效果: 在实现批量投影转换之前,需要两个投影文件:Sinusoidal.prj和MyAl

智慧空间实验室 3815

从零开始构建智能Agent:大模型驱动的自主决策系统开发指南(含代码实例,建议收藏)

Agent(智能体或代理)是人工智能领域中的核心概念,指能够感知环境、自主决策并执行任务以实现特定目标的智能实体。简单来讲,可以理解它是代理你去做一些事情。环境感知:通过视觉传感器、语音接口等多模态"感官"实时获取环境数据智能决策:运用深度学习模型和强化学习算法进行复杂决策任务执行:可调用API工具库或操控物理设备完成实际工作持续进化:具备在线学习和迁移学习能力,实现性能的持续提升。

weixin_72959097的博客 794

SAP_MM_配额安排_PA认证总结

配额安排是企业进行供应商管理的一种方式。通过配额管理,企业可以与多家供应商保持业务往来,以保证某些紧缺原材料的正常供货。此外,企业也可以通过不同的配额比例,提高供应商优化服务、降低价格的积极性。

java_zhong1990的专栏 1021

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

2026年AI风口!从ChatGPT到数字生命体,Agent全栈架构深度解析(建议收藏+转发)

AI Agent 的本质,不是技术炫技,而是把人类从重复劳动中解放出来。未来的竞争力,不在于“有没有AI”,而在于“有没有会干活的AI员工”。

weixin_59191169的博客 995

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

AI Agent开发实战:从零搭建智能体全流程指南

大模型技术正从对话交互走向任务自动执行,AI Agent(智能体)成为连接模型与业务场景的关键桥梁。其核心原理基于ReAct模式,通过“思考-行动-观察”循环,让模型自主拆解目标并调用外部工具完成复杂流程。相比传统硬编码,Agent显著提升了业务系统的灵活性与适应性,可广泛应用于智能客服、数据分析、自动化运维等场景。本文从环境准备与框架选型(LangChain、Dify等)切入,手把手演示最小Agent的实现与部署,并深入探讨多Agent协作、成本控制与安全边界等工程实践,帮助开发者快速构建可落地、可观测的

weixin_34208185的博客 457

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

从模型部署到多智能体协作:大模型Agent实战开发全解析

大模型应用正从简单的API调用走向复杂的智能体(Agent)编排,这要求开发者理解工具调用、记忆管理、任务规划等核心机制。本文基于LangGraph、LangChain4j、Dify等主流框架,系统梳理了从本地模型部署(Ollama/vLLM)、RAG知识库构建、到LoRA微调与多智能体协作的完整技术链路。同时,结合销售智能体等真实项目案例,探讨了Function Calling、ReAct模式、上下文压缩等工程实践要点,为后端开发者及AI应用工程师提供一条清晰的学习路线。无论你是想入门大模型应用层,还是希

weixin_33912638的博客 530

Agent招聘需求暴涨6倍!小白程序员必收藏,轻松入门大模型时代

回答要点:这是提升Agent成功率最有效的模式。Agent生成输出后,由另一个(或同一个)Agent扮演批评者(Critic),检查输出是否符合约束条件,并提供反馈让前者迭代。技术细节:可以使用Reflexion架构,记录”失败轨迹”作为长短期记忆,避免重复同样的错误。深度技术实现与状态管理对于正在迷茫择业、想转行提升,或是刚入门的程序员、编程小白来说,有一个问题几乎人人都在问:未来10年,什么领域的职业发展潜力最大?答案只有一个:人工智能(尤其是大模型方向)

xxue345678的博客 361

2026年最炙手可热的技术岗位!收藏这份Agent工程师成长指南(小白程序员必看)

Agent Engineer(智能体工程师)是一个专门设计、构建和维护 AI Agent 系统的工程角色。与传统软件工程师或 ML 工程师不同,他们处理的是非确定性输入与不确定性输出的复杂系统——AI 智能体。"Building agents is like building with lego bricks instead of pouring concrete." —— 不是浇筑混凝土,而是搭乐高积木。—— Sierra AI 团队。

ytt0523_com的博客 347

Java大模型应用开发实战:Spring AI、LangChain与Agent全解析

大模型技术正在重塑后端开发范式,Java工程师无需转投Python,也能基于Spring Boot生态构建生产级AI应用。核心思路是将模型调用、提示词管理、工具调用、向量检索等能力封装为服务,而Spring AI、LangChain与Agent正是这一领域的三大关键支柱。Spring AI提供官方标准化的模型接入抽象,让AI能力像Starter一样即插即用;LangChain贡献了链式编排、记忆、检索器等设计范式,为复杂应用提供方法论参考;Agent则通过Function Calling实现模型自主决策与工

weixin_34187862的博客 378
上一篇: 收藏!Java开发转大模型不踩坑指南:别丢优势,从应用落地切入稳赚
下一篇: 收藏!传统开发岗内卷突围:2025大模型学习指南,小白&程序员必看
冻感糕人~
博客等级 码龄3年 8926粉丝 2384原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值