
说明对AI应用开发所涉及到的流程、工具、技能进行系列介绍全部文章收录于《AI应用开发》专栏。关注收藏不错过后续精彩。前置文章AI应用开发01-环境准备AI应用开发02-从零构建AI聊天机器人AI应用开发03-RAG增强知识问答AI应用开发04-对话RAG管理桌面端GUIAI应用开发05-MCP集成AI应用开发06-SKILL的诞生AI应用开发06-SKILL执行原理与落地场景AI应用开发07-深入认识MCPAI应用开发08-Python前后端分离之FastAPIAI应用开发09-MCP客户端与服务端实践一、概述本文旨在对AI Agent系统中的两个基础性概念进行系统梳理循环执行机制Loop与推理框架Reasoning Framework。理解两者的定义、功能边界及协作关系是实现可控、可扩展Agent系统的必要条件。二、循环执行机制Loop循环执行机制是Agent运行过程中的基本控制结构。其典型形式为在满足终止条件之前重复执行“接收输入 → 调用语言模型 → 解析输出 → 执行动作 → 更新状态”这一序列。2.1 功能定位循环机制位于Agent架构的执行层负责控制迭代次数与终止条件维护跨轮次的状态包括对话历史、中间结果、任务进度调度外部工具或子模块的执行处理运行时异常如超时、工具调用失败。2.2 设计维度维度说明常见实现方式循环触发何时启动或继续一轮循环用户输入、定时事件、系统调用状态管理跨轮信息存储与传递内存对象、外部缓存Redis、关系数据库终止条件何时结束循环达到最大步数、模型输出终止符、任务完成标志异常处理单步失败后的行为重试、降级、重新规划、人工介入2.3 常见实现模式基本循环每轮调用一次语言模型根据输出决定下一动作。适用于ReAct等动态推理框架。规划-执行循环先由模型生成完整计划再逐步执行。适用于确定性较强的长流程任务。工作流驱动循环基于有向无环图DAG的确定性调度适合企业级数据处理。事件驱动循环异步消费事件队列用于高并发或多会话场景。2.4 基本循环伪代码示例以下伪代码展示了一个最小化的循环执行机制包含迭代控制、状态管理、工具调度和终止条件。function run_agent(user_input): state { history: [{role: user, content: user_input}], step: 0, max_steps: 10, final_answer: None } while state.step state.max_steps and state.final_answer is None: # 1. 调用语言模型 prompt build_prompt(state.history) response llm.generate(prompt) # 2. 解析模型输出 action parse_action(response) # 3. 执行动作 if action.type tool_call: observation execute_tool(action.tool_name, action.parameters) state.history.append({role: assistant, content: fObservation: {observation}}) elif action.type final_answer: state.final_answer action.content elif action.type error: handle_error(action.error) # 可选择重试或降级 state.step 1 if state.final_answer is None: raise MaxIterationsExceeded() return state.final_answer生产环境中需额外考虑超时控制、状态持久化如每步后写入Redis、断点恢复逻辑。三、推理框架Reasoning Framework推理框架定义了Agent在每一轮循环中应当遵循的思考与行动的模式。它通过提示词模板规范语言模型的输出格式并通过代码解析器将模型输出转化为可执行的动作。3.1 功能定位推理框架位于Agent架构的策略层负责构造适用于当前任务阶段的提示词包括角色设定、输出格式示例、可用工具说明解析语言模型的文本输出提取动作类型与参数在某些框架中还承担任务分解、计划维护、记忆读写等更高层逻辑。3.2 代表性框架概要框架名称工作流概要主要特点适用场景ReAct交替生成“思考”与“行动”文本行动后获得观察结果动态适应推理过程可解释开放性任务、需要环境反馈的场景Plan-and-Execute首先生成步骤列表再依次执行长流程稳定性较高步骤可预先确定的业务流程ReWOO一次性生成完整工具调用链批量执行后汇总与语言模型交互次数少Token消耗低成本敏感、工具链明确的批处理任务Reflection生成初稿后使用同一或另一模型进行批判并修订改善单次输出的质量文本生成、代码修复等需自我优化任务Reflexion将失败经验存储为语言形式的长期记忆供后续任务参考具备跨任务的学习能力需要从试错中改进的策略性问题LATS结合树搜索与自我反思探索多条推理路径并选择最优解推理质量高但计算开销较大高难度推理、编程等需探索的任务ReCode通过递归生成代码来统一高层规划与底层操作可动态控制推理粒度长程复杂任务兼具规划与执行需求3.3 实现构成推理框架的实现包含两个必要组成部分提示词模板用于约束模型的输出格式。例如ReAct模板要求模型输出以“Thought:”“Action:”“Observation:”为前缀的行。输出解析器一个确定性程序用于从模型输出中提取结构化的动作信息。解析器不依赖模型能力仅执行模式匹配或语法分析。需要指出仅提供提示词模板而不配备解析器与动作执行逻辑不能构成可工作的推理框架。3.4 推理框架接口伪代码示例以下伪代码定义了推理框架的抽象接口以及ReAct框架的示例实现。// 抽象接口 interface ReasoningFramework: function build_prompt(state, user_input) returns string function parse(llm_output) returns Action // ReAct框架实现 class ReActFramework implements ReasoningFramework: function build_prompt(state, user_input): tools_desc format_tools(state.available_tools) return f You are an agent. Use the following tools: {tools_desc} Respond in this format: Thought: [your reasoning] Action: tool_name[parameters] Observation: [result will be provided] (repeat Thought/Action/Observation as needed) Final Answer: [final answer] User question: {user_input} function parse(llm_output): if Final Answer: in llm_output: answer extract_after(Final Answer:, llm_output) return Action(typefinal_answer, contentanswer) if Action: in llm_output: action_line extract_line_starting_with(Action:, llm_output) // 期望格式: Action: tool_name[param1, param2] tool_name, params parse_action_line(action_line) return Action(typetool_call, tool_nametool_name, parametersparams) return Action(typeerror, errorUnable to parse output)四、循环机制与推理框架的关系循环机制与推理框架在Agent系统中处于不同层次通过明确接口协作。4.1 层次区分循环机制位于执行层关注“何时停止、如何保存状态、如何处理错误”。它不关心模型具体按照何种格式思考。推理框架位于策略层关注“模型应该输出什么格式、如何解析、下一步应当采取什么类型的动作”。它不负责循环控制或状态持久化。4.2 协作方式两者通过标准化的动作接口进行交互。典型的协作流程如下循环机制调用推理框架的build_prompt方法获得当前轮次的提示词。循环机制调用语言模型获得原始输出。循环机制将模型输出传递给推理框架的parse方法获得一个动作对象例如ToolCall、FinalAnswer、Replan。循环机制根据动作类型执行相应操作调用工具、更新状态、终止循环等并更新状态。循环机制更新内部状态后进入下一轮迭代。4.3 协作伪代码示例以下伪代码展示了一个通用的Agent执行器它接受任意实现了推理框架接口的策略并在统一的循环中运行。class AgentExecutor: function __init__(framework: ReasoningFramework, tools: dict, max_steps: int): this.framework framework this.tools tools this.max_steps max_steps function run(user_input: str) - str: state { history: [], step: 0, available_tools: this.tools, final_answer: None } while state.step this.max_steps and state.final_answer is None: // 1. 框架构建提示词 prompt this.framework.build_prompt(state, user_input) // 2. 调用语言模型 llm_output llm.generate(prompt) // 3. 框架解析输出 action this.framework.parse(llm_output) // 4. 循环机制根据动作类型执行分支 if action.type tool_call: tool this.tools.get(action.tool_name) if tool is not None: try: observation tool.execute(action.parameters) state.history.append({ role: assistant, content: fObservation: {observation} }) except Exception as e: state.history.append({ role: assistant, content: fError executing tool: {str(e)} }) else: state.history.append({ role: assistant, content: fUnknown tool: {action.tool_name} }) elif action.type final_answer: state.final_answer action.content elif action.type error: // 可选择重试、降级或终止 if state.step this.max_steps - 1: state.final_answer Execution failed due to repeated errors. // 否则继续下一轮状态中已包含错误信息 state.step 1 if state.final_answer is None: raise MaxIterationsExceeded(fReached max steps {this.max_steps}) return state.final_answer4.4 设计原则关注点分离循环机制不应包含任何与特定推理框架相关的逻辑如提示词格式、解析规则。推理框架不应包含循环控制逻辑。可插拔性应允许在不修改循环实现的情况下替换或组合不同的推理框架。状态显式传递循环机制维护的状态应当以结构化形式如字典或数据类传递给推理框架的提示词构建方法避免隐式依赖。五、总结循环机制是Agent的执行骨架负责迭代、状态管理与异常处理。推理框架是Agent的决策策略负责提示词构建与输出解析。两者通过标准动作接口协作共同构成完整的Agent运行系统。在实际工程中建议将循环机制实现为可复用的执行引擎将推理框架实现为可配置的策略模块。这种分离设计有助于提升系统的可维护性与扩展性。参考资料[1] Yao, S., et al.ReAct: Synergizing Reasoning and Acting in Language Models. arXiv:2210.03629, 2022. https://arxiv.org/abs/2210.03629[2] LangChain.Agent Loop Custom Framework Integration. https://python.langchain.com/docs/modules/agents/how_to/custom_agent[3] LangGraph.Persistence Checkpointing. https://langchain-ai.github.io/langgraph/concepts/persistence/[4] OpenAI.Agents SDK - Loop Design Patterns. https://openai.github.io/openai-agents-python/loop/[5] Anthropic.Building Reliable Agents. https://www.anthropic.com/research/building-reliable-agents