ReAct 框架实战:50 行代码实现一个最小 Agent Loop
一、ReAct 到底是什么ReAct Reasoning Acting它让模型在推理和行动之间交替先判断下一步该做什么再调用工具再根据观察结果继续。说实话ReAct 是理解 Agent loop 的入门框架。但工程里不要迷信让模型一直想——你真正要设计的是工具、状态、停止条件、错误恢复和 trace。二、基本模式经典的 ReAct 格式是这样的Question: ... Thought: I need to search for evidence. Action: search(query...) Observation: ... Thought: The evidence is enough. Final Answer: ...但真实系统建议不要存完整的Thought而是存可审计的摘要。不然模型想太多不仅费 token还容易跑偏。2.1 可审计的 Trace 格式{step:2,action:search,args:{query:agentic rag evaluation},reason_summary:Need external evidence before comparing methods.,observation_summary:Found 5 papers from 2024-2025.}这样既保留了可追溯性又不会让模型的思考过程膨胀到失控。三、50 行代码实现一个最小 Agent话不多说直接上代码。这段代码能让你看清 Agent loop 的完整过程。3.1 最小实现defreacttask,model,tools,max_steps6forinrangeiftypefinalreturnansweranswertracestatuscompletedtoolifnotinokFalseerrorunknown_toolelseargsstep1toolargsargsobservationreturnanswerNonetracestatusmax_steps_exceeded3.2 代码深度解读这段代码虽然短但包含了 Agent 的核心逻辑初始化阶段•trace []记录每一步的决策用于调试和审计•observations []保存工具返回的结果用于上下文构建循环阶段•for step in range(max_steps)最多执行 max_steps 步防止无限循环•build_prompt(task, tools, observations)构建 prompt包含任务、工具、历史观察•model.generate_json(prompt)模型根据当前状态生成下一步决策决策分支•if decision[type] final模型决定结束返回答案和 trace•else模型决定调用工具执行工具调用工具调用•if tool_name not in tools工具不存在返回错误•else工具存在执行工具调用获取观察结果记录阶段•observations.append(obs)保存观察结果用于后续上下文•trace.append({...})记录这一步的决策和结果异常处理• 超过最大步数返回max_steps_exceeded状态• 工具不存在返回错误信息3.3 数据流分析Task (用户任务) ↓ Prompt Builder (构建 prompt) ├─ Task ├─ Tools (工具列表) └─ Observations (历史观察) ↓ Model (模型决策) ├─ Type: tool_call | final ├─ Tool: 工具名称 ├─ Args: 工具参数 └─ Answer: 最终答案 ↓ Tool Executor (执行工具) ├─ Tool Name ├─ Args └─ Observation (观察结果) ↓ Trace Recorder (记录 trace) ├─ Step ├─ Tool ├─ Args └─ Observation Summary ↓ Return (返回结果) ├─ Answer ├─ Trace └─ Status3.4 关键设计决策为什么用 JSON 格式• 结构化输出容易解析• 类型明确减少错误• 易于扩展可以添加新字段为什么限制最大步数• 防止无限循环• 控制成本• 强制模型在有限步数内完成任务为什么记录 trace• 调试出问题时可以查看每一步的决策• 审计可以追踪 Agent 的行为• 优化可以分析哪些步骤可以优化为什么 summarize observation• 控制上下文长度• 提取关键信息• 减少干扰四、Prompt 设计技巧Prompt 是 Agent 的灵魂。好的 Prompt 能让模型更聪明坏的 Prompt 能让模型发疯。4.1 推荐的 Prompt 结构You are an agent that solves the task by calling tools. Rules: - Use only the listed tools. - Stop when enough evidence is collected. - If evidence is missing, say what is missing. - Never fabricate tool results. Task: {task} Tools: {tool_cards} Previous observations: {observations} Return JSON: { type: tool_call | final, tool: tool name or null, args: {}, answer: final answer or null, reason_summary: short auditable reason }4.2 Prompt 各部分深度解析System Role系统角色You are an agent that solves the task by calling tools.• 明确 Agent 的角色一个通过调用工具解决问题的智能体• 设定 Agent 的行为模式调用工具、观察结果、推进任务Rules规则- Use only the listed tools. - Stop when enough evidence is collected. - If evidence is missing, say what is missing. - Never fabricate tool results.• 限制工具使用只能使用列出的工具不能编造工具• 明确停止条件收集到足够证据就停止• 处理缺失信息如果证据缺失明确说明缺失什么• 禁止编造不能编造工具结果必须基于真实观察Task任务{task}• 清晰描述任务目标• 包含任务约束如预算、时间• 明确成功标准Tools工具列表{tool_cards}每个工具卡片包含• 工具名称清晰、具体、无歧义• 工具描述能做什么不能做什么• 参数定义参数类型、范围、默认值• 返回值返回什么格式是什么• 示例如何调用返回什么Previous Observations历史观察{observations}• 记录之前的工具调用和结果• 用于上下文构建• 帮助模型理解当前状态Return JSON返回格式{ type: tool_call | final, tool: tool name or null, args: {}, answer: final answer or null, reason_summary: short auditable reason }•type决策类型工具调用或结束•tool工具名称如果 type 是 final 则为 null•args工具参数如果 type 是 final 则为空•answer最终答案如果 type 是 tool_call 则为 null•reason_summary简短的可审计理由4.3 关键设计原则1. 规则要明确别写尽量不要…“这种模糊的话直接写禁止…”、“必须…”。反例- Try to use the listed tools. - Stop when you think you have enough evidence.正例- Use only the listed tools. - Stop when enough evidence is collected.2. 工具描述要具体别写查数据要写清楚• 工具能做什么• 参数是什么类型是什么• 返回什么• 举个例子反例search: 查数据正例search: 搜索互联网上的信息 参数: query: 搜索关键词字符串必需 num_results: 返回结果数量整数可选默认 5 返回: results: 搜索结果列表每个结果包含 title、url、snippet 示例: 输入: {query: AI Agent, num_results: 3} 输出: {results: [{title: ..., url: ..., snippet: ...}]}3. 格式要严格让模型返回 JSON并且明确每个字段的含义。最好给个示例模型更容易理解。反例Return your decision.正例Return JSON: { type: tool_call | final, tool: tool name or null, args: {}, answer: final answer or null, reason_summary: short auditable reason } Example: { type: tool_call, tool: search, args: {query: AI Agent}, answer: null, reason_summary: Need to search for information about AI Agent. }4. 限制思考长度不要让模型写长篇大论的思考只让它写reason_summary——一句话说明为什么选这个工具。反例thought: I need to search for information about AI Agent. Let me think about what keywords to use. Maybe AI Agent or autonomous agent. Ill start with AI Agent and see what I get.正例reason_summary: Need to search for information about AI Agent.4.4 Prompt 优化技巧技巧 1使用 Few-Shot Examples给模型几个示例让它理解如何调用工具。Example 1: Task: What is the weather in Beijing tomorrow? Decision: { type: tool_call, tool: search_weather, args: {city: Beijing, date: tomorrow}, answer: null, reason_summary: Need to check weather forecast for Beijing tomorrow. } Example 2: Task: Summarize the latest news about AI. Decision: { type: tool_call, tool: search_news, args: {query: AI, num_results: 5}, answer: null, reason_summary: Need to search for latest AI news to summarize. }技巧 2使用 Chain-of-Thought让模型先思考再行动。Think step by step: 1. What do I need to do? 2. Which tool can help? 3. What parameters does the tool need? 4. What do I expect the tool to return? Then make your decision.技巧 3使用 Reflection让模型反思之前的决策。After each tool call, reflect: - Did the tool return what I expected? - Do I have enough information to answer the question? - What should I do next? If the tool failed or returned unexpected results, try a different approach.技巧 4使用 Self-Correction让模型自我纠正错误。If you make a mistake: 1. Acknowledge the mistake. 2. Explain why it was a mistake. 3. Propose a correction. 4. Execute the correction. Example: Mistake: I called the wrong tool. Correction: I should have called search_weather instead of search_news. Action: Call search_weather with the correct parameters.五、工程化注意事项上面的代码只是一个最小实现。真实项目中你还需要考虑这些问题5.1 状态持久化长任务需要持久化状态不然 Agent 重启后就忘了之前做了什么。我之前做过一个代码修复 Agent改到第三步就忘了第一步改了什么——因为状态只存在内存里重启后全丢了。后来用 LangGraph 的持久执行问题就解决了。5.2 错误恢复工具调用可能失败网络可能超时模型可能返回格式错误。你需要• 重试机制• 超时控制• 格式校验• 降级方案5.3 人工介入有些高风险操作需要人工确认比如发邮件、删文件、付款。你需要• 权限分级• human-in-the-loop 机制• 审核日志5.4 成本控制模型调用和工具调用都要花钱。你需要• Token 预算控制• 缓存机制• 成本监控六、常见坑坑一让模型想太多模型的思考过程会消耗大量 token而且不一定有用。建议只记录reason_summary而不是完整的 chain-of-thought。坑二工具返回值太长工具返回 10MB 的原始数据模型根本处理不过来。建议• 返回摘要• 分页返回• 只返回关键信息坑三没有停止条件Agent 可能无限循环搜索信息。建议• 设置最大步数• 设置时间限制• 让模型自己判断是否停止坑四没有 trace出问题时不知道模型做了什么根本无法调试。一定要记录完整的 trace。七、从 50 行代码到生产级系统上面的代码只是一个起点。要做成生产级系统你需要状态管理用 LangGraph 或类似框架管理复杂状态流持久化把状态和 trace 存到数据库安全权限分级、审计日志、数据脱敏评测构造 eval case持续评估 Agent 效果监控监控延迟、成本、成功率运维部署、扩容、故障恢复学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】