【04】50 行代码实现最小 Agent:不依赖任何框架 📅 2026/7/8 6:08:17 50 行代码实现最小 Agent不依赖任何框架基于 Lion-1209/AgentStudy 仓库完整代码stage1-fundamentals/task1.1_minimal_react.py为什么从零实现“框架 你手写的内核 工程化外壳”不理解内核用框架就是黑盒。理解了内核框架只是工具选择。完整实现第一步定义工具# 工具 一个函数 描述信息defget_weather(city:str)-str:获取指定城市的天气模拟数据weather_data{北京:晴天温度 25°C,上海:多云温度 28°C,深圳:阵雨温度 30°C,}returnweather_data.get(city,f未找到{city}的天气数据)# 工具注册表TOOLS{get_weather:{func:get_weather,description:获取指定城市的天气信息,params:{city:城市名称如北京}}}第二步构建系统提示词defbuild_system_prompt()-str:tool_descriptions\n.join(f -{name}:{info[description]}forname,infoinTOOLS.items())returnf你是一个有用的AI助手。你可以使用以下工具{tool_descriptions}当你需要使用工具时请严格按以下格式输出 Thought: 你的思考过程 Action: 工具名称 Action Input: 工具参数的 JSON 当你有了足够的信息可以回答用户时请输出 Thought: 你的思考过程 Final Answer: 最终回答 重要每次只能使用一个工具。这个提示词就是 Agent 的灵魂。它告诉 LLM 什么时候思考、什么时候行动、什么时候给出最终答案。第三步ReAct 循环核心defrun_agent(user_query:str,max_iterations:int5)-str:messages[{role:system,content:build_system_prompt()},{role:user,content:user_query}]foriinrange(max_iterations):# 1. 调用 LLMresponseclient.chat.completions.create(modelmodel,messagesmessages,temperature0)assistant_messageresponse.choices[0].message.content# 2. 检查是否有最终回答final_answerparse_final_answer(assistant_message)iffinal_answer:returnfinal_answer# 3. 检查是否需要调用工具action_resultparse_action(assistant_message)ifaction_result:action_name,action_inputaction_resultifaction_nameinTOOLS:# 执行工具tool_resultTOOLS[action_name][func](action_input)# 把结果喂回 LLM这就是 Observemessages.append({role:assistant,content:assistant_message})messages.append({role:user,content:fObservation:{tool_result}\n\n请继续思考。})return抱歉我无法在规定步数内完成任务。运行效果# 测试 1简单工具调用resultrun_agent(北京今天天气怎么样)# 测试 2多步推理resultrun_agent(帮我查一下北京和上海的天气然后算一下温差)核心架构图ActionFinal Answer格式错误用户问题系统提示词LLM调用解析输出执行工具加入消息历史返回结果提示重新输出关键设计决策决策选择原因工具调用机制正则解析教学用直观理解 ReAct 格式消息历史简单列表短期记忆后面会扩展循环终止最大步数限制防止无限循环错误处理简单提示生产环境需要更 robust 的处理这个实现是教学用的。生产环境要用 Function Calling API 和成熟的框架。学习检查清单能手写这个最小 Agent 循环不看参考吗能解释消息历史messages的作用吗理解为什么 Observation 要作为新消息加入历史吗延伸阅读 完整代码stage1-fundamentals/task1.1_minimal_react.py 概念文档docs/stage1/what-is-agent.md️ 上一篇[03] Function Calling让 LLM 拥有双手️ 下一篇[05] Agent 的记忆系统