找别人做网站要注意什么软件自己搭建网站需要什么

张小明 2025/12/31 11:13:55
找别人做网站要注意什么软件,自己搭建网站需要什么,网页游戏排行榜开心路,网站分几类简介 本文详细解析ReAct范式原理#xff0c;即通过推理-行动-观察-调整循环让AI具备动态决策能力。分析了LangGraph框架中的实现机制#xff0c;包括状态驱动架构和条件路由等核心设计。通过智能解决方案系统的真实案例展示了ReAct应用价值#xff0c;并提供了…简介本文详细解析ReAct范式原理即通过推理-行动-观察-调整循环让AI具备动态决策能力。分析了LangGraph框架中的实现机制包括状态驱动架构和条件路由等核心设计。通过智能解决方案系统的真实案例展示了ReAct应用价值并提供了手写实现示例。最后总结了ReAct项目经验包括工具设计、提示词工程和性能优化等最佳实践。引言最近在做智能解决方案系统时我遇到了一个关键问题如何让AI在复杂任务中既保持推理能力又能有效执行行动传统AI系统往往要么只能基于训练数据推理要么只能执行固定流程缺乏动态决策能力。ReActReasoning and Acting范式正是为了解决这个问题而诞生的。它让AI能够交替进行推理和行动通过思考-行动-观察-调整的循环实现更智能的决策过程。本文将解析ReAct范式的原理分析LangGraph中的实现机制并通过真实项目案例展示如何在实际应用中发挥ReAct的价值。一、ReAct范式原理1.1 ReAct概念ReAct范式由Shunyu Yao等人在2022年的论文《ReAct: Synergizing Reasoning and Acting in Language Models》中首次提出。ReAct的核心在于推理和行动的交替进行而不是传统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 什么是LangGraphLangGraph是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(modelqwen3:8b, temperature0.1) # 3. 创建ReAct Agent agent create_react_agent( modelmodel, tools[search_weather, calculate_distance], prompt你是一个天气助手可以帮助用户查询天气和计算距离。, versionv2 ) # 4. 使用Agent result agent.invoke({ messages: [HumanMessage(contentA城市和B城市的天气怎么样距离有多远)] })LangGraph的简洁性体现在几行代码就创建了一个完整的ReAct Agent系统自动判断是否需要调用工具消息历史自动维护工具调用完全透明。可能大家都想学习AI大模型技术也_想通过这项技能真正达到升职加薪就业或是副业的目的但是不知道该如何开始学习因为网上的资料太多太杂乱了如果不能系统的学习就相当于是白学。为了让大家少走弯路少碰壁这里我直接把都打包整理好希望能够真正帮助到大家_。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: returntools returnend # 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 关键设计思想状态驱动架构# 文件路径: libs/langgraph/langgraph/prebuilt/agent_executor.py # 状态是系统的核心 class AgentState(TypedDict): messages: Annotated[Sequence[BaseMessage], add_messages] # 消息历史 remaining_steps: NotRequired[RemainingSteps] # 剩余步数状态包含所有必要信息支持断点续传便于调试和监控。条件路由机制# 文件路径: 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 # 直接结束基于内容而非规则支持复杂决策逻辑易于扩展和修改。工具绑定机制# 文件路径: 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: 版本选择 关键设计点状态模式的动态选择# 文件路径: libs/langgraph/langgraph/prebuilt/agent_executor.py if state_schema is None: state_schema ( AgentStateWithStructuredResponse if response_format is not None else AgentState )简单场景使用基础状态复杂场景支持结构化输出避免了过度设计。工具绑定的智能判断# 文件路径: libs/langgraph/langgraph/prebuilt/agent_executor.py if _should_bind_tools(model, tool_classes, num_builtinlen(llm_builtin_tools)): model model.bind_tools(tool_classes llm_builtin_tools)能自动判断模型是否需要绑定工具处理不同类型的工具用户不需要关心技术细节。路由逻辑的单一职责# 文件路径: 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: returntools只负责路由决策基于内容而非规则支持扩展钩子、结构化输出。3.2 设计原理深度分析状态管理的设计思路# 传统方法全局状态难以管理 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提供状态更新策略让状态管理既安全又灵活。条件路由的智能实现# 文件路径: 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: returntools returnend只检查最后一条消息避免了遍历整个消息历史性能更好逻辑更清晰。工具绑定的统一抽象# 文件路径: libs/langgraph/langgraph/prebuilt/agent_executor.py # 核心设计工具绑定到模型而不是单独管理 model_with_tools model.bind_tools(tools) response model_with_tools.invoke(state[messages])通过工具绑定机制让AI能够调用工具而不需要了解工具的具体实现细节。复杂性管理ReAct系统天然复杂但通过精妙的设计让复杂性变得可控。可扩展性基础功能保持简洁复杂需求通过扩展支持。可理解性通过声明式的图结构开发者可以直观地理解系统行为。了解 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( modelself.llm, toolsself.tools, promptself.system_prompt, versionv2 # 支持并行工具调用 ) def generate_outline(self, user_input: str) - str: 生成PPT大纲 - 核心业务逻辑 # 1. 构建输入 messages [HumanMessage(contentuser_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, promptNone, versionv2): 创建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: returntools returnend # 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, limit3) elif knowledge_type product: results product_knowledge_base.search(query, limit3) else: results knowledge_base.search(query, limit5) # 返回原始数据让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: partialif只要 in user_input elsefull, 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)工具设计原则工具设计要遵循单一职责原则每个工具只做一件事做好一件事。工具只提供原始数据不进行业务逻辑处理同时需要优雅地处理各种异常情况支持并行调用和缓存机制。可能大家都想学习AI大模型技术也_想通过这项技能真正达到升职加薪就业或是副业的目的但是不知道该如何开始学习因为网上的资料太多太杂乱了如果不能系统的学习就相当于是白学。为了让大家少走弯路少碰壁这里我直接把都打包整理好希望能够真正帮助到大家_。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_score4.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_iterations5): 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: returnend # 其他逻辑...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智能配置管理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])工具并行调用# 支持并行工具调用 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))调用频率控制import time from collections import defaultdict classRateLimiter: def __init__(self, max_calls_per_minute60): 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_idoutline_id, tool_nametool_name, tool_argstool_args, step_countstep_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(modelqwen3:8b, temperature0.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(contentprompt)]) # 更新状态 new_state state.copy() new_state[messages] state[messages] [AIMessage(contentresponse.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(contentf工具执行结果: {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(contentquestion)], current_step: start, tool_results: {}, reasoning: } # 执行循环 max_iterations 5 for i in range(max_iterations): print(f\n--- 第{i1}轮执行 ---) # 1. Agent节点 self.state self.agent_node(self.state) print(fAgent推理: {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运营薪资平均值约18457元AI工程师薪资平均值约37336元大模型算法薪资平均值约39607元。掌握大模型技术你还能拥有更多可能性• 成为一名全栈大模型工程师包括PromptLangChainLoRA等技术开发、运营、产品等方向全栈工程• 能够拥有模型二次训练和微调能力带领大家完成智能对话、文生图等热门应用• 薪资上浮10%-20%覆盖更多高薪岗位这是一个高需求、高待遇的热门方向和领域• 更优质的项目可以为未来创新创业提供基石。可能大家都想学习AI大模型技术也_想通过这项技能真正达到升职加薪就业或是副业的目的但是不知道该如何开始学习因为网上的资料太多太杂乱了如果不能系统的学习就相当于是白学。为了让大家少走弯路少碰壁这里我直接把都打包整理好希望能够真正帮助到大家_。一、AGI大模型系统学习路线很多人学习大模型的时候没有方向东学一点西学一点像只无头苍蝇乱撞下面是我整理好的一套完整的学习路线希望能够帮助到你们学习AI大模型。第一阶段 从大模型系统设计入手讲解大模型的主要方法第二阶段 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用第三阶段 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统第四阶段 大模型知识库应用开发以LangChain框架为例构建物流行业咨询智能问答系统第五阶段 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型第六阶段 以SD多模态大模型为主搭建了文生图小程序案例第七阶段 以大模型平台应用与开发为主通过星火大模型文心大模型等成熟大模型构建大模型行业应用。二、640套AI大模型报告合集这套包含640份报告的合集涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师还是对AI大模型感兴趣的爱好者这套报告合集都将为您提供宝贵的信息和启示。三、AI大模型经典PDF书籍随着人工智能技术的飞速发展AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型如GPT-3、BERT、XLNet等以其强大的语言理解和生成能力正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。四、AI大模型各大场景实战案例结语【一一AGI大模型学习 所有资源获取处无偿领取一一】所有资料 ⚡️ 朋友们如果有需要全套 《LLM大模型入门进阶学习资源包》扫码获取~
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

韩雪冬个人网站 北京杭州网站建设优化

开源开发者工具组件库:三步快速搭建专业级应用界面 【免费下载链接】romm A beautiful, powerful, self-hosted rom manager 项目地址: https://gitcode.com/GitHub_Trending/rom/romm 你是否遇到过这样的困境:项目启动阶段,前端界面开…

张小明 2025/12/29 14:18:31 网站建设

商城网站建设适合于哪类企业医院网站建设投标书

在AI加速领域,AMD GPU通过ROCm平台的深度优化,正在实现Transformer模型性能的显著突破。本指南将揭示如何通过精准诊断、策略实施和效能验证,让AMD显卡在大语言模型训练中实现40%的性能提升和35%的推理延迟降低。 【免费下载链接】xformers H…

张小明 2025/12/28 10:50:44 网站建设

江苏网站建设定制饶阳网站建设

告别图片重复烦恼:AntiDupl.NET智能去重全攻略 【免费下载链接】AntiDupl A program to search similar and defect pictures on the disk 项目地址: https://gitcode.com/gh_mirrors/an/AntiDupl 你是否曾经在整理照片时发现,同一张美景被保存在…

张小明 2025/12/31 4:42:23 网站建设

广州做外贸网站的公司简介数字经济团体赛

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

张小明 2025/12/30 6:39:14 网站建设

网站自己可以做么sem即

手把手带你吃透Buck电路:从原理到实战设计你有没有遇到过这样的情况?手头一个项目需要把12V转成5V供电,线性稳压器发热严重、效率低得离谱。这时候,工程师老张拍了拍你的肩膀:“上个Buck吧。”可当你打开数据手册&…

张小明 2025/12/29 23:10:33 网站建设

网站平台设计 问题上海天华建筑设计有限公司怎么样

一、项目介绍 项目背景: 数字识别是计算机视觉领域的一个重要任务,广泛应用于车牌识别、手写数字识别、工业自动化、文档处理等场景。传统的数字识别方法依赖于特征工程和模板匹配,难以应对复杂场景下的识别需求。基于深度学习的目标检测技术能够自动学…

张小明 2025/12/31 10:53:27 网站建设