AI应用开发10-Loop机制与推理框架
2026/6/7 17:18:01 网站建设 项目流程

说明

对AI应用开发所涉及到的流程、工具、技能进行系列介绍,全部文章收录于《AI应用开发》专栏。关注+收藏,不错过后续精彩。

前置文章

AI应用开发01-环境准备
AI应用开发02-从零构建AI聊天机器人
AI应用开发03-RAG增强知识问答
AI应用开发04-对话+RAG管理桌面端GUI
AI应用开发05-MCP集成
AI应用开发06-SKILL的诞生
AI应用开发06-SKILL执行原理与落地场景
AI应用开发07-深入认识MCP
AI应用开发08-Python前后端分离之FastAPI
AI应用开发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": f"Observation: {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 实现构成

推理框架的实现包含两个必要组成部分:

  1. 提示词模板:用于约束模型的输出格式。例如ReAct模板要求模型输出以“Thought:”“Action:”“Observation:”为前缀的行。
  2. 输出解析器:一个确定性程序,用于从模型输出中提取结构化的动作信息。解析器不依赖模型能力,仅执行模式匹配或语法分析。

需要指出:仅提供提示词模板而不配备解析器与动作执行逻辑,不能构成可工作的推理框架。

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(type="final_answer", content=answer) 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(type="tool_call", tool_name=tool_name, parameters=params) return Action(type="error", error="Unable to parse output")

四、循环机制与推理框架的关系

循环机制与推理框架在Agent系统中处于不同层次,通过明确接口协作。

4.1 层次区分
  • 循环机制位于执行层,关注“何时停止、如何保存状态、如何处理错误”。它不关心模型具体按照何种格式思考。
  • 推理框架位于策略层,关注“模型应该输出什么格式、如何解析、下一步应当采取什么类型的动作”。它不负责循环控制或状态持久化。
4.2 协作方式

两者通过标准化的动作接口进行交互。典型的协作流程如下:

  1. 循环机制调用推理框架的build_prompt方法,获得当前轮次的提示词。
  2. 循环机制调用语言模型,获得原始输出。
  3. 循环机制将模型输出传递给推理框架的parse方法,获得一个动作对象(例如ToolCallFinalAnswerReplan)。
  4. 循环机制根据动作类型执行相应操作(调用工具、更新状态、终止循环等),并更新状态。
  5. 循环机制更新内部状态后,进入下一轮迭代。
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": f"Observation: {observation}" }) except Exception as e: state.history.append({ "role": "assistant", "content": f"Error executing tool: {str(e)}" }) else: state.history.append({ "role": "assistant", "content": f"Unknown 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(f"Reached max steps {this.max_steps}") return state.final_answer
4.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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询